Unity:利用单例模式与枚举管理你的音效(AudioManager)

路和悌
2023-12-01

对于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);                      
        }
    }

之后在外部各个模块调用你的单例即可!

试着用到你的代码里面更好的管理你的音效吧!

 类似资料: