导入资源包
在Unity Assets Store当中,下载导入下面两个资源包到Unity中
在Unity中,下载导入到项目当中
新建一个文件夹,命名为Audio
,将导入的两个文件夹放进来
挂载音效
打开Main Camera
,能够发现该摄像机带有一个名为“Audio Listener”
的组件
该组件用于监听音源发出的声音
当摄像机拥有监听组件时,只要摄像机的位置在音源播放的范围内,就能够捕捉到该声音
在Audio Manager
上添加Audio Source
组件,该组件用于播放BGM
Play On Awake:启动时播放,一般用于当作BGM时使用
Loop:循环
再添加一个Audio Source
,用于播放音效,取消勾选Play On Awake
编写代码控制音效的播放
用代码去获取不同的Audio Source播放不同的片段
创建名为AudioManager
的C#脚本
挂载到Audio Manager
上
创建两个全局变量,用于挂在不同的Audio Source
// 背景音乐源
public AudioSource BGMSource;
// 音效源
public AudioSource FXSource;
将两个AudioSource
拖入进行挂载
接下来以攻击为例,当Attack Area中任意一段启动的时候就需要播放音效,所以需要把音效挂载在它们之上。接着用它们去通知Audio Manager来播放需要执行的音效。因此,在这种跨物体传递的场景下,需要通过创建Event事件的方法,将需要的变量进行传递
新建一个PlayAudioEventSO
C#脚本
在内部实现RaiseEvent()事件方法,由于需要传递AudioClip
,所以UnityAction泛型写为AudioClip
using UnityEngine;
using UnityEngine.Events;
[CreateAssetMenu(menuName = "Event/PlayAudioEventSO")]
public class PlayAudioEventSO : ScriptableObject
{
public UnityAction<AudioClip> OnEventRaised;
public void RaiseEvent(AudioClip clip)
{
OnEventRaised?.Invoke(clip);
}
}
在Events文件夹内,创建两个Event,分别为BGM Audio Event
、FX Audio Event
接下来,需要在每一段攻击标记需要用哪一个Clip,并且还需要以事件的方式进行广播。因此,创建一个单独的代码,标记使用的音乐片段,命名为AudioDefiniton
创建三个全局变量
public PlayAudioEventSO playAudioEvent;
public AudioClip audioClip;
// 是否在启动时播放
public bool playOnEnable;
创建PlayAudioClip()方法用于执行音乐片段
public void PlayAudioClip()
{
playAudioEvent.OnEventRaised(audioClip);
}
创建OnEnable()方法,判断在启动时进行播放
private void OnEnable()
{
if (playOnEnable)
{
PlayAudioClip();
}
}
将Attack1、2、3分别选中FX Audio Event
和各自的音效Audio Clip
。并勾选上Play On Enable
,只要物件激活时就开始播放
那么这时候事件广播已经创建好,那么接下来就要做事件监听的任务
在AudioManager
脚本中,添加两个事件监听的全局变量
[Header("事件监听")]
// 音效事件监听
public PlayAudioEventSO FXEvent;
// 背景音乐事件监听
public PlayAudioEventSO BGMEvent;
创建事件注册OnEnable()
方法和注销OnDisable()
方法的方法
private void OnEnable()
{
FXEvent.OnEventRaised += OnFXEvent;
}
private void OnDisable()
{
FXEvent.OnEventRaised -= OnFXEvent;
}
将传入的Clip赋值给AudioSource
的Clip
中,并执行Play()
方法
private void OnFXEvent(AudioClip clip)
{
FXSource.clip = clip;
FXSource.Play();
}
设置好两个Event
事件
此时,执行攻击动作就会有攻击的音效
同理,BGM的事件监听
也写好
private void OnEnable()
{
FXEvent.OnEventRaised += OnFXEvent;
BGMEvent.OnEventRaised += OnFXEvent;
}
private void OnDisable()
{
FXEvent.OnEventRaised -= OnFXEvent;
BGMEvent.OnEventRaised -= OnBGMEvent;
}
private void OnBGMEvent(AudioClip clip)
{
BGMSource.clip = clip;
BGMSource.Play();
}
创建一个Empty Object
,命名为BGM。绑定Audio Definition
脚本,设置好组件和片段后,勾选Play On Enable
此时,开始游戏重新启用下该组件即可有BGM
音效混音轨道
打开Window
菜单,选中Audio
,点击Audio Mixer
与此同时,在Settings文件夹下,创建Audio Mixer
文件,命名为Main Mixer
想要为每一种声音建立各自轨道,那么点击Groups
旁边的加号生成一条音轨
在Audio Source
中,点击Output
即可选择刚才生成的音轨