Unity引擎2D游戏开发,音源设置和音效播放
导入资源包
在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
即可选择刚才生成的音轨
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示