在多个对象上播放相同的声音在 Unity 上发生碰撞

Playing same sound on multiple object collide on Unity

我有一个掷骰子游戏。我有一个 6 个骰子,它在一个盒子里以随机方向施加随机力。现在,当骰子相互碰撞以及在盒子壁内碰撞时,需要产生声音。

目前,当我为每个骰子添加声音并在骰子碰撞时触发它时,声音会在所有骰子同时播放时连接。

当所有 6 个骰子相互碰撞并与盒子壁碰撞时,是否有更好的方法来产生真实的声音。

为多个物体碰撞产生真实的碰撞声音实际上是相当困难的。

如果您对每个 dice-to-dice 或 dice-to-box 碰撞事件使用相同的 AudioClip 并在碰撞事件中触发它们,最终结果听起来就像是具有各种延迟的 AudioClip 的回声版本。

如果你选择使用各种碰撞音频片段作为一个池来选择,你可能会产生好的最终结果,只要你能保证在任何给定的时间段内没有播放相同音频片段的两个碰撞声音.

最好的解决办法可能是获取几份真实场景的录音(在盒子里掷骰子和碰撞),在游戏中模拟碰撞时随机播放一个。只要 AudioClip 的持续时间与模拟匹配,就相对难以发现它是伪造的。

您听到的 flange-like 效果发生在以非常小的延迟播放两个相同的声音时,导致它们的波长自行放大和衰减。

要避免这种影响,您有多种选择:

  1. 只是为了避免播放相同的 sfx,延迟小于用户无法想象的延迟。 (你现在可能正在玩每个骰子命中 sfx 两次)

  2. 使用不同的样本,随机播放。 (如果您无法生成新样本,请尝试通过简单地改变音高 3%-10% 来修改您拥有的样本,以获得足够多的不同样本)

  3. 如果第二个选项不能满足您的需要(项目大小增加),您可以使用第三方插件,例如 master audio 在 run-time.

  4. 您可以在代码中更改音高(在 run-time)并确保两次近距离击球永远不会以相同(或非常接近)的音高播放