Unity3d 如何用四元数实现飞机的统一旋转
如果有人有更好的题目,请告诉我。我在我的比赛中做了一些不同的事情,但这也解释了我的苦衷 这是我用来更好地理解四元数旋转的代码:Unity3d 如何用四元数实现飞机的统一旋转,unity3d,quaternions,Unity3d,Quaternions,如果有人有更好的题目,请告诉我。我在我的比赛中做了一些不同的事情,但这也解释了我的苦衷 这是我用来更好地理解四元数旋转的代码: // verifies that 90° turn on x axis points down (flying downwards) // expected : (0, -1, 0) // actual : (0, -1, 0) var down = Quaternion.identity * Quaternion.Euler(90,
// verifies that 90° turn on x axis points down (flying downwards)
// expected : (0, -1, 0)
// actual : (0, -1, 0)
var down = Quaternion.identity * Quaternion.Euler(90, 0, 0) * Vector3.forward;
var rightRotation = Quaternion.Euler(0, 90, 0);
// verifies that right rotation applied to forward direction results in a right direction
// expected : (1, 0, 0)
// actual : (1, 0, 0)
var right = rightRotation * Vector3.forward;
// verifies that when flying downwards and doing a right turn it should be pointing right
// expected : (1, 0, 0)
// actual : (0~, 0~, -1)
var alsoRight = (Quaternion.LookRotation(down, Vector3.forward) * rightRotation) * down;
但是,结果向量是(0,0,-1),而不是(1,0,0)
所以我猜这里的问题是,我如何绕一个相对轴旋转一个四元数,而不是绕世界x轴旋转
如果我们假设初始零旋转是从后面开始的,我希望它在显示腹部的同时朝着正确的方向飞行
我的错误在哪里?此脚本帮助我了解了如何执行此操作以及我以前的尝试失败的原因:
公共类eulerotation:单一行为
{
公共图书馆;
公共场所;
公共图书馆;
无效更新()
{
如果(z)
transform.rotation=四元数角度轴(0.1f,transform.forward)*transform.rotation;
如果(y)
transform.rotation=四元数角度轴(0.1f,transform.up)*transform.rotation;
if(x)
transform.rotation=四元数角度轴(0.1f,transform.right)*transform.rotation;
}
私有void FixedUpdate()
{
Debug.DrawRay(transform.position,transform.forward*-5,Color.blue);
Debug.DrawRay(transform.position,transform.right*-5,Color.red);
Debug.DrawRay(transform.position,transform.up*-5,Color.green);
}
}
执行transform.rotation*modifiedrotation时,结果总是错误的。在执行modifiedrotation*transform.rotation时,我确实得到了我期望的结果
因此,使用Quaternion.AngleAxis是相对于对象当前旋转旋转对象的正确方法,但轴旋转必须与当前旋转相乘,而不是相反