diff options
author | chai <chaifix@163.com> | 2022-02-18 14:38:20 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-02-18 14:38:20 +0800 |
commit | 63795c45af9ecca5aea36fbe291b18fcd9fb9b7d (patch) | |
tree | 60d811d8a0b1944ab32d24aa28394183b82cadeb /JamHelper/Assets/JamUtils/Scripts/Smooth-Motion-in-Unity/InterpolationFactorController.cs | |
parent | a41c8da0787e0285d4c5b16a5cf5bc3e7a34f521 (diff) |
*rename folder name
Diffstat (limited to 'JamHelper/Assets/JamUtils/Scripts/Smooth-Motion-in-Unity/InterpolationFactorController.cs')
-rw-r--r-- | JamHelper/Assets/JamUtils/Scripts/Smooth-Motion-in-Unity/InterpolationFactorController.cs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/JamHelper/Assets/JamUtils/Scripts/Smooth-Motion-in-Unity/InterpolationFactorController.cs b/JamHelper/Assets/JamUtils/Scripts/Smooth-Motion-in-Unity/InterpolationFactorController.cs new file mode 100644 index 0000000..efb96f3 --- /dev/null +++ b/JamHelper/Assets/JamUtils/Scripts/Smooth-Motion-in-Unity/InterpolationFactorController.cs @@ -0,0 +1,58 @@ +using UnityEngine; + +[DisallowMultipleComponent] +[DefaultExecutionOrder(ORDER_EXECUTION)] +public class InterpolationFactorController : MonoBehaviour +{ + public const int ORDER_EXECUTION = -1000; + + private static InterpolationFactorController Instance; + private float[] _lastFixedUpdates = new float[2]; + private int _lastIndex; + + public static float Factor { get; private set; } + + private void Awake() + { + if (Instance) + { + Destroy(this); + Debug.LogWarning($"The '{typeof(InterpolationFactorController).Name}' is a singleton!"); + return; + } + + Instance = this; + Factor = 1; + } + + private void Start() + { + _lastFixedUpdates = new float[2] { Time.fixedTime, Time.fixedTime }; + _lastIndex = 0; + } + + private void FixedUpdate() + { + _lastIndex = NextIndex(); + _lastFixedUpdates[_lastIndex] = Time.fixedTime; + } + + private void Update() + { + float lastTime = _lastFixedUpdates[_lastIndex]; + float prevTime = _lastFixedUpdates[NextIndex()]; + + if (lastTime == prevTime) + { + Factor = 1; + return; + } + + Factor = (Time.time - lastTime) / (lastTime - prevTime); + } + + private int NextIndex() + { + return (_lastIndex == 0) ? 1 : 0; + } +} |