Files
2026-03-04 10:03:45 +08:00

71 lines
1.8 KiB
C#

using UnityEngine;
namespace UnityStandardAssets.Vehicles.Aeroplane
{
public class AeroplanePropellerAnimator : MonoBehaviour
{
[SerializeField]
private Transform m_PropellorModel;
[SerializeField]
private Transform m_PropellorBlur;
[SerializeField]
private Texture2D[] m_PropellorBlurTextures;
[SerializeField]
[Range(0f, 1f)]
private float m_ThrottleBlurStart = 0.25f;
[SerializeField]
[Range(0f, 1f)]
private float m_ThrottleBlurEnd = 0.5f;
[SerializeField]
private float m_MaxRpm = 2000f;
private AeroplaneController m_Plane;
private int m_PropellorBlurState = -1;
private const float k_RpmToDps = 60f;
private Renderer m_PropellorModelRenderer;
private Renderer m_PropellorBlurRenderer;
private void Awake()
{
m_Plane = GetComponent<AeroplaneController>();
m_PropellorModelRenderer = m_PropellorModel.GetComponent<Renderer>();
m_PropellorBlurRenderer = m_PropellorBlur.GetComponent<Renderer>();
m_PropellorBlur.parent = m_PropellorModel;
}
private void Update()
{
m_PropellorModel.Rotate(0f, m_MaxRpm * m_Plane.Throttle * Time.deltaTime * 60f, 0f);
int num = 0;
if (m_Plane.Throttle > m_ThrottleBlurStart)
{
num = Mathf.FloorToInt(Mathf.InverseLerp(m_ThrottleBlurStart, m_ThrottleBlurEnd, m_Plane.Throttle) * (float)(m_PropellorBlurTextures.Length - 1));
}
if (num != m_PropellorBlurState)
{
m_PropellorBlurState = num;
if (m_PropellorBlurState == 0)
{
m_PropellorModelRenderer.enabled = true;
m_PropellorBlurRenderer.enabled = false;
}
else
{
m_PropellorModelRenderer.enabled = false;
m_PropellorBlurRenderer.enabled = true;
m_PropellorBlurRenderer.material.mainTexture = m_PropellorBlurTextures[m_PropellorBlurState];
}
}
}
}
}