축제 윤지후져루트

This commit is contained in:
2026-07-23 17:56:58 +09:00
parent e34c3a1f45
commit ffa6320e4d
3 changed files with 1666 additions and 54 deletions

View File

@@ -9,6 +9,13 @@ public class LocalManager : MonoBehaviour,ISceneInitializable
[SerializeField] private string _nextSceneName;
[SerializeField] private AudioClip _caffebeneBGM;
// 일반 씬 전환(NextSceneWithBgm)용 전용 BGM과, 재생 후 씬 전환까지의 대기(초, 0이면 즉시 전환)
[SerializeField] private AudioClip _sceneChangeBGM;
[SerializeField, Min(0f)] private float _sceneChangeBgmPlayTime = 0f;
[Tooltip("런타임에 번호로 골라 _sceneChangeBGM을 교체할 BGM 후보들 (SetSceneChangeBgm(번호)로 선택)")]
[SerializeField] private AudioClip[] _sceneChangeBgmOptions;
// 흑백 전환에 걸리는 시간(초)
[SerializeField, Min(0f)] private float _grayscaleFadeTime = 1.5f;
// BGM 재생 시작 후 씬 전환까지 대기 시간(초)
@@ -33,6 +40,44 @@ public void NextScene(int delay)
_ = Util.RunDelayed((float)delay,()=>SceneLoadManager.Instance.RequestSceneChange(_nextSceneName));
}
// 일반 씬 전환 + 전용 BGM. delay 뒤 전용 BGM을 재생하고(있으면), _sceneChangeBgmPlayTime 만큼 두었다가 씬 전환.
// 카페 시퀀스와 달리 흑백/이미지 연출은 없다. UnityEvent에서 호출 가능.
public void NextSceneWithBgm(int delay)
{
_ = NextSceneWithBgmSequence(delay);
}
// UnityEvent에서 번호로 호출 — _sceneChangeBgmOptions[index]를 다음 NextSceneWithBgm에 쓸 전용 BGM으로 교체한다.
public void SetSceneChangeBgm(int index)
{
if (_sceneChangeBgmOptions == null || index < 0 || index >= _sceneChangeBgmOptions.Length)
{
Debug.LogWarning($"[LocalManager] 잘못된 Scene Change BGM 번호: {index} (후보 {(_sceneChangeBgmOptions != null ? _sceneChangeBgmOptions.Length : 0)}개)");
return;
}
_sceneChangeBGM = _sceneChangeBgmOptions[index];
}
private async Awaitable NextSceneWithBgmSequence(int delay)
{
try
{
await Awaitable.WaitForSecondsAsync((float)delay, destroyCancellationToken);
if (_sceneChangeBGM != null && SoundManager.Instance != null)
SoundManager.Instance.PlayOverrideBGM(_sceneChangeBGM);
if (_sceneChangeBgmPlayTime > 0f)
await Awaitable.WaitForSecondsAsync(_sceneChangeBgmPlayTime, destroyCancellationToken);
SceneLoadManager.Instance.RequestSceneChange(_nextSceneName);
}
catch (System.OperationCanceledException)
{
// 씬 전환 등으로 자신이 파괴되어 취소됨
}
}
public void CaffebeneNextSceneChange(int delay)
{
_ = CaffebeneSequence(delay);