以下均为来自中国大学mooc 游戏引擎原理及应用时的学习笔记,不含商用,仅供学习交流使用,如果侵权请联系作者删除。
9.1 音频基础
为了真实性 有必要在unity中模拟出真实的多普勒效应
我们可以在unity商店下载到两个免费资源casual game fpx 和一个absolute music
直接将导入好的音乐拖拽过来,系统会为我们创建一个子物体:
其实main camera自带一个组件
当我们把音乐拖拽过来时,我们开启这个标志就可以听到有音乐
output代表是直接传到人耳中 还是经过一个混音器
mute是是否静音的意思
BypassEffect 音源滤波的开关 是否打开音频特效
Bypass Listener Effect指的是监听效果的滤波开关 是否打开或者绕过监听滤波
Bypass Reverb Zones代表是否打开回声的开关 当勾选的时候就不执行回音的效果了
Play On Awake指的是场景启动自动播放
Loop 循环播放
Priority是播放的优先级 最高级的是零 最低级的是256 默认是128
Volume是音量的大小 范围是从零到一
Pitch是播放速度
Stereo Pan是声道占比 只在2D音效中起作用
Spatial Blend是空间混合 在这个地方设置是3D还是2D音效
如果设置为3D的音效
则会出现靠近的时候音效变大,远离的时候音效变小的效果
Reverb Zone Mix 回音的混合
3D sound setting 当你的音源设计为3D效果的话,进行的一些设置
多普勒level 设置高了之后我们会明显感觉如果快速接近物体则物体的音频会发生较大的变化
Spread指的是设置3D立体声或者多声道音响的话,在扬声器空间中的传播(我感觉这个像是左声道右声道的变化
MinDistance 在最小距离内 声音会保持最响亮 当超过这个距离 声音就会开始变小 增加声音的最小距离可以使得声音在3D世界中更响亮
Max Distance指的是声音停止衰减的距离 超过这一点的话保持音量并不会做衰减了
Logarithmic Rolloff对数衰减 当你远离声源的时候 声音衰减的很快
Linear Rolloff 线性衰减
Custom Rolloff自定义衰减
可以在这里Add Key然后自行调整
当我们移动物体的时候便可以看到有一条红线会移动 如上图所示
9.2 混音器
要注意音频处理和场景图处理是分开进行的,有时候我们需要音频处理的位置,和他们在场景中的声音源是没有关系的,有时候又需要有关系,比如声音的衰减。
有关位置的属性最终怎么处理呢,这就需要我们放在混音器中执行。
有时候一个声音减小之后我们需要另外一个声音增大,比如说新闻联播中的时候从主持人变到记者,画面的播放会使得主持人声音减小记者声音增大。
unity中实现
可以在文件菜单栏中创建一个Audio_Mixer
然后可以为其在Groups的主混音器里创建子
创建好之后我们便可以在音乐物体组件下的output选择将其输出到哪个混音器里
播放的时候可以直接调整 并会保存下来
s代表solo
M代表是否静音
B是bypass 代表当这个上面有什么算法的特效处理的时候 如果我们选中它 它就不会进行这些处理了
有时候为了保留一个原值 我们可以创建一个副本 只在副本里进行修改
这个view则是只看某个
可以在Groups这里新建一个group
然后mixer也新建一个mixer
然后可以将新的mixer加到这个mixer 使之成为上面那个mixer的子物体
我们接下来通过脚本来控制声音
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class MixerController : MonoBehaviour
{
public AudioSource shootSnd;
public AudioSource explodeSnd;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
shootSnd.Play();
}
if (Input.GetKeyDown(KeyCode.Space))
{
explodeSnd.Play();
}
}
}
然后只要创建一个空物体并为其添加上声音即可
运行游戏后当我们按下相应的按键即可触发声音,但是一进游戏还没按就有声音
只需要将这个取消即可
混音器可以在音频信号传送给接收者前进行一次加工,但是我们要对混音器里的音乐进行分类才能使得其更加井然有序
9.3 声音特效
快照可以用来保存不同场景中 各种类型的参数的设置
在unity中实现
我们创建一个混音器 然后在其groups下面创建两个子group
然后为其一个音乐添加上output 设定为music(刚刚创建的子group
事实上,场景中有多个声音源的话,尽可能把他们放到同一个group,这样的话效率比较高
send:输入到group里面的声音源经过处理之后就会输出出来
然后为其music添加Send 为sfxmusic添加receive
然后我们还要在send这里选择send的对象是sfxmusic
这里就可以调整send的程度
我们还可以为其添加一个sfx reverb 混响的效果。
混响可以用来模拟空旷场地的混响效果
我们可以通过调整 SFX Reverb的效果来模拟不同场景下的空旷的效果
声音特效的顺序很关键,首先是Receive 这个music group的信号,然后再处理reverb这个声音特效
如果按下B则会忽略这个group的所有声音效果
echo代表回声效果 也就是声音遇到障碍物之后回弹的效果
其实回声的效果也有依赖于receive
我们可以把回声的处理receive到另外一个group来执行,然后放到echo之前
master里面的音量可以开放出来交由脚本来控制:在Volume选择右键
之后我们可以在这里看到
我们接下来通过脚本来获得这个参数并修改:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class NewBehaviourScript : MonoBehaviour
{
public AudioMixer audioMixer;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float v;
audioMixer.GetFloat("MyExposedParam", out v);
if (Input.GetKeyDown(KeyCode.UpArrow))
{
audioMixer.SetFloat("MyExposedParam", v + 1);
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
audioMixer.SetFloat("MyExposedParam", v - 1);
}
}
}
然后我们创建一个空物体,为其添加上这个脚本,并将我们想控制的混音器设置为组件,运行游戏后可以发现让我们按下键盘的↑键时音量增大,↓键时音量减小。