/// <summary> /// Oscilates a quaternion. /// </summary> /// <param name="amount"> The amount to wiggle by in degrees.</param> /// <param name="axis"> The axis to wiggle around </param> public static CommandDelegate Wiggle(Ref <Quaternion> rotation, float amount, double duration, Vector3 axis) { CheckArgumentNonNull(rotation, "rotation"); Quaternion startQuaternion = Quaternion.identity; float val = 0.0f; Ref <float> floatRef = new Ref <float>( () => val, (t) => { val = t; rotation.Value = startQuaternion * Quaternion.AngleAxis(val, axis); } ); return(Cmd.Sequence( Cmd.Do(() => { startQuaternion = rotation.Value; val = 0.0f; }), Cmd.Oscillate( floatRef, amount, duration, Ease.Smooth() ) )); }