Files
Dino_Love_Simulation/Assets/02_Scripts/Managers/SceneBgm.cs

56 lines
1.7 KiB
C#

using System.Collections.Generic;
using UnityEngine;
// 씬별 BGM 관리 (이벤트 구동). 씬마다 하나 배치한다.
// - 씬 시작 시 Default Bgm 재생
// - EventZone이 발동하거나 StoryTrigger가 켜지는 순간, 그 Id에 매핑된 곡이 있으면 교체 (크로스페이드)
// - 매핑에 없는 Id는 무시. 나중에 발동한 항목이 이긴다
// - 대화 전용 BGM(Override) 재생 중이면 곡은 보류됐다가 대화가 끝나면 반영된다
public class SceneBgm : MonoBehaviour
{
[System.Serializable]
public class BgmEntry
{
[Tooltip("EventZone의 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<BgmEntry> _entries = new();
private void Start()
{
if (SoundManager.Instance != null)
SoundManager.Instance.SetDefaultBGM(_defaultBgm);
}
private void OnEnable()
{
EventZone.OnZoneTriggered += HandleId;
StoryTrigger.OnActivated += HandleId;
}
private void OnDisable()
{
EventZone.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;
}
}
}