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

时间:2014-12-31 11:36:59

标签: unity3d

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

由于

1 个答案:

答案 0 :(得分:0)

您可以轻松地将轮换处理为Vector3 of Euler angles

这样你可以Linearly Interpolate角度到正确的值。并且您可以使用coterminal角度,以便始终插入更高的值(因此不会发生向后旋转)。在每个旋转步骤之后,您可能希望使用此方法将角度标准化为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;
    }
}