自动控制自行车旋转

问题描述 投票:0回答:1

我正在制作一个自行车特技游戏,我希望如果用户不旋转自行车,它会回到零旋转,忽略所有力。使用旋转似乎非常复杂。

if (body.rotation.eulerAngles.z > 25)
    body.AddTorque(new Vector3(0, 0, -inAirRotationSpeed * 30 * Time.deltaTime));
else if (body.rotation.eulerAngles.z < 10)
    body.AddTorque(new Vector3(0, 0, inAirRotationSpeed * 30 * Time.deltaTime));
else
    body.angularVelocity = Vector3.zero;

我已经尝试过这段代码,但似乎无法正常工作,我认为需要更改条件 谁能帮我解决这个问题吗? 如果需要,我可以提供完整的脚本。

c# visual-studio unity-game-engine unityscript
1个回答
0
投票

你是对的,旋转非常复杂。您正在尝试读出旋转的欧拉角,即简单的 x-y-z 旋转轴。然而,旋转被保存为Quaternion,这是保存“真实”旋转的一种奇特的数学方法。有多种方法可以通过横滚、俯仰、偏航来获得相同的旋转,但只有 1 个唯一的四元数来表示它。 综上所述,

body.rotation.eulerAngles
可能会给您一个看似奇怪的结果(在本文档中进行了解释)。这意味着
if (body.rotation.eulerAngles.z > 25)
不可靠。

您可以做的是使用

Quaternion.Angle(body.rotation, Quaternion.identity)
docs)来获取自行车当前旋转和未旋转状态之间的角度(Quaternion.identity)。然后在 if 语句中使用这个角度。 除了使用力之外,您还可以使用
Quaternion.RotateTowards
(docs) 在某些情况下不会出现意外的加速/摆动。力可能会变得很挑剔,特别是当您直接设置角速度时。

© www.soinside.com 2019 - 2024. All rights reserved.