using System.Collections.Generic; using DG.Tweening; using UnityEngine; namespace AibisDream { public class Vehicle : MonoBehaviour { public float speed; private Vector3 _target; private readonly List _tweenList = new(); private int _sortingLayerId; private int _sortingLayerOrder; // 仅负责让轮子转起来 private void OnEnable() { LoadSpawnData(); var car = GetComponent(); car.sortingOrder = _sortingLayerOrder; car.sortingLayerID = _sortingLayerId; // 加载轮子 foreach (Transform wheel in transform) { if (!wheel.name.StartsWith("轮子")) continue; var wheelSprite = wheel.GetComponent(); wheelSprite.sortingOrder = _sortingLayerOrder + 1; wheelSprite.sortingLayerID = _sortingLayerId; // 转动 Tween tween = wheel.DORotate(_target, 1 / Mathf.Abs(speed), RotateMode.LocalAxisAdd) .SetEase(Ease.Linear) .SetLoops(-1, LoopType.Incremental); _tweenList.Add(tween); } } private void OnDisable() { _tweenList.ForEach(tween => tween.Kill()); _tweenList.Clear(); } // 其他部分,主要是有关层级和方向 private void LoadSpawnData() { MobileObjectData data = transform.parent.GetComponent().mobileObjectData; // 获取一些数据 _target = data.flipX ? new Vector3(0, 0, -360) : new Vector3(0, 0, 360); _sortingLayerId = data.sortingLayerId; _sortingLayerOrder = data.sortingOrder; } } }