Unity里如何处理一条小河的流水音效

主要内容

需求: 如何正确播放一条河的水流音效? 是一条小河,且河流的长度不是很长。

解答: 要让音效听起来像真正河流那样的话, 就需要满足下面几个需求

  • 越靠近河, 水流音效的音量就需要越大
  • 越靠近河, 音效的3D空间位置效果就需要越弱, 需要接近2D

可以考虑的方案如下:

  • 使用多个AudioSource 播放水流音效。 ❌
    • 小而短的河流没有必要使用多个AudioSource。
    • 这种方式需要处理玩家在2个,甚至多个AudioSource之间的时候该怎么办
  • 使用1个AudioSource
    • 使用脚本控制音量和3D效果 ✔️
      • 笔者使用的是这种方式来做的, 主要是使用长方体来划分范围。
      • 在最内层的长方体里面, 水流音效的音量最高, 3D效果最弱。 笔者直接做成了2D音效
      • 在最外层的长方体里面, 或者是外面, 音量随着距离曲线变化, 3D效果为1(完全3D),或者是接近1的值。
      • 中间的长方体主要是做渐变使用的, 让过渡更平滑一些。
    • 使用距离曲线控制音量和3D效果 ❌
      • 这里的问题是: 距离是通过和音源的位置计算得到的, 而音源的位置是一个单点, 不是长方体的河流, 所以用不了。
      • 如果音效的中心区域是一个正方体或者是一个球体的话, 那么这种方式应该是可以考虑的。
      • 比如有一个从上而下的瀑布, 玩家所在的平面有一个圆洞,瀑布穿过圆洞而下, 这个时候应该就可以使用曲线来做了。

需求: 如果是一条大河该怎么处理?

解答:

拓展阅读

关于AudioSource的Spread(扩散)参数的一些解释:

0 = 根据AudioSource相对于AudioListener的位置,淡入和淡出正确的左声道或右声道或“扬声器”。
360 = 根据AudioSource相对于AudioListener的位置,淡入和淡出相反的左声道或右声道或“扬声器”。
180 = 在两个扬声器之间均匀淡入和淡出。这有效地使您能够根据距离淡入和淡出声音,同时保持单声道的错觉相当好。(两个通道中的音量始终相同。)

0—————-180—————360
or
normal——-mono——-reverse

解释2

测试是在Unity 2018.4中进行的。以下是一些要点:

  • 在2D模式下,Spread滑块没有任何效果。
  • Spread通常将输入信号从前/点源(Spread=0)移动到侧面(Spread=180),然后到后方(Spread=360)。
  • 当使用7.1输入信号时,360°并不代表身后有一个点源,而只是环绕声通道成为一个点源。剩余通道分布在前置和侧置扬声器之间。
  • 我们发现Spread=270最接近于将输入通道正确映射到输出通道的预期信号。
  • 无论将Spread参数设置为什么值,在3D模式下都会考虑AudioListener对AudioSource的方向,并相应地旋转。
  • 使用Spread值为90会大致将输入信号扩展到90°宽度,因此可以将该参数绑定到适当距离曲线,以模拟声音在远处变薄但在靠近时具有一定宽度。
  • 我认为如果手册中有一些图形文件描述输入通道位置以及它们如何随着不同的扩散值围绕听者移动(或者更确切地说是听者对音频源的方向),那么手册会更容易理解。

一些声源具有动态宽度,当你靠近时可以完全包围你(比如人群),而当你远离它们时,在空间上会变得更窄。对于这种情况,你可以使用本文讨论的Spread滑块(通过距离自动化它或者使用一个环绕和一个点源层,并根据需要混合它们),或者你可以通过多个代表说话人(或人群区域的一部分)的点源来创造氛围。后者会自动给出正确的空间宽度,但会消耗更多资源。

来源: https://forum.unity.com/threads/3d-sound-spread-and-pan.72850/

0%