如何将速度应用于忽略 child object 在 Unity 中的质量的 parent object?
How to apply velocity to a parent object that ignores child object's mass in Unity?
我正在 Unity 中制作一个 VR 数据可视化应用程序,我有一个 parent 和许多 children(只是一些原始立方体),我可以通过设置 parent 的刚体速度与我跟踪的 VR 控制器相同。
Rigidbody rb = GetComponent<Rigidbody>();
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity(); // how I ref the controller velocity in SteamVR
rb.velocity = controllerVelocity * 2f; // the 2f is just to speed up the velocity
上面的代码工作正常,但问题是我认为可以由玩家调整的 children objects 的比例影响 parent 的速度移动于。或者也许就在 children 非常大的时候......控制器速度相对太慢?基本上我不需要这样;我希望 parent 的刚体以大致相同的速度移动,而不管 children 的 scales/masses。
所以为了实现我想使用 Rigidbody.AddForce 但它似乎没有任何区别,即更大的 children 仍然移动得更慢。这是我目前所拥有的:
Rigidbody rb = GetComponent<Rigidbody>();
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity();
rb.AddForce(controllerVelocity * 2f, ForceMode.VelocityChange);
我也试过ForceMode.Acceleration但后来一点动静都没有?我是否错误地使用了 AddForce?还是我只需要一个基于 children 大小的缩放乘数?欢迎任何帮助。
我不是用确定的答案来回答你,而是用建议来回答你。
改变比例你大概不会改变全局对象的质量,但你可能会改变它 center of mass 这会影响惯性。
来自文档“如果您不通过脚本设置质心,它将根据附加到刚体的所有碰撞器自动计算”
我会尝试获取质心值,并在比例修改后重新设置相同的质心,以检查所施加的力所描述的运动是否与它相同之前。
不理想,但通过执行以下操作能够模仿我的预期结果:
float parentMagnitude = transform.lossyScale.magnitude;
float thrustAdjuster = parentMagnitude * 5f;
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity();
rb.velocity = controllerVelocity * thrustAdjuster;
我正在 Unity 中制作一个 VR 数据可视化应用程序,我有一个 parent 和许多 children(只是一些原始立方体),我可以通过设置 parent 的刚体速度与我跟踪的 VR 控制器相同。
Rigidbody rb = GetComponent<Rigidbody>();
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity(); // how I ref the controller velocity in SteamVR
rb.velocity = controllerVelocity * 2f; // the 2f is just to speed up the velocity
上面的代码工作正常,但问题是我认为可以由玩家调整的 children objects 的比例影响 parent 的速度移动于。或者也许就在 children 非常大的时候......控制器速度相对太慢?基本上我不需要这样;我希望 parent 的刚体以大致相同的速度移动,而不管 children 的 scales/masses。
所以为了实现我想使用 Rigidbody.AddForce 但它似乎没有任何区别,即更大的 children 仍然移动得更慢。这是我目前所拥有的:
Rigidbody rb = GetComponent<Rigidbody>();
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity();
rb.AddForce(controllerVelocity * 2f, ForceMode.VelocityChange);
我也试过ForceMode.Acceleration但后来一点动静都没有?我是否错误地使用了 AddForce?还是我只需要一个基于 children 大小的缩放乘数?欢迎任何帮助。
我不是用确定的答案来回答你,而是用建议来回答你。 改变比例你大概不会改变全局对象的质量,但你可能会改变它 center of mass 这会影响惯性。
来自文档“如果您不通过脚本设置质心,它将根据附加到刚体的所有碰撞器自动计算”
我会尝试获取质心值,并在比例修改后重新设置相同的质心,以检查所施加的力所描述的运动是否与它相同之前。
不理想,但通过执行以下操作能够模仿我的预期结果:
float parentMagnitude = transform.lossyScale.magnitude;
float thrustAdjuster = parentMagnitude * 5f;
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity();
rb.velocity = controllerVelocity * thrustAdjuster;