private static IEnumerator ShakeCoroutine(Transform transform, float magnitude, float duration, EaseType easeType) { Vector3 offset; for (float time = 0.0f; time < duration; time += Time.deltaTime) { float currentMagnitude = Mathf.Lerp(magnitude, 0.0f, Easings.Interpolate(time / duration, easeType)); Vector3 transformedRight = transform.rotation * Vector3.right; Vector3 transformedUp = transform.rotation * Vector3.up; offset = (transformedRight * UnityEngine.Random.Range(-currentMagnitude, currentMagnitude)) + (transformedUp * UnityEngine.Random.Range(-currentMagnitude, currentMagnitude)); transform.position += offset; yield return(kWaitForEndOfFrame); transform.position -= offset; } coroutineMap_.Remove(transform); if (originalPositionMap_.ContainsKey(transform)) { transform.position = originalPositionMap_[transform]; originalPositionMap_.Remove(transform); } }
public static IEnumerator DoEaseCoroutine(float duration, EaseType easeType, Action <float> lerpCallback) { for (float time = 0.0f; time <= duration; time += Time.deltaTime) { float p = Easings.Interpolate(time / duration, easeType); lerpCallback.Invoke(p); yield return(null); } lerpCallback.Invoke(1.0f); }
// PRAGMA MARK - Static public static Coroutine DoEaseFor(this MonoBehaviour m, float duration, EaseType easeType, Action <float> lerpCallback, Action finishedCallback = null) { return(m.DoLerpFor(duration, (p) => lerpCallback.Invoke(Easings.Interpolate(p, easeType)), finishedCallback)); }