关于碰撞和能量的统一物理学

时间:2013-10-31 18:08:50

标签: unity3d physics

我一直在使用Leap Motion开发Unity乒乓球游戏。我使用rigidbody.MovePosition()来移动球拍。然而,当我击球(使用重力)时,球拍将它发射太远。即使我改变了两者的质量,也没有做任何事情。

我应该改变什么变量来减少进入球的能量?

1 个答案:

答案 0 :(得分:1)

来自以下link

  

“MovePosition会将你的物体放在目标位置,无论如何。它可能会以一种逼真的方式将其他物体抛到一边,或者可能将它们拉出来,或者可能只是通过它们。但它会很乐意让你穿过坚固的墙壁或山脉。

     

如果您在刚体上使用MovePosition从当前位置添加,它看起来像AddForce。使用AddForce,物理步骤可以完成所有工作:应用速度,查看碰撞并处理反弹。使用MovePosition,物理步骤会让您神秘地重叠实体对象。如果不是太多,它会让你分开。“

您不需要使用MovePosition。相反,你可以弄清楚击球的方向(根据球相对于球拍的位置)。然后你可以在那个方向上向球添加一个冲击力。

伪代码(来自以下link):

Vector3 shootDir = ballPosition - paddlePosition; // Calculate direction of the shot
shootDir.Normalize(); // Normalize the shot vector
ball.AddForce(shootDir * speed, ForceMode.Impulse); //Add impulse force in correct direction.

归功于欧文雷诺兹和蒂姆米歇尔斯。