From ed4c305b202440c8e24251decdd1754a2bc36b80 Mon Sep 17 00:00:00 2001 From: swrring Date: Tue, 15 Sep 2026 00:46:35 +0900 Subject: [PATCH] =?UTF-8?q?[WL-816]=20=EC=84=AC=20=EC=B9=B4=EB=A9=94?= =?UTF-8?q?=EB=9D=BC=20=EA=B1=B0=EB=A6=AC=20SO=20=ED=99=94=20=E2=80=94=20F?= =?UTF-8?q?I=20PlayerVirtualCamera(FramingTransposer)=2022=E2=86=9215=20m?= =?UTF-8?q?=20=EB=A5=BC=20=EC=84=AC=20=EB=A1=9C=EB=93=9C=20=EB=95=8C=20?= =?UTF-8?q?=EB=8D=AE=EC=9D=8C=20(PD=20=E3=80=8C=EC=84=AC=EB=8F=84=20?= =?UTF-8?q?=EB=8D=94=20=EA=B0=80=EA=B9=8C=EC=9D=B4=E3=80=8D=20=C2=B7=20#81?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WLIslandSceneSetup.ApplyIslandCameraDistance: 섬 씬의 Cinemachine 가상 카메라(islandVcamName)의 m_CameraDistance 를 islandCamDistance 로. FI 씬·코드 0줄. - WLIslandSettings: islandCamDistance 15 · islandVcamName PlayerVirtualCamera 신설 · camDistance 는 기준 기록값 22 로 복원(던전은 dungeonCamDistance 13). - 되돌리기 = islandCamDistance 0. Co-Authored-By: Claude Fable 5.1 --- .../Resources/WL/WLIslandSettings.asset | 4 ++- Assets/WL/Island/WLIslandSceneSetup.cs | 27 +++++++++++++++++++ Assets/WL/Island/WLIslandSettings.cs | 8 ++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Assets/WL/Island/Resources/WL/WLIslandSettings.asset b/Assets/WL/Island/Resources/WL/WLIslandSettings.asset index 66858cd3a..33e0d59f7 100644 --- a/Assets/WL/Island/Resources/WL/WLIslandSettings.asset +++ b/Assets/WL/Island/Resources/WL/WLIslandSettings.asset @@ -81,7 +81,9 @@ MonoBehaviour: dungeonCameraMatchIsland: 1 camPitch: 45 camYaw: 0 - camDistance: 15 + camDistance: 22 + islandCamDistance: 15 + islandVcamName: PlayerVirtualCamera dungeonCamDistance: 13 camFov: 60 camLookHeight: 0 diff --git a/Assets/WL/Island/WLIslandSceneSetup.cs b/Assets/WL/Island/WLIslandSceneSetup.cs index 10ae52b23..bca0356d5 100644 --- a/Assets/WL/Island/WLIslandSceneSetup.cs +++ b/Assets/WL/Island/WLIslandSceneSetup.cs @@ -78,6 +78,7 @@ namespace WL.Island // ───────────────────────────────────────────────────────────────── public static void FixDuplicates(WLIslandSettings cfg, Scene scene) { + ApplyIslandCameraDistance(cfg, scene); // 2026-09-15 PD 「섬과 던전 모두 좀 더 가까이」 — 섬 카메라 거리(SO) if (cfg.fixIslandDuplicates == 0) return; HideWlPc(cfg); @@ -116,6 +117,32 @@ namespace WL.Island " · AudioListener 해제 " + ListenersFixed); } + // ───────────────────────────────────────────────────────────────── + // ②-b 섬 카메라 거리 — FI `PlayerVirtualCamera` 의 CinemachineFramingTransposer.m_CameraDistance(씬 값 22)를 + // 섬 로드 때 SO 값으로 덮는다(2026-09-15 PD 「섬과 던전 모두 좀 더 가까이」 · FI 씬·코드 0줄). + // `islandCamDistance` 0 이하면 무동작 = 씬 값 그대로(되돌리기). + // ───────────────────────────────────────────────────────────────── + public static int IslandCamApplied; + + public static void ApplyIslandCameraDistance(WLIslandSettings cfg, Scene scene) + { + if (cfg == null || cfg.islandCamDistance <= 0f) return; + var vcams = Object.FindObjectsByType(FindObjectsSortMode.None); + for (int i = 0; i < vcams.Length; i++) + { + var v = vcams[i]; + if (v == null || v.gameObject.scene != scene) continue; + if (!string.IsNullOrEmpty(cfg.islandVcamName) && v.name != cfg.islandVcamName) continue; + var ft = v.GetCinemachineComponent(); + if (ft == null) continue; + float was = ft.m_CameraDistance; + ft.m_CameraDistance = cfg.islandCamDistance; + IslandCamApplied++; + WLIslandBridge.Log(cfg, "섬 카메라 거리 — " + v.name + " " + was.ToString("F1") + " → " + + cfg.islandCamDistance.ToString("F1") + " m"); + } + } + static readonly List s_disabledCams = new List(4); static readonly List s_disabledListeners = new List(4); diff --git a/Assets/WL/Island/WLIslandSettings.cs b/Assets/WL/Island/WLIslandSettings.cs index ce4655aa7..c8f276921 100644 --- a/Assets/WL/Island/WLIslandSettings.cs +++ b/Assets/WL/Island/WLIslandSettings.cs @@ -332,6 +332,14 @@ namespace WL.Island "🔴 섬은 이 값을 쓰지 않는다(FI Cinemachine 이 스스로 잡는다) — 기준 기록용이자 아래 던전 값의 기본값이다.")] public float camDistance = 22f; + [Tooltip("🔴 **섬 전용** 카메라 거리(m) — 2026-09-15 PD 「섬과 던전 모두 좀 더 가까이」. FI `PlayerVirtualCamera` 의 " + + "CinemachineFramingTransposer.m_CameraDistance(씬 값 22)를 섬 로드 때 이 값으로 덮는다(FI 씬·코드 0줄). " + + "0 이하면 무동작(= 씬 값 22 그대로).")] + public float islandCamDistance = 15f; + + [Tooltip("위 섬 거리를 적용할 FI 가상 카메라 이름. 비우면 섬 씬의 FramingTransposer 전부.")] + public string islandVcamName = "PlayerVirtualCamera"; + [Tooltip("🔴 **던전 전용** 카메라 거리(m) — WL-816i2 · PD 「던전에서는 카메라를 조금만 더 당기자」. " + "0 이하면 위 섬 값(22)을 그대로 쓴다. 각도 45°·yaw 0°·FOV 60 은 섬과 같게 유지하고 **거리만** 줄인다. " + "섬은 이 값에 전혀 영향받지 않는다.")]