using System; using DG.Tweening; using UnityEngine; using UnityEngine.UIElements; namespace AibisDream { public class MoveablePartGroup : MonoBehaviour { #region 动件索引 [Header("可动组件索引")] public EngineGear[] engineGears; public GameObject piston; #endregion private EngineSystem _engineSystem; private void Awake() { _engineSystem = transform.GetComponentInParent(); } private void Start() { // 赋予初始速度 foreach (var gear in engineGears) { gear.Rotate(_engineSystem.engineConfig.gearSpeed); } _engineSystem.updateSpeedEvent.AddListener(OnSpeedUpdate); } private void OnSpeedUpdate(float originSpeed, float speedScale) { // 处理齿轮速度 foreach (var gear in engineGears) { gear.SetSpeedScale(speedScale); } } } [Serializable] public class EngineGear { public Transform gear; public float speedRadio; private Tween _rotateTween; /// /// 设置速度 /// /// 基础速度 public void SetSpeedScale(float speedScale) { if (_rotateTween != null) { _rotateTween.timeScale = speedScale; } // _rotateTween.timeScale = speedScale; } public void Rotate(float initSpeed) { var duration = 1 / Mathf.Abs(initSpeed * speedRadio); var target = speedRadio >= 0 ? new Vector3(0, 0, 360) : new Vector3(0, 0, -360); Debug.Log("Rotate"); _rotateTween = gear.DORotate(target, duration, RotateMode.LocalAxisAdd) .SetEase(Ease.Linear) .SetLoops(-1, LoopType.Incremental); } } }