[WL-816] 섬 카메라 거리 SO 화 — FI PlayerVirtualCamera(FramingTransposer) 22→15 m 를 섬 로드 때 덮음 (PD 「섬도 더 가까이」 · #816)

- 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 <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-09-15 00:46:35 +09:00
parent aae6aa8fbd
commit ed4c305b20
3 changed files with 38 additions and 1 deletions

View File

@ -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

View File

@ -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<Cinemachine.CinemachineVirtualCamera>(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<Cinemachine.CinemachineFramingTransposer>();
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<Camera> s_disabledCams = new List<Camera>(4);
static readonly List<AudioListener> s_disabledListeners = new List<AudioListener>(4);

View File

@ -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 은 섬과 같게 유지하고 **거리만** 줄인다. " +
"섬은 이 값에 전혀 영향받지 않는다.")]