diff --git a/Assets/Content/Scripts/ProceduralAnimator.cs b/Assets/Content/Scripts/ProceduralAnimator.cs
index 657eb8e..f6db7f0 100644
--- a/Assets/Content/Scripts/ProceduralAnimator.cs
+++ b/Assets/Content/Scripts/ProceduralAnimator.cs
@@ -43,6 +43,9 @@ public class ProceduralAnimator : MonoBehaviour
[Tooltip("Custom animation curve")]
public AnimationCurve Curve = AnimationCurve.EaseInOut(0, 0, 1, 1);
+ [Tooltip("Play on Awake")]
+ public bool PlayOnAwake = true;
+
[Tooltip("Animation speed multiplier")]
public float Duration = 4;
@@ -76,11 +79,20 @@ public class ProceduralAnimator : MonoBehaviour
[SerializeField] private Settings _settings;
[SerializeField] private State _state;
+ private bool _started;
+ private float _timeOffset;
+
void OnDrawGizmosSelected()
{
}
+ void OnEnable()
+ {
+ _timeOffset = Time.timeSinceLevelLoad;
+ _started = _settings.PlayOnAwake;
+ }
+
void Start()
{
_state.InitialPosition = transform.localPosition;
@@ -92,10 +104,10 @@ public class ProceduralAnimator : MonoBehaviour
void Update()
{
- if (_state.IsFinished)
+ if (_state.IsFinished || !_started)
return;
- _state.CurrentTime = Time.timeSinceLevelLoad + _settings.TimeOffset * _settings.Duration;
+ _state.CurrentTime = Time.timeSinceLevelLoad + _settings.TimeOffset * _settings.Duration - _timeOffset;
float normalizedTime = GetNormalizedTime(_state.CurrentTime);
float easedTime = ApplyEasing(normalizedTime);
@@ -106,6 +118,17 @@ public class ProceduralAnimator : MonoBehaviour
ApplyScale(balanceTime);
}
+ ///
+ /// Play animation from initial state.
+ ///
+ [ContextMenu("PlayAnimation")]
+ public void PlayAnimation()
+ {
+ ResetAnimation();
+ _timeOffset = Time.timeSinceLevelLoad;
+ _started = true;
+ }
+
///
/// Resets animation to initial state.
///