如何抵消Unity3D中物理模拟的旋转?

时间:2015-10-15 16:59:59

标签: unity3d rotation game-physics physics-engine

我在Unity3D中创建一个玩家控制直升机的游戏。我正在通过对其刚体组件施加力来移动它。主力来自主旋翼,直升机向上推动:

rigidbody.AddRelativeForce(Vector3.up * mainRotorValue);

为了让它水平移动,我施加一个扭矩来俯仰/滚动直升机,这样来自主旋翼的力就向上推动了一些方向(在世界空间中):

 float tailRotorValue = 0;
 rigidbody.AddRelativeTorque(new Vector3(pitchValue, tailRotorValue, rollValue));

当同时投球和翻滚时,直升机也会偏航。我真的不知道为什么,我真的不希望它发生。我现在的猜测是物理模拟中有一些东西可以创建这个旋转,我可以计算一些tailRotorValue来抵消它。所以我希望有人在这里知道为什么会发生旋转,以及如何计算相反的力。或者可能有一个完全不同的原因和问题的解决方案(我想保持基于运动物理学)?

谢谢!

编辑 - 我不知道这与此相关,但我的刚体的质量为1530,拖动为0.1,angularDrag为1.5。

2 个答案:

答案 0 :(得分:0)

欢迎来到StackOverflow Adrian!

我不确定这是否是您想要的解决方案,但如果您想限制rigidbody的轮播,可以展开Constraints标签,并设置{{1 {}} Freeze Rotation轴(我认为它是Y轴。抱歉,如果我感到困惑并告诉你错误的轴:D)旋转关闭。 (如果您根本不想旋转直升机,请使用此方法。但请记住,当您需要旋转直升机时,您可以通过脚本关闭约束,旋转直升机,并再次设置约束。)

我希望这有帮助!

答案 1 :(得分:0)

好的,伙计们,我发现了问题。我写了一些代码来帮助稳定直升机,我选择在我的帖子中省略它,因为我认为我确定它不是原因。对不起,我把时间浪费在一个不充分的问题上,谢谢你的尝试!我学到的教训是确保隔离问题,并彻底测试你已经隔离的部分。