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

时间:2017-01-29 17:13:34

标签: unity3d game-physics

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

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

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

2 个答案:

答案 0 :(得分:2)

实际上很难为多个物体碰撞产生逼真的碰撞声。

如果对每个骰子到骰子或骰子到盒子的碰撞事件使用相同的AudioClip并在碰撞事件中触发它们,最终结果将听起来像是具有各种延迟的AudioClip的回声版本。

如果您选择使用各种碰撞AudioClip作为池进行选择,只要您可以保证在任何给定时间段内播放相同的AudioClip没有两个碰撞声音,您可能会产生正常的结果。 / p>

最好的解决方案可能是获得真实场景的几个录音(骰子在盒子里滚动和碰撞),并在模拟游戏中的碰撞时随机播放一个。只要AudioClip的持续时间与模拟匹配,就很难发现它是伪造的。

答案 1 :(得分:2)

当您播放两个相同的声音且延迟很小时会发生类似法兰的效果,导致其波长放大并自我衰减。

为了避免这种影响,您有很多选择:

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

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

  3. 如果第二个选项不能满足您的需求(项目大小增加),您可以使用第三方插件(如主音频)在运行时从一个声音中创建多个自定义音调。

  4. 您可以更改代码中的音高(在运行时),并确保两个紧密的音高不会以相同(或非常接近)的音高播放