57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
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<EngineSystem>();
|
|
}
|
|
|
|
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");
|
|
|
|
/// <summary>
|
|
/// 设置速度
|
|
/// </summary>
|
|
/// <param name="speedScale">基础速度</param>
|
|
public void SetSpeedScale(float speedScale)
|
|
{
|
|
renderer.material.SetFloat(UVRotateSpeed, speedRadio * speedScale);
|
|
}
|
|
}
|
|
}
|
|
|