我在Unity3D中制作了一款玩家控制直升机的游戏。我正在通过对其刚体部件施加力来移动它。主力来自主旋翼,推直升机向上:如何抵消Unity3D中物理模拟的旋转?
rigidbody.AddRelativeForce(Vector3.up * mainRotorValue);
有它水平移动我施加扭矩于俯仰/滚动直升机,使得从主转子上的力在一些其它的方向推压(在世界空间中):
float tailRotorValue = 0;
rigidbody.AddRelativeTorque(new Vector3(pitchValue, tailRotorValue, rollValue));
当同时进行俯仰和滚转时,直升机也会偏航。我不知道为什么,我真的不希望它发生。我目前的猜测是,物理模拟中有一些东西在创建这个旋转,并且我可以计算一些tailRotorValue来抵消它。所以我希望这里有人知道为什么会发生这种旋转,以及我如何计算出相反的力量。或者,也许有一个完全不同的理由和解决方案(我想保持运动物理基础)?
谢谢!
编辑 -我不知道这个的相关性,但我的刚体具有质量1530,拖动0.1和angularDrag 1.5。
你可能应该看看_quaternions_。 – MickyD
你能否详细阐述一下我应该如何介入四元数?我并没有真正考虑到我发送的值实际上代表了什么,但Unity的[教程视频](https://www.youtube.com/watch?v=De0PoxaKlww)解释说Vector3定义了将施加扭矩的轴以及扭矩的大小。在我的情况下,我发送的x/z值为0到+/- 1600,导致最大〜30度的俯仰/滚动。 – Adrian
如果你想让直升机直接旋转起来而不管滚转,你能否请求澄清一下? – Pluto