using System; using UnityEngine; 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() { _engineSystem.updateSpeedEvent.AddListener(OnSpeedUpdate); } private void OnSpeedUpdate(float originSpeed, float speedScale) { Debug.Log(speedScale); // 处理齿轮速度 foreach (var gear in engineGears) { gear.SetSpeedScale(speedScale * _engineSystem.engineConfig.gearSpeed); } } } [Serializable] public struct EngineGear { public Renderer renderer; public float speedRadio; private static readonly int UVRotateSpeed = Shader.PropertyToID("_UVRotateSpeed"); /// /// 设置速度 /// /// 基础速度 public void SetSpeedScale(float speedScale) { renderer.material.SetFloat(UVRotateSpeed, speedRadio * speedScale); } } }