我是新手,我尝试开始使用Unity Engine。有人可以解释一下,Quaternion.Slerp怎么样?因为我想以不同的角度90,180和270旋转一些物体。我可以在下面看到我的代码。不幸的是,当我添加180度时,对象会做出疯狂的事情,而不是将旋转放到(0,180,180)这个游戏对象。我想得到(180,0,0) public float speed = 0.1F; private float rotation_x; void Update() { if (Input.GetButtonDown("Fire1")) { rotation_x = transform.rotation.eulerAngles.x; rotation_x += 180; } transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(rotation_x, transform.eulerAngles.y, transform.eulerAngles.z), Time.time * speed); }
3 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
在此之前,你不能在这样的欧拉角上添加180,这主要是造成问题的原因。你最好直接使用quaternion,或者在变换本身上工作。
您可以将四元数视为空间方向。与已经说过的相反,如果可以的话,我建议学习如何使用它们。但是,我建议不要使用欧拉角......因为它们会采用不同的写作惯例,有时会失败。如果你想了解详情,你可以看看'万向节锁'。
简单地说slerp或lerp(分别代表球面线性插值或线性插值)是一种在方向A和B之间进行插值(从一个方向到另一个方向,通过在协程或其他任何地方将t从0增加到1)的方法两者之间的区别在于slerp给你从A到B的最短路径。
最后,当t = 1时,lerp(A,B,t)和slerp(A,B,t)会给你B.
在您的情况下,如果您想立即将空间中的对象旋转到特定方向,我建议您使用Quaternion.AngleAxis,这是以数学方式描述四元数的最前向方法。
如果你想要添加一个旋转,比如说实际方向是90°(两者之间没有动画),你可以这样做:
transform.rotation * = Quaternion.AngleAxis(axis_of_rotation,angle)或使用transform.rotate(取决于参数,它可以是右乘,或左:本地或世界变换)。
程序员的回答是详细说明如何为变换设置动画。但我确实建议你自己研究四元数,因为它会让你全面了解空间变换。
- 3 回答
- 0 关注
- 538 浏览
添加回答
举报
0/150
提交
取消