56 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|