Unity3D球体旋转并始终保持旋转方向

Unity3D球体旋转并始终保持旋转方向,unity3d,Unity3d,我有一个球体游戏对象,在球体表面的不同点上放置了5个立方体。当按下一个键时,我希望球体旋转几秒钟,然后在立方体上的第一个立方体点上缓慢停止,并始终保持相同的旋转方向。我现在面临的问题是,四元数.Slerp总是选择到下一个立方体的最短路径,这意味着有时旋转方向会改变。有什么想法吗 谢谢您可以轻松地将旋转作为一个整体来处理 这样可以将角度调整为正确的值。你可以使用共终止角,这样你总是插值到一个更高的值,这样就不会发生向后旋转。在每个旋转步骤之后,您可能希望使用这种方法将角度规格化为0,360范围 示

我有一个球体游戏对象,在球体表面的不同点上放置了5个立方体。当按下一个键时,我希望球体旋转几秒钟,然后在立方体上的第一个立方体点上缓慢停止,并始终保持相同的旋转方向。我现在面临的问题是,四元数.Slerp总是选择到下一个立方体的最短路径,这意味着有时旋转方向会改变。有什么想法吗


谢谢

您可以轻松地将旋转作为一个整体来处理

这样可以将角度调整为正确的值。你可以使用共终止角,这样你总是插值到一个更高的值,这样就不会发生向后旋转。在每个旋转步骤之后,您可能希望使用这种方法将角度规格化为0,360范围

示例代码:

using UnityEngine;
using System.Collections;

public class Rotation : MonoBehaviour {

    public Transform firstPosition;
    public Transform secondPosition;
    public float rotationDuration = 3;


    void Start () {
        transform.rotation = firstPosition.rotation;
        StartCoroutine(Rotate());
    }

    IEnumerator Rotate() {
        var deltaTime = 0.0f;
        var distance = firstPosition.rotation.eulerAngles - secondPosition.rotation.eulerAngles;


        while(deltaTime < rotationDuration) {
            var rotation = transform.rotation.eulerAngles;
            rotation = firstPosition.rotation.eulerAngles + deltaTime/rotationDuration*distance;
            transform.rotation = Quaternion.Euler(rotation);
            deltaTime += Time.deltaTime;
            yield return null;
        }
        transform.rotation = secondPosition.rotation;
    }
}

你能详细说明一下吗?