对于unity音效的处理,我们可以使用单例模式与枚举让代码量变得整洁,同时减少资源的配置。优化你的代码。
我们不难想到对于某个音效,比如跳跃,打击,触发这种效果音效,在特定的情境只需要单次播放的音效,我们可以使用这种方式来简单且清晰的去操作音效的播放。
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioManager : MonoBehaviour
{
private static AudioManager instance; //定义一个静态的自身类
public static AudioManager Instance =>instance; //封装,只读。
private AudioManager() { }
public AudioClip[] audioClips; //开一个AudioClip的数组储存所有的音效
private AudioSource managerAudio;
public AudioSource ManagerAudio { get => managerAudio ?? GetComponent<AudioSource>(); } //封装
//单例实现
private void Awake()
{
if (instance != null)
Destroy(gameObject);
instance = this;
DontDestroyOnLoad(gameObject); //切换场景不销毁AudioManager
}
private void Start()
{
managerAudio = this.GetComponent<AudioSource>();
}
//枚举定义
public enum SoundEffect
{
NONE =-1,
EnemyDeathSE = 0, //怪物死亡音效
jumpSE = 1, //跳跃音效
}
//公开实例化方法播放音效
public void PlaySE(SoundEffect se)
{
managerAudio.PlayOneShot(audioClips[(int)se]);
}
// 在OnApplicationQuit函数中销毁单例模式
private void OnApplicationQuit()
{
if (instance != null)
{
Destroy(gameObject);
}
}
之后在外部各个模块调用你的单例即可!
试着用到你的代码里面更好的管理你的音效吧!