using System.Collections.Generic; using UnityEngine; // 씬별 BGM 관리 (이벤트 구동). 씬마다 하나 배치한다. // - 씬 시작 시 Default Bgm 재생 // - 이벤트 존(EventZoneTimeline/EventZoneTrigger)이 발동하거나 StoryTrigger가 켜지는 순간, 그 Id에 매핑된 곡이 있으면 교체 (크로스페이드) // - 매핑에 없는 Id는 무시. 나중에 발동한 항목이 이긴다 // - 대화 전용 BGM(Override) 재생 중이면 곡은 보류됐다가 대화가 끝나면 반영된다 public class SceneBgm : MonoBehaviour { [System.Serializable] public class BgmEntry { [Tooltip("이벤트 존의 Zone Id 또는 StoryTrigger의 Trigger Id")] public string Id; [Tooltip("해당 Id 발동 시 재생할 BGM. 비우면 무음")] public AudioClip Clip; } [Tooltip("씬 시작 시 재생할 기본 BGM. 비우면 무음")] [SerializeField] private AudioClip _defaultBgm; [Tooltip("존/트리거 Id → BGM 매핑")] [SerializeField] private List _entries = new(); private void Start() { if (SoundManager.Instance != null) SoundManager.Instance.SetDefaultBGM(_defaultBgm); } private void OnEnable() { EventZoneTimeline.OnZoneTriggered += HandleId; EventZoneTrigger.OnZoneTriggered += HandleId; StoryTrigger.OnActivated += HandleId; } private void OnDisable() { EventZoneTimeline.OnZoneTriggered -= HandleId; EventZoneTrigger.OnZoneTriggered -= HandleId; StoryTrigger.OnActivated -= HandleId; } private void HandleId(string id) { foreach (var entry in _entries) { if (entry.Id != id) continue; if (SoundManager.Instance != null) SoundManager.Instance.SetDefaultBGM(entry.Clip); return; } } }