如何计算Unity 3D中两个2D对象之间的冲击力

时间:2014-08-18 11:38:33

标签: math unity3d 2d

我正在研究2D太空射击游戏,我将所有玩家的船只动作直接转换为船舶的变换,而不是通过物理(因此这里没有AddForce)。现在我想让玩家船撞到它击中的任何小行星但是使用物理中的构建将不能很好地使用直接使用变换的移动代码,所以我想我应该为这个我自己做一些简单的物理计算然后将计算出的力加到我在变换上使用的运动力上。这是要走的路吗?

但是我无法弄清楚如何对力量进行正确的计算,你们可以帮帮我吗?我的简单想法是获得玩家船和小行星之间的角度,然后将此角度转换为矢量,然后将生成的力矢量添加到移动力。这会起作用,我该怎么做?或者有更好的方法吗?

我添加了一个图像来说明我的想法(我无法弄清楚如何进行计算的想法),圆圈是小行星,三角形是船,虚线三角形是带有运动的船并且增加了碰撞力,绿线是移动力(总是向前/向上),红线表示从玩家船到小行星的角度,蓝线是碰撞力。有意义吗?

另外,如何计算该角度的正确角度和力矢量?我一直在努力学习数学:(我已经尝试获得角度并在下面的代码中为该角度创建一个力矢量。我没有考虑到真正的力量我只是试图获得方向并将其标准化以使其成为一个固定的大小,然后我将它应用到船位置只是为了测试我的数学,看看向量是否在正确的方向,但事实并非如此。你们也可以帮助我吗?

Vector2 toVector = otherCollider.transform.position - transform.position;
float angleToTarget = Vector2.Angle(transform.position, toVector);
Vector3 angleVelocity = new Vector3((float)Mathf.Cos(angleToTarget), (float)Mathf.Sin(angleToTarget), 0);
angleVelocity = angleVelocity.normalized * 1.0f;

transform.position = transform.position + angleVelocity;

enter image description here

谢谢你 索伦

1 个答案:

答案 0 :(得分:0)

船舶相对于小行星的角度将为您提供x轴和y轴的速度。使用关卡中的一个点作为原点(0, 0)。您可以将每个对象视为一个点,以简化您的生活。

您可以使用Newton's Laws of motion计算Force。主要关注第二定律。

  

F = ma

这意味着力等于质量乘以加速度。因此,您所要做的就是为物体提供质量,并找出每个物体在撞击前瞬间的加速度。

你可能已经给出了物体速度而不是加速度。所以你可以使用Kinematics

  

v_f ^ 2 = v_i ^ 2 + 2 * a * d

v_f是最终速度。

v_i初始速度。

d物体行进的距离。

a是加速度。


或许Momentum对你来说更容易。

  

p = m v