229 lines
6.7 KiB
C#
229 lines
6.7 KiB
C#
|
|
using System.Collections.Generic;
|
|||
|
|
using AlicizaX.Resource.Runtime;
|
|||
|
|
using AlicizaX.Runtime;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.Audio;
|
|||
|
|
|
|||
|
|
namespace AlicizaX.Audio.Runtime
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 音效管理,为游戏提供统一的音效播放接口。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <remarks>场景3D音效挂到场景物件、技能3D音效挂到技能特效上,并在AudioSource的Output上设置对应分类的AudioMixerGroup</remarks>
|
|||
|
|
[DisallowMultipleComponent]
|
|||
|
|
[AddComponentMenu("Game Framework/Audio")]
|
|||
|
|
public sealed class AudioComponent : GameFrameworkComponent
|
|||
|
|
{
|
|||
|
|
[SerializeField] private AudioMixer m_AudioMixer;
|
|||
|
|
|
|||
|
|
[SerializeField] private Transform m_InstanceRoot = null;
|
|||
|
|
|
|||
|
|
[SerializeField] private AudioGroupConfig[] m_AudioGroupConfigs = null;
|
|||
|
|
|
|||
|
|
public IAudioManager m_AudioManager;
|
|||
|
|
|
|||
|
|
#region Public Propreties
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 音频混响器。
|
|||
|
|
/// </summary>
|
|||
|
|
public AudioMixer MAudioMixer => m_AudioMixer;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 实例化根节点。
|
|||
|
|
/// </summary>
|
|||
|
|
public Transform InstanceRoot
|
|||
|
|
{
|
|||
|
|
get => m_InstanceRoot;
|
|||
|
|
set => m_InstanceRoot = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 总音量控制。
|
|||
|
|
/// </summary>
|
|||
|
|
public float Volume
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.Volume;
|
|||
|
|
set => m_AudioManager.Volume = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 总开关。
|
|||
|
|
/// </summary>
|
|||
|
|
public bool Enable
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.Enable;
|
|||
|
|
set => m_AudioManager.Enable = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 音乐音量。
|
|||
|
|
/// </summary>
|
|||
|
|
public float MusicVolume
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.MusicVolume;
|
|||
|
|
set => m_AudioManager.MusicVolume = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 音效音量。
|
|||
|
|
/// </summary>
|
|||
|
|
public float SoundVolume
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.SoundVolume;
|
|||
|
|
set => m_AudioManager.SoundVolume = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// UI音效音量。
|
|||
|
|
/// </summary>
|
|||
|
|
public float UISoundVolume
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.UISoundVolume;
|
|||
|
|
set => m_AudioManager.UISoundVolume = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 语音音量。
|
|||
|
|
/// </summary>
|
|||
|
|
public float VoiceVolume
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.VoiceVolume;
|
|||
|
|
set => m_AudioManager.VoiceVolume = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 音乐开关
|
|||
|
|
/// </summary>
|
|||
|
|
public bool MusicEnable
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.MusicEnable;
|
|||
|
|
set => m_AudioManager.MusicEnable = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 音效开关。
|
|||
|
|
/// </summary>
|
|||
|
|
public bool SoundEnable
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.SoundEnable;
|
|||
|
|
set => m_AudioManager.SoundEnable = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// UI音效开关。
|
|||
|
|
/// </summary>
|
|||
|
|
public bool UISoundEnable
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.UISoundEnable;
|
|||
|
|
set => m_AudioManager.UISoundEnable = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 语音开关。
|
|||
|
|
/// </summary>
|
|||
|
|
public bool VoiceEnable
|
|||
|
|
{
|
|||
|
|
get => m_AudioManager.VoiceEnable;
|
|||
|
|
set => m_AudioManager.VoiceEnable = value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
protected override void Awake()
|
|||
|
|
{
|
|||
|
|
ImplementationComponentType = Utility.Assembly.GetType(componentType);
|
|||
|
|
InterfaceComponentType = typeof(IAudioManager);
|
|||
|
|
base.Awake();
|
|||
|
|
m_AudioManager = SysModuleCenter.GetModule<IAudioManager>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 初始化音频模块。
|
|||
|
|
/// </summary>
|
|||
|
|
void Start()
|
|||
|
|
{
|
|||
|
|
if (m_InstanceRoot == null)
|
|||
|
|
{
|
|||
|
|
m_InstanceRoot = new GameObject("AudioModule Instances").transform;
|
|||
|
|
m_InstanceRoot.SetParent(gameObject.transform);
|
|||
|
|
m_InstanceRoot.localScale = Vector3.one;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (m_AudioMixer == null)
|
|||
|
|
{
|
|||
|
|
m_AudioMixer = Resources.Load<AudioMixer>("AudioMixer");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_AudioManager.Initialize(m_AudioGroupConfigs, m_InstanceRoot, m_AudioMixer);
|
|||
|
|
m_AudioManager.SetResourceManager(SysModuleCenter.GetModule<IResourceManager>());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 重启音频模块。
|
|||
|
|
/// </summary>
|
|||
|
|
public void Restart()
|
|||
|
|
{
|
|||
|
|
m_AudioManager.Restart();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 播放,如果超过最大发声数采用fadeout的方式复用最久播放的AudioSource。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="type">声音类型</param>
|
|||
|
|
/// <param name="path">声音文件路径</param>
|
|||
|
|
/// <param name="bLoop">是否循环播放</param>>
|
|||
|
|
/// <param name="volume">音量(0-1.0)</param>
|
|||
|
|
/// <param name="bAsync">是否异步加载</param>
|
|||
|
|
/// <param name="bInPool">是否支持资源池</param>
|
|||
|
|
public AudioAgent Play(AudioType type, string path, bool bLoop = false, float volume = 1.0f, bool bAsync = false, bool bInPool = false)
|
|||
|
|
{
|
|||
|
|
return m_AudioManager.Play(type, path, bLoop, volume, bAsync, bInPool);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 停止某类声音播放。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="type">声音类型。</param>
|
|||
|
|
/// <param name="fadeout">是否渐消。</param>
|
|||
|
|
public void Stop(AudioType type, bool fadeout)
|
|||
|
|
{
|
|||
|
|
m_AudioManager.Stop(type, fadeout);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 停止所有声音。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="fadeout">是否渐消。</param>
|
|||
|
|
public void StopAll(bool fadeout)
|
|||
|
|
{
|
|||
|
|
m_AudioManager.StopAll(fadeout);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 预先加载AudioClip,并放入对象池。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="list">AudioClip的AssetPath集合。</param>
|
|||
|
|
public void PutInAudioPool(List<string> list)
|
|||
|
|
{
|
|||
|
|
m_AudioManager.PutInAudioPool(list);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 将部分AudioClip从对象池移出。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="list">AudioClip的AssetPath集合。</param>
|
|||
|
|
public void RemoveClipFromPool(List<string> list)
|
|||
|
|
{
|
|||
|
|
m_AudioManager.RemoveClipFromPool(list);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 清空AudioClip的对象池。
|
|||
|
|
/// </summary>
|
|||
|
|
public void CleanSoundPool()
|
|||
|
|
{
|
|||
|
|
m_AudioManager.CleanSoundPool();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|