5 using System.Collections.Generic;
32 public enum LerpTypes { Linear, EaseIn, EaseOut, EaseInOut, Free }
34 [Tooltip(
"The GameObject with the position to animate")]
37 [Tooltip(
"The target Vector3 to animate to")]
40 [Tooltip(
"Ease type to use for the tween")]
43 [Tooltip(
"Duration of the animation in seconds")]
44 public float LerpTime = 1f;
46 [Tooltip(
"Auto start? or status")]
47 public bool IsRunning =
false;
49 [Tooltip(
"Use the local position instead of world position")]
50 public bool ToLocalTransform =
false;
52 [Tooltip(
"animation is complete!")]
56 private float mLerpTimeCounter;
59 private Vector3 mStartValue;
66 if (TargetObject == null)
68 TargetObject = this.gameObject;
70 mStartValue = GetPosition();
78 if (TargetObject == null)
80 TargetObject = this.gameObject;
83 mStartValue = GetPosition();
95 TargetObject.transform.localPosition = mStartValue;
99 TargetObject.transform.position = mStartValue;
102 mLerpTimeCounter = 0;
110 TargetValue = mStartValue;
111 mStartValue = TargetValue;
112 mLerpTimeCounter = 0;
128 private Vector3 GetPosition()
130 return ToLocalTransform ? TargetObject.transform.localPosition : TargetObject.transform.position;
139 private Vector3 GetNewPosition(Vector3 currentPosition,
float percent)
141 Vector3 newPosition = Vector3.zero;
145 newPosition = Vector3.Lerp(mStartValue, TargetValue, percent);
148 newPosition = Vector3.Lerp(mStartValue, TargetValue, QuadEaseIn(0, 1, percent));
151 newPosition = Vector3.Lerp(mStartValue, TargetValue, QuadEaseOut(0, 1, percent));
154 newPosition = Vector3.Lerp(mStartValue, TargetValue, QuadEaseInOut(0, 1, percent));
157 newPosition = Vector3.Lerp(currentPosition, TargetValue, percent);
169 return e * (v /= 1) * v + s;
174 return -e * (v /= 1) * (v - 2) + s;
180 return e / 2 * v * v + s;
182 return -e / 2 * ((--v) * (v - 2) - 1) + s;
188 private void Update()
190 if (IsRunning && LerpType !=
LerpTypes.Free)
193 mLerpTimeCounter += Time.deltaTime;
194 float percent = mLerpTimeCounter / LerpTime;
196 if (ToLocalTransform)
198 TargetObject.transform.localPosition = GetNewPosition(TargetObject.transform.localPosition, percent);
202 TargetObject.transform.position = GetNewPosition(TargetObject.transform.position, percent);
213 bool wasRunning = IsRunning;
214 if (ToLocalTransform)
216 TargetObject.transform.localPosition = GetNewPosition(TargetObject.transform.localPosition, LerpTime * Time.deltaTime);
217 IsRunning = TargetObject.transform.localPosition != TargetValue;
221 TargetObject.transform.position = GetNewPosition(TargetObject.transform.position, LerpTime * Time.deltaTime);
222 IsRunning = TargetObject.transform.localPosition != TargetValue;
225 if (IsRunning != wasRunning && !IsRunning)