/// <summary>
    /// Shiver an object by amount degrees over T seconds.
    /// </summary>
    /// <param name="tx">
    /// A <see cref="Transform"/>
    /// </param>
    /// <param name="amount">
    /// A <see cref="System.Single"/> Maximum amount of shiver, in degrees.
    /// </param>
    /// <param name="T">
    /// A <see cref="System.Single"/> Shiver for this amount of seconds.
    /// </param>
    public static void Shiver(this Transform tx, float amount, float T)
    {
        var startRotation = tx.eulerAngles;

        UnityExtender.Instance.StartCoroutine(UnityExtender.Step(T, delegate(float P) {
            tx.eulerAngles = startRotation + (Random.onUnitSphere * amount * (1 - P));
        }));
    }
    /// <summary>
    /// Smoothly change a camera's FOV from current to target FOV over T seconds.
    /// </summary>
    /// <param name="camera">
    /// A <see cref="Camera"/>
    /// </param>
    /// <param name="FOV">
    /// A <see cref="System.Single"/> The target FOV
    /// </param>
    /// <param name="T">
    /// A <see cref="System.Single"/> The time in seconds taken to reach the target.
    /// </param>
    public static void Zoom(this Camera camera, float FOV, float T)
    {
        var startFOV = camera.fov;

        UnityExtender.Instance.StartCoroutine(UnityExtender.Step(T, delegate(float P) {
            camera.fov = Mathf.Lerp(startFOV, FOV, P);
        }));
    }
    /// <summary>
    /// Shake by amount units over T seconds.
    /// </summary>
    /// <param name="tx">
    /// A <see cref="Transform"/>
    /// </param>
    /// <param name="amount">
    /// A <see cref="System.Single"/> Maximum amount of shake, in world space.
    /// </param>
    /// <param name="T"> Shake for this amount of seconds.
    /// A <see cref="System.Single"/>
    /// </param>
    public static void Shake(this Transform tx, float amount, float T)
    {
        var startPosition = tx.position;

        UnityExtender.Instance.StartCoroutine(UnityExtender.Step(T, delegate(float P) {
            tx.position = startPosition + (Random.onUnitSphere * amount * (1 - P));
        }));
    }