首页 文章

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

提问于
浏览
0

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

谢谢

1 回答

  • 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;
        }
    }
    

相关问题