【问题标题】:Unity physics about collision and energy关于碰撞和能量的统一物理
【发布时间】:2013-10-31 18:08:50
【问题描述】:

我一直在使用 Leap Motion 开发 Unity 乒乓球游戏。我使用rigidbody.MovePosition() 来移动桨。但是,当我击球(使用重力)时,桨将球发射得太远。即使我改变了两者的质量,它也无济于事。

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

【问题讨论】:

  • 你有没有在桨上使用弹跳材料?
  • 是的,我是。我正在使用具有恢复系数(弹性)的 physicMaterial。
  • 然后进入材料你可以看到一个叫做“反弹”的属性,它指的是能量吸收率,你可以根据自己的需要进行微调

标签: unity3d physics


【解决方案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.

归功于 Owen Reynolds 和 Tim Michels。

【讨论】:

  • 那么如果我要使用 AddForce,我是否也会摆脱 movePosition?我将如何实施 AddForce;似乎不可能找到力矢量。= 这样一个动态的桨四处移动。
猜你喜欢
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多