using UnityEngine; using BaseGames.Core; namespace BaseGames.Audio { /// /// 全局 SFX 播放入口(单例 MonoBehaviour)。 /// 通过 静态方法播放 , /// 可选传入世界坐标以在指定位置 3D 播放。 /// public class GlobalSFXPlayer : MonoBehaviour { private static GlobalSFXPlayer _instance; [SerializeField] private AudioSource _globalSFXSource; private void Awake() { if (_instance != null) { Destroy(gameObject); return; } _instance = this; } /// /// 播放一个音效事件。 /// 若传入 ,则在该位置 3D 播放;否则使用全局 AudioSource 2D 播放。 /// public static void Play(AudioEventSO audioEvent, Vector2? worldPos = null) { if (audioEvent == null || _instance == null) return; if (worldPos.HasValue) { var clip = audioEvent.PickClip(); if (clip != null) ServiceLocator.GetOrDefault() ?.PlaySFXAtPosition(clip, worldPos.Value, audioEvent.PickVolume()); } else { audioEvent.Play(_instance._globalSFXSource); } } } }