我一直在使用 Leap Motion 开发 Unity 乒乓球游戏。我rigidbody.MovePosition()
用来移动桨。但是,当我击球(使用重力)时,桨将球发射得太远。即使我改变了两者的质量,它也无济于事。
我应该改变什么变量来减少进入球的能量?
从以下链接。
“MovePosition 无论如何都会将你的对象放在目标位置。它可能会以逼真的方式将其他对象推到一边,或者可能会将它们炸开,或者可能只是穿过它们。但它会很乐意让你通过坚固的墙或山。
如果您在刚体上使用 MovePosition 从当前位置添加,它看起来像 AddForce。使用 AddForce,物理步骤完成所有工作:应用您的速度,查看碰撞并处理反弹。使用 MovePosition,物理步骤可以看到您神秘地重叠了一个实体对象。如果不是太多,它会让你分开。”
您不需要使用 MovePosition。相反,您可以确定击球的方向(基于球相对于球拍的位置)。然后你可以在那个方向上给球添加一个冲力。
伪代码(来自以下链接):
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.
归功于 Owen Reynolds 和 Tim Michels。