2026-07-10 대화 BGM,이펙트
This commit is contained in:
55
Assets/02_Scripts/Managers/SceneBgm.cs
Normal file
55
Assets/02_Scripts/Managers/SceneBgm.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Managers/SceneBgm.cs.meta
Normal file
2
Assets/02_Scripts/Managers/SceneBgm.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a5362edc262af5439945354ddc95802
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user