如何在Unity中检查对象与另一个对象多次碰撞?

问题描述 投票:0回答:1

我正在制作一个功能,当绿色盒子与灰色盒子碰撞时发出声音(如第一张图片)。我使用 OnCollisionEnter2D 来播放声音,当它们碰撞时(在第二张图片中),它按照我的预期播放一次,但作为第三张图片,它同时播放声音 3 次,我希望它只再播放一次,如何才能我回避这个?谢谢你

我这里的代码只是一个日志,可以在编辑器中检查它

private void OnCollisionEnter2D(Collision2D collision)
{
    Debug.LogError("PlaySound");
}

我希望它只播放两次,在第二张图片和第三张图片时

unity-game-engine 2d collision
1个回答
0
投票

您面临的问题可能是由于快速连续检测到多个碰撞事件所致。为了避免这种情况并确保每次碰撞声音只播放一次,您可以实现一种机制来将声音限制为每次碰撞事件播放一次,而不是使用幅度和延迟来跳过它

这样的事情就可以完成工作

private bool hasCollided = false; // track if collision sound has been played

private void OnCollisionEnter2D(Collision2D collision)
{
    if (!hasCollided)
    {
        // Play the sound

        // Set the flag to true to prevent further playback until reset
        hasCollided = true;
    }
}

private void ResetCollisionFlag()
{
    hasCollided = false;
}

声音效果只会在第一次碰撞发生时播放,并且在同一交互期间的后续碰撞不会再次触发声音,直到您将 hasPlayedSound 重置为 false。比使用延迟更好。

希望有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.