@@ -22,6 +22,10 @@ public abstract class BaseSpriteAnimator3000<T> : MonoBehaviour
22
22
public float timeScale { get { return m_timeScale ; } set { m_timeScale = value ; } }
23
23
public float totalTimeScale { get { return m_timeScale * SpriteAnimatorTimer3000 . timeScale ; } }
24
24
25
+ [ SerializeField ]
26
+ [ HideInInspector ]
27
+ private bool m_randomStart ;
28
+
25
29
[ SerializeField ]
26
30
[ HideInInspector ]
27
31
private bool m_flip_x = false ;
@@ -47,7 +51,7 @@ public bool flipY
47
51
ChangeFlip ( m_flip_x , m_flip_y ) ;
48
52
}
49
53
}
50
-
54
+
51
55
private bool _playInEditor ;
52
56
public bool playInEditor { get => _playInEditor ; set => _playInEditor = value ; }
53
57
@@ -91,6 +95,16 @@ protected virtual void Awake()
91
95
ChangeFlip ( flipX , flipY ) ;
92
96
}
93
97
98
+ protected virtual void Start ( )
99
+ {
100
+ if ( m_randomStart )
101
+ {
102
+ var l = clipLength ;
103
+ if ( l > 0 )
104
+ _clipTime = UnityEngine . Random . Range ( 0f , l ) ;
105
+ }
106
+ }
107
+
94
108
protected virtual void OnDestroy ( )
95
109
{
96
110
//do nothing
@@ -106,17 +120,18 @@ private void Update()
106
120
107
121
private void Animation ( SpriteAnimationClip3000 clip , float deltaTime )
108
122
{
109
- float dt = deltaTime ;
110
- if ( dt < 0 )
123
+ if ( deltaTime < 0 )
111
124
return ;
112
125
113
126
Sprite sprite = SampleByNormalizedTime ( clip , normalizedTime ) ;
114
127
ChangeSprite ( sprite ) ;
115
128
116
- _clipTime += dt ;
117
- if ( _clipTime >= clipLength )
129
+ _clipTime += deltaTime ;
130
+
131
+ var l = clipLength ;
132
+ if ( _clipTime >= l )
118
133
{
119
- _clipTime = 0 ;
134
+ _clipTime = Mathf . Repeat ( _clipTime , l ) ;
120
135
if ( _callback != null )
121
136
{
122
137
_callback ( ) ;
0 commit comments