using AlicizaX; using UnityEngine; using UnityEngine.Audio; namespace AlicizaX.Audio.Runtime { [DisallowMultipleComponent] [AddComponentMenu("Game Framework/Audio")] public sealed class AudioComponent : MonoBehaviour { [SerializeField] private AudioMixer m_AudioMixer; [SerializeField] private Transform m_InstanceRoot; [SerializeField] private AudioListener m_AudioListener; [SerializeField] private AudioGroupConfigCollection m_AudioGroupConfigs; private IAudioService _audioService; private void Awake() { _audioService = AppServices.RegisterApp(new AudioService()); } private void Start() { EnsureInstanceRoot(); EnsureAudioMixer(); AudioGroupConfig[] configs = m_AudioGroupConfigs != null ? m_AudioGroupConfigs.GroupConfigs : null; _audioService.Initialize(configs, m_InstanceRoot, m_AudioMixer); if (m_AudioListener != null) { _audioService.RegisterListener(m_AudioListener); } } private void OnEnable() { if (_audioService != null && m_AudioListener != null) { _audioService.RegisterListener(m_AudioListener); } } private void OnDisable() { if (_audioService != null && m_AudioListener != null) { _audioService.UnregisterListener(m_AudioListener); } } private void EnsureInstanceRoot() { if (m_InstanceRoot != null) { return; } m_InstanceRoot = new GameObject("[AudioService Instances]").transform; m_InstanceRoot.SetParent(transform, false); m_InstanceRoot.localScale = Vector3.one; } private void EnsureAudioMixer() { if (m_AudioMixer == null) { m_AudioMixer = Resources.Load("AudioMixer"); } } } }