如何在 Unity 3D 中使用称重秤?

Gra*_*eme 3 c# unity-game-engine game-physics unity3d-2dtools

目前我正在使用 C# 统一创建一个 2d 平台游戏,我想知道如何创建一个像下面这样的秤。 在此处输入图片说明

为了解释一下,我想要这样,当一个重物rigidbody2d放在一个秤上时,另一个秤会向上移动,反之亦然。如果重量相等,我也希望它可以使秤平衡。我将如何接近这个?是否有一个组件可以轻松实现这一目标?

bpg*_*eck 5

数学

首先,我知道没有任何组件可以为您执行此操作。我们只需要自己做一些物理。如果你不关心数学,只想看看你应该做什么,请跳到底部。让我们假设有两个盒子,一个在左边的拉杆上,一个在右边。我假设带有绳子的滑轮装置是无摩擦和无质量的。在这种情况下,我们可以像这样绘制图表:

在此处输入图片说明

W1是左框W2的重量, 是右框的重量。T是由两个盒子引起的绳索张力。现在让我们只看左边的框:

在此处输入图片说明

x 方向上的力的总和是Fx_1 = T - W_1,因为我们选择了正确的方向作为我们的正方向。让我们应用牛顿第二定律,力 = 质量 * 加速度:M_1 * a_1 = T - M_1 * gM_1是盒子的质量, 是盒子a_1的净加速度,g是重力加速度。让我们改写这个,如下:T = M_1 * a_1 + M_1 * g

现在让我们看看右边的框:

在此处输入图片说明

让我们来总结在x方向的力量:Fx_2 = W_2 - T。让我们改写这个也:T = W_2 - Fx_2。让我们应用牛顿第二定律:T = M_2 * g - M_2 * a_2。右侧和左侧的盒子的拉力相同,因此我们可以通过设置组合这两个方程T = T

M_1 * a_1 + M_1 * g = M_2 * g - M_2 * a_2
Rewrite: M_1 * a_1 + M_2 * a_2 = M_2 * g - M_1 * g
Rewrite: M_1 * a_1 + M_2 * a_2 = g(M_2 - M_1)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当你把两件东西放在平衡秤或滑轮上时,左右盒子的秤以相同的加速度倾斜,对吧?秤的左侧将以与右侧相同的速度下降。所以,a_1a_2实际上是相同的值。所以我们可以这样重写:

a(M_1 + M_2) = g(M_2 - M_1)
Rewrite: a = g(M_2 - M_1) / (M_1 + M_2)
Run Code Online (Sandbox Code Playgroud)

结论

因此,该系统具有网络加速向右g(M_2 - M_1) / (M_1 + M_2)。因此,如果您知道两个盒子的质量,并且您知道重力加速度(您可能在开始时设置了这些值),那么这个公式会告诉您右边的盒子下降的速度和左边的盒子上升的速度。

如果方程给你一个负值,这意味着左边的盒子比右边的盒子重。然后公式会告诉你左边的盒子下降的速度有多快,右边的盒子上升的速度有多快。

如果质量相等,则系统的净加速度将为 0,并且两个盒子都不会移动。

如何在 Unity 中执行此操作

你知道你的盒子的质量,你知道两个盒子的加速度,用上面的公式 ( a = g(M_2 - M_1) / (M_1 + M_2))。因此,将脚本附加到您要移动的任何一个东西并编写以下内容:

this.GetComponent<Rigidbody>().AddForce(Vector3.down * MASS_OF_THIS_OBJECT * CALCULATED_ACCELERATION);
Run Code Online (Sandbox Code Playgroud)

那应该工作。如果没有,请告诉我,我会修复我的答案。