创建一个总的声音管理类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class AudioManager : MonoBehaviour
{
[System.Serializable]
public class Sound
{
[Header("音频剪辑")]
public AudioClip clip;
[Header("音频分组")]
public AudioMixerGroup outputGroup;
[Header("音频音量")]
[Range(0, 1)]
public float volume=1;
[Header("音频是否开局播放")]
public bool playOnAwake;
[Header("音频是否循环播放")]
public bool loop;
}
public List<Sound> sounds;
private Dictionary<string, AudioSource> audioDic;
public static AudioManager instance;
private void Awake()
{
if(instance==null)
{
instance = this;
audioDic = new Dictionary<string, AudioSource>();
}
}
private void Start()
{
foreach (var sound in sounds)
{
GameObject obj = new GameObject(sound.clip.name);
obj.transform.SetParent(transform);
AudioSource source = obj.AddComponent<AudioSource>();
source.clip = sound.clip;
source.playOnAwake = sound.playOnAwake;
source.loop = sound.loop;
source.volume = sound.volume;
source.outputAudioMixerGroup = sound.outputGroup;
if(sound.playOnAwake)
{
source.Play();
}
audioDic.Add(sound.clip.name, source);
}
}
public static void PlayAudio(string name,bool isWait=false)
{
Debug.Log("调用播放声音函数");
if(!instance.audioDic.ContainsKey(name))
{
Debug.Log($"名为{name}音频不存在");
return;
}
if(isWait)
{
if(!instance.audioDic[name].isPlaying)
{
instance.audioDic[name].Play();
}
}
else
{
instance.audioDic[name].Play();
}
Debug.Log("成功播放");
}
public static void StopAudio(string name)
{
if (instance.audioDic.ContainsKey(name))
{
Debug.LogWarning($"名为{name}音频不存在");
return;
}
instance.audioDic[name].Stop();
}
}
在场景中添加相应音频  音频分组为控制背景音乐和特效的(如果不需要可以去掉) 为了方便写一个类存放音频名称
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class AudioName
{
public static string Chick { get => "Click"; }
public static string SwingWeapon { get => "swing_weapon"; }
}
代码调用
AudioManager.PlayAudio(AudioName.SwingWeapon);
ok!
|