Gra*_*eme 3 c# unity-game-engine game-physics unity3d-2dtools
目前我正在使用 C# 统一创建一个 2d 平台游戏,我想知道如何创建一个像下面这样的秤。
为了解释一下,我想要这样,当一个重物rigidbody2d
放在一个秤上时,另一个秤会向上移动,反之亦然。如果重量相等,我也希望它可以使秤平衡。我将如何接近这个?是否有一个组件可以轻松实现这一目标?
首先,我知道没有任何组件可以为您执行此操作。我们只需要自己做一些物理。如果你不关心数学,只想看看你应该做什么,请跳到底部。让我们假设有两个盒子,一个在左边的拉杆上,一个在右边。我假设带有绳子的滑轮装置是无摩擦和无质量的。在这种情况下,我们可以像这样绘制图表:
W1
是左框W2
的重量, 是右框的重量。T
是由两个盒子引起的绳索张力。现在让我们只看左边的框:
x 方向上的力的总和是Fx_1 = T - W_1
,因为我们选择了正确的方向作为我们的正方向。让我们应用牛顿第二定律,力 = 质量 * 加速度:M_1 * a_1 = T - M_1 * g
。M_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_1
和a_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,并且两个盒子都不会移动。
你知道你的盒子的质量,你知道两个盒子的加速度,用上面的公式 ( 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)
那应该工作。如果没有,请告诉我,我会修复我的答案。