我有一个球体游戏对象,其中5个立方体放置在球体表面的不同点上 . 当按下一个键时,我希望球体旋转几秒钟,然后在立方体上的第一个立方体点上慢慢停止,并始终保持相同的旋转方向 . 我现在面临的问题是,Quaternion.Slerp始终采用最短路径到下一个立方体,这意味着有时旋转方向会发生变化 . 有任何想法吗?
谢谢
您可以轻松地将旋转处理为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; } }
1 回答
您可以轻松地将旋转处理为Vector3 of Euler angles .
这样你就可以Linearly Interpolate角度到正确的值 . 并且您可以使用coterminal角度,以便始终插入更高的值(因此不会发生向后旋转) . 在每个旋转步骤之后,您可能希望使用此方法将角度标准化为0,360范围 .
示例代码: