/// <summary>
    /// Turns the selected Rotation toward a given point using the provided interpolation settings
    /// </summary>
    /// <param name="position">end desired position to LookAt</param>
    /// <param name="rotationType">Rotation (Yaw/Pitch/Roll) which will turn</param>
    /// <param name="interpolateType">Rotation interpolation (Lerp/Slerp/RotateTowards/etc.) type used</param>
    /// <param name="interpolateRate">Rate of the interpolation (desired ranges based on selected interpolation type)</param>
    /// <param name="up">Up direction to maintain (null will try to maintain the transform's current up direction)</param>
    public void TurnToward(Vector3 position, Rotation rotationType, MathExtensions.QuaternionInterpolationType interpolateType, float interpolateRate, Vector3?up = null)
    {
        Transform  trans         = GetTransform(rotationType);
        Quaternion desiredFacing = GetFacingDirectionOnPlane(rotationType, position, up);

        trans.rotation = MathExtensions.Interpolate(interpolateType, trans.rotation, desiredFacing, interpolateRate);
    }
 public void TurnToward(Vector3 position, Rotation priority1, Rotation priority2, Rotation?priority3, MathExtensions.QuaternionInterpolationType interpolateType, float interpolateRate, Vector3?up = null)
 {
     if (priority1 == priority2 || priority1 == priority3 || priority2 == priority3)
     {
         Debug.LogError("Priorities must be unique.");
         return;
     }
     TurnToward(position, priority1, interpolateType, interpolateRate, up);
     TurnToward(position, priority2, interpolateType, interpolateRate, up);
     if (priority3 != null)
     {
         TurnToward(position, priority3.Value, interpolateType, interpolateRate, up);
     }
 }