如何将速度应用于忽略 Unity 中子对象质量的父对象?

问题描述

我正在 Unity 中制作一个 VR 数据可视化应用程序,并且我有一个有很多孩子的父级(只是一些原始立方体),我可以通过将父级的刚体设置为与我跟踪的 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 

上面的代码工作正常,但问题是我认为可以由玩家调整的子对象的比例会影响父对象移动的速度。或者也许只是当孩子们非常大时......控制器速度相对太慢?基本上我不需要这样;无论孩子的尺度/质量如何,我都希望父母的刚体以大致相同的速度移动。

所以为了实现这一点,我想使用 Rigidbody.AddForce 但它似乎没有任何区别,即较大的孩子仍然移动得较慢。这是我目前所拥有的:

Rigidbody rb = GetComponent<Rigidbody>();
Vector3 controllerVeLocity = Player.instance.rightHand.GetTrackedobjectVeLocity();
rb.AddForce(controllerVeLocity  * 2f,ForceMode.VeLocityChange);

我也尝试过 ForceMode.acceleration 但后来什么都没动?我是否错误地使用了 AddForce?或者我只需要一个基于孩子大小的缩放乘数?欢迎任何帮助。

解决方法

我不是用肯定的答案来回答你,而是用一个建议来回答你。 改变比例你大概不会改变全局物体的质量,但你可能会改变它的 center of mass 影响惯性。

来自文档“如果您没有从脚本中设置质心,它将根据连接到刚体的所有碰撞器自动计算”

我将尝试获取质心值,并在缩放修改后重新设置相同的质心,以检查施加的力所描述的运动是否与之前相同.

,

不理想,但能够通过执行以下操作来模拟我的预期结果:

float parentMagnitude = transform.lossyScale.magnitude;
float thrustAdjuster = parentMagnitude * 5f;
Vector3 controllerVelocity = Player.instance.rightHand.GetTrackedObjectVelocity();
rb.velocity = controllerVelocity * thrustAdjuster;