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



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

rigidbody.AddRelativeForce(Vector3.up * mainRotorValue);

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

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

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

谢谢!

EDIT -我不知道这的相关性,但我的刚体质量为1530,拖拽为0.1,角拖为1.5。

欢迎来到StackOverflow Adrian!

我不确定这是否是你想要的解决方案,但如果你想限制rigidbody的旋转,你可以展开Constraints选项卡,并设置Freeze RotationY轴(我认为它是Y轴)。抱歉,如果我搞错了,告诉了你们错误的轴:D)旋转。(如果你根本不想旋转你的直升机,使用这个方法。但是请记住,当你确实需要它旋转时,你可以通过脚本关闭约束,旋转直升机,然后再次设置约束。

我希望这对你有帮助!

好了,伙计们,我找到问题了。我写了一些代码来帮助稳定直升机,我选择在我的帖子中省略,因为我认为我已经确定这不是原因。很抱歉我的问题不充分,浪费了您的时间,谢谢您的努力!我学到的教训是确保隔离问题,并彻底测试您隔离的部分。

最新更新