C# 如何在Unity 3D中接近称重秤?

C# 如何在Unity 3D中接近称重秤?,c#,unity3d,game-physics,unity3d-2dtools,C#,Unity3d,Game Physics,Unity3d 2dtools,目前,我正在使用C#在unity中创建一个2d平台,我想知道如何创建一个像下面这样的秤 为了解释,我希望这样,当一个沉重的刚体2d放在其中一个刻度上时,另一个刻度向上移动,反之亦然。如果重量相等,我也希望天平保持平衡。我将如何着手处理这个问题?是否有一个组件可以使这项工作容易完成?数学 首先,据我所知,没有任何组件可以为您执行此操作。我们只需要自己做一些物理如果你不关心数学,只想看看你应该做什么,请跳到底部。让我们假装有两个盒子,一个在左边,一个在右边。我假设带绳子的滑轮装置是无摩擦无质量的。在

目前,我正在使用C#在unity中创建一个2d平台,我想知道如何创建一个像下面这样的秤

为了解释,我希望这样,当一个沉重的
刚体2d
放在其中一个刻度上时,另一个刻度向上移动,反之亦然。如果重量相等,我也希望天平保持平衡。我将如何着手处理这个问题?是否有一个组件可以使这项工作容易完成?

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

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

x方向上的力之和是
Fx_1=T-W_1
,因为我们选择了右侧作为正方向。让我们应用牛顿第二定律,力=质量*加速度:
m1*a\u1=T-m1*g
M_1
是箱子的质量,
a_1
是箱子的净加速度,
g
是重力引起的加速度。让我们重写如下:
T=m1*a\u1+m1*g

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

让我们对x方向上的力求和:
Fx_2=W_2-T
。让我们也重写一下:
T=W_2-Fx_2
。让我们应用牛顿第二定律:
T=m2*g-m2*a2
。右边和左边的盒子的拉力相同,因此我们可以通过设置
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)
在这种情况下,当你把两个东西放在天平或皮带轮上时,天平以相同的加速度倾斜左右两侧的箱子,对吗?天平左侧的下降速度与右侧的上升速度相同。因此,
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)
结论 因此,系统右侧的净加速度
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);
this.GetComponent().AddForce(矢量3.down*此对象的质量*计算的加速度);

这应该行得通。如果没有,请告诉我,我会修正我的答案。

你是在询问它的数学/物理,还是在绘制和渲染2D对象?完成这项工作所需的物理。我来这里的聚会真的迟到了。你的数学是如何做到这一点的一个很好的例子,它真的很有帮助。你知道一种不用每个秤上单个物体的重量来计算的方法吗?例如,我希望有一个工作秤,秤上可以有任意数量的物体,或者任何力可以推/拉它们。