如何将速度应用于忽略 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;