From c0574abb805e6f5ca87ccb50fa8f1841ec160dcd Mon Sep 17 00:00:00 2001 From: nakjun Date: Fri, 26 Jun 2026 13:18:33 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=A4=EC=A0=95=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WhaleAdventure_VR/Rooms/Gepto first.unity | 4 +-- .../Rooms/Gepto second.unity | 4 +-- Assets/02_Scripts/Managers/GameManager.cs | 36 +++++++++++++++++++ Assets/02_Scripts/Player/PlayerController.cs | 12 +++++++ Assets/02_Scripts/ZoneTrigger.cs | 3 ++ .../08_Timeline/Signals/Sig_QuitGame.signal | 14 ++++++++ .../Signals/Sig_QuitGame.signal.meta | 8 +++++ .../08_Timeline/Timeline_GeptoSecond.playable | 19 +++++++++- ProjectSettings/EditorBuildSettings.asset | 4 +-- 9 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 Assets/08_Timeline/Signals/Sig_QuitGame.signal create mode 100644 Assets/08_Timeline/Signals/Sig_QuitGame.signal.meta diff --git a/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto first.unity b/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto first.unity index 7d290bd2..5e9e1a20 100644 --- a/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto first.unity +++ b/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto first.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cb631d855df4c240e0661f81f4e8516edf8d8bf999512d1d19ff51d6b90aba9 -size 45598 +oid sha256:27dbb1bc038ab4cbd6d96c02d029b1ff360870d86a6930141e5ee74874f02713 +size 45610 diff --git a/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto second.unity b/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto second.unity index de734e7e..9da16397 100644 --- a/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto second.unity +++ b/Assets/01_Scenes/WhaleAdventure_VR/Rooms/Gepto second.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0b8b3fd448f2850df3e388c960cece35c16e50d9649887cbd9b4c11eed969a2 -size 42182 +oid sha256:42aec8ed97ba2063e05b17b946db8b2ff33e7d28a9c32e28690867b050068613 +size 44265 diff --git a/Assets/02_Scripts/Managers/GameManager.cs b/Assets/02_Scripts/Managers/GameManager.cs index 7b2ee79c..095c326c 100644 --- a/Assets/02_Scripts/Managers/GameManager.cs +++ b/Assets/02_Scripts/Managers/GameManager.cs @@ -34,6 +34,42 @@ public void SetZone(Zone zone) public void OnSceneLoaded() { + ResolveZoneAtSpawn(); + } + //씬 로드 직후, 플레이어가 서 있는 위치에서 ZoneTrigger를 직접 조회해 구역을 확정한다. + //None을 깔고 OnTriggerEnter를 기다리는 방식의 BGM 글리치/누락(스폰 즉시 트리거 안인 경우)을 피하기 위함. + private void ResolveZoneAtSpawn() + { + Zone resolved = Zone.None; + + var player = GameObject.FindGameObjectWithTag("Player"); + if (player != null) + { + //콜라이더는 Awake/OnEnable에서 이미 물리씬에 등록되므로 첫 물리 스텝 전에도 즉시 조회 가능 + Collider[] hits = Physics.OverlapSphere( + player.transform.position, 0.1f, ~0, QueryTriggerInteraction.Collide); + + foreach (var hit in hits) + { + if (hit.TryGetComponent(out var trigger)) + { + resolved = trigger.Zone; + break; + } + } + } + + SetZone(resolved); //이전 구역과 같으면 dedup되어 BGM이 끊김 없이 이어진다 + } + + //게임 종료 (에디터에서는 플레이 모드 중지, 빌드에서는 앱 종료) + public void QuitGame() + { +#if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; +#else + Application.Quit(); +#endif } } \ No newline at end of file diff --git a/Assets/02_Scripts/Player/PlayerController.cs b/Assets/02_Scripts/Player/PlayerController.cs index cdb9191f..013d66b1 100644 --- a/Assets/02_Scripts/Player/PlayerController.cs +++ b/Assets/02_Scripts/Player/PlayerController.cs @@ -149,6 +149,18 @@ private async Awaitable SightFadeAsync(float targetAlpha, CancellationToken toke catch (OperationCanceledException) { } } + // GameManager를 통해 게임을 종료한다. (UI 버튼·타임라인 시그널 등에서 호출) + public void QuitGame() + { + if (GameManager.Instance == null) + { + Debug.LogWarning("[PlayerController] GameManager.Instance가 없습니다. 게임을 종료할 수 없습니다."); + return; + } + + GameManager.Instance.QuitGame(); + } + private void Update() { // 바닥 체크 및 Y축 속도 초기화 diff --git a/Assets/02_Scripts/ZoneTrigger.cs b/Assets/02_Scripts/ZoneTrigger.cs index 0dfe6d8c..417d42a8 100644 --- a/Assets/02_Scripts/ZoneTrigger.cs +++ b/Assets/02_Scripts/ZoneTrigger.cs @@ -7,6 +7,9 @@ public class ZoneTrigger : MonoBehaviour [SerializeField] private Zone _zone; //이 영역이 나타내는 구역 [SerializeField] private string _playerTag = "Player"; //플레이어로 인식할 태그 + //스폰 위치 판정 등에서 외부가 이 트리거의 구역을 읽을 수 있도록 노출 + public Zone Zone => _zone; + private void Reset() { //이 컴포넌트를 붙이면 콜라이더를 자동으로 트리거로 설정 diff --git a/Assets/08_Timeline/Signals/Sig_QuitGame.signal b/Assets/08_Timeline/Signals/Sig_QuitGame.signal new file mode 100644 index 00000000..daf9cd42 --- /dev/null +++ b/Assets/08_Timeline/Signals/Sig_QuitGame.signal @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6fa2d92fc1b3f34da284357edf89c3b, type: 3} + m_Name: Sig_QuitGame + m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.SignalAsset diff --git a/Assets/08_Timeline/Signals/Sig_QuitGame.signal.meta b/Assets/08_Timeline/Signals/Sig_QuitGame.signal.meta new file mode 100644 index 00000000..84f7cc09 --- /dev/null +++ b/Assets/08_Timeline/Signals/Sig_QuitGame.signal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b02eaa2955e72b4294be05e52c90129 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/08_Timeline/Timeline_GeptoSecond.playable b/Assets/08_Timeline/Timeline_GeptoSecond.playable index 04c6cfef..250f1907 100644 --- a/Assets/08_Timeline/Timeline_GeptoSecond.playable +++ b/Assets/08_Timeline/Timeline_GeptoSecond.playable @@ -41,7 +41,7 @@ MonoBehaviour: m_Start: 4 m_ClipIn: 0 m_Asset: {fileID: 8000411283881595332} - m_Duration: 5 + m_Duration: 7 m_TimeScale: 1 m_ParentTrack: {fileID: -4088094050139152046} m_EaseInDuration: 0 @@ -134,6 +134,23 @@ MonoBehaviour: m_Objects: - {fileID: 4070348831193287581} - {fileID: -5316700233391951052} + - {fileID: -393883030560430518} +--- !u!114 &-393883030560430518 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 15c38f6fa1940124db1ab7f6fe7268d1, type: 3} + m_Name: Signal Emitter + m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.SignalEmitter + m_Time: 10.5 + m_Retroactive: 0 + m_EmitOnce: 0 + m_Asset: {fileID: 11400000, guid: 9b02eaa2955e72b4294be05e52c90129, type: 2} --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 8098a1c1..35160ab3 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b3467d1c5f4da50d7fbb1eb81ec73866329eee6f5c6b0fdffa4838e2de6cac6 -size 1608 +oid sha256:ff2128e80b7a7a4f51cce17f1d1ac5811177c85a2d3f2579f7bb69ef6a8cd870 +size 1736