using Assets.MyGame.Scripts.Net.APIResponses.Enum; using Spine.Unity; using UnityEngine; public class YYSCMonsterControl : MonsterContral { public SkeletonAnimation skeletonAnimation; public SpineMovePlayer spineMovePlayer; public float startOffsetX = 100f; public float moveSpeed = 2f; [Range(0f, 1f)] public float minY01 = 0.2f; [Range(0f, 1f)] public float maxY01 = 0.8f; [Range(0f, 10f)] public float Size = 1; private Vector3 targetPos; private Vector3 startPos; private bool isMoveLeftToRight = false; public override void Awake() { base.Awake(); transform.localScale *= Size; if (skeletonAnimation == null) skeletonAnimation = GetComponent(); spineMovePlayer = new SpineMovePlayer(); spineMovePlayer.skeleton = skeletonAnimation; spineMovePlayer.Init(); } public override void Init(string pathId, float time, bool isyuzhen = false, string yzID = "") { string moveName = spineMovePlayer.PlayMove().ToLower(); float screenW = Screen.width; float screenH = Screen.height; // 0-1 随机 → 像素 float randomY01 = Random.Range(minY01, maxY01); float randomY = randomY01 * screenH; // 转世界坐标 Vector3 worldLeft = Camera.main.ScreenToWorldPoint(new Vector3(-startOffsetX, randomY, 10)); Vector3 worldRight = Camera.main.ScreenToWorldPoint(new Vector3(screenW + startOffsetX, randomY, 10)); if (moveName == "move") { isMoveLeftToRight = true; startPos = worldLeft; targetPos = worldRight; } else if (moveName == "walk") { isMoveLeftToRight = false; startPos = worldRight; targetPos = worldLeft; } else { isMoveLeftToRight = true; startPos = worldLeft; targetPos = worldRight; } transform.position = startPos; // 设置起始位置 transform.position = startPos; // ---------------- 分层逻辑 ---------------- // y 越小层越高,每 0.1 一层 float y = startPos.y; int sortingOrder = Mathf.FloorToInt(-(y / 0.1f)); // 设置 Spine 的 SortingOrder var renderer = skeletonAnimation.GetComponent(); if (renderer != null) { renderer.sortingOrder = sortingOrder; } fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType; } public override void OnEnable() { base.OnEnable(); } void Update() { transform.position = Vector3.MoveTowards( transform.position, targetPos, moveSpeed * Time.deltaTime ); if (Vector3.Distance(transform.position, targetPos) < 0.1f) { CreateFishManager.Instance.Id_DieFish_NotFX(guid); } } }