2026-07-10 대화 BGM,이펙트

This commit is contained in:
2026-07-10 17:27:11 +09:00
parent bda7752fb3
commit 932aad8c56
26 changed files with 1984 additions and 11 deletions

View File

@@ -0,0 +1,55 @@
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;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3a5362edc262af5439945354ddc95802

View File

@@ -40,7 +40,7 @@ private void Awake()
}
else
{
Destroy(gameObject); //이미 인스턴스가 있으면 자신을 파괴
Destroy(gameObject); //이미 인스턴스가 있으면 자신을 파괴 (씬마다 놓아도 첫 번째만 남음)
}
}
@@ -72,6 +72,7 @@ private void Start()
//기본 BGM 교체 (씬/분위기 전환용). 전용 BGM 재생 중이면 곡은 유지되고 복귀 시 반영됨.
public void SetDefaultBGM(AudioClip clip)
{
if (_defaultBgm == clip) return; //같은 곡이면 페이드 재시작 없이 유지
_defaultBgm = clip;
if (_overrideBgm == null)
StartBgmChange(clip);