我有一个名为
此外,每次碰撞都会创建闪烁效果并播放碰撞声音,当然,每个碰撞也会播放两次。虽然对于玩家来说可能不会察觉到,但无论如何都不正确。为了防止这种情况,我想出了以下解决方案:我在另一个碰撞参与者中保存当前帧数,以便它知道这些效果已经由第一个参与者播放过了。
尽管它能够工作,但我不确定(我是Unity的新手)它是否是最佳实践,如果是,请提出其他可能的解决方案。
请注意,我没有问“为什么OnCollisionEnter会被调用两次?”("Why is OnCollisionEnter getting called twice?")。我知道为什么会发生这种情况。我的问题与此不同,尽管它提到了相同函数的名称,但它仍然没有问相同的问题。
CollisionHandler
的类,其中包含OnCollisionEnter
方法。游戏中的每个可碰撞实体都将CollisionHandler
作为组件。因此,当两个对象碰撞时,OnCollisionEnter
方法会被调用两次,这是可以的,因为通过物体"A"接触物体"B"和反过来的方式处理伤害和其他事情。此外,每次碰撞都会创建闪烁效果并播放碰撞声音,当然,每个碰撞也会播放两次。虽然对于玩家来说可能不会察觉到,但无论如何都不正确。为了防止这种情况,我想出了以下解决方案:我在另一个碰撞参与者中保存当前帧数,以便它知道这些效果已经由第一个参与者播放过了。
private void OnCollisionEnter(Collision collision)
{
// Calculate the damage caused by `this.gameObject` to `collision.gameObject`.
// ...
// Play an impact sound and show a visual effect.
if (thisObject.CollisionFrameId != Time.frameCount)
{
otherObject.CollisionFrameId = Time.frameCount;
// play sound
// show hit effect
}
}
尽管它能够工作,但我不确定(我是Unity的新手)它是否是最佳实践,如果是,请提出其他可能的解决方案。
请注意,我没有问“为什么OnCollisionEnter会被调用两次?”("Why is OnCollisionEnter getting called twice?")。我知道为什么会发生这种情况。我的问题与此不同,尽管它提到了相同函数的名称,但它仍然没有问相同的问题。