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