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);
            }
        }
Esempio n. 2
0
        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));
 }