From e5325b3864888829d9b3878779e27cebacb485bc Mon Sep 17 00:00:00 2001 From: swrring Date: Wed, 16 Sep 2026 19:55:01 +0900 Subject: [PATCH] =?UTF-8?q?[WL-816w/816zc/816zj]=20=EB=B3=B5=EA=B7=80=20?= =?UTF-8?q?=ED=9B=84=20=EC=9A=B8=ED=83=80=EB=A6=AC(=EC=A0=84=ED=88=AC=20?= =?UTF-8?q?=EC=9E=A5=EB=B2=BD=20=EA=B7=B8=EB=A6=BC)=203=EC=A4=91=20?= =?UTF-8?q?=EC=B0=A8=EB=8B=A8(=EB=B3=B5=EA=B7=80=20=EC=A7=81=EC=A0=84=20Cl?= =?UTF-8?q?ear+HideImmediate=20=C2=B7=20=EC=84=AC=20=EC=A7=84=EC=9E=85=20C?= =?UTF-8?q?lear=20=C2=B7=20=EC=9E=AC=ED=9B=91=EA=B8=B0=20=EB=AC=B4?= =?UTF-8?q?=ED=95=9C)=20=C2=B7=20=EC=83=81=EC=9D=B8=20=ED=94=84=EB=9E=8D?= =?UTF-8?q?=200.6=20=C2=B7=20=EC=A7=80=ED=98=95=20=EC=9E=AC=EB=8C=80?= =?UTF-8?q?=EC=9E=85=20=ED=94=84=EB=A0=88=EC=9E=84=20=EB=B9=94=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80(=EB=B0=94=EB=80=94=20=EB=95=8C=EB=A7=8C=20=EB=8C=80?= =?UTF-8?q?=EC=9E=85)=20(#816)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- Assets/WL/Island/WLIslandBridge.cs | 5 +++++ Assets/WL/Island/WLIslandGateFlow.cs | 6 +++++- Assets/WL/Island/WLIslandSettings.cs | 2 +- Assets/WL/Look/Farm/WLDemoTerrain.cs | 15 +++++++++------ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Assets/WL/Island/WLIslandBridge.cs b/Assets/WL/Island/WLIslandBridge.cs index 014f5b203..16c371cbe 100644 --- a/Assets/WL/Island/WLIslandBridge.cs +++ b/Assets/WL/Island/WLIslandBridge.cs @@ -233,6 +233,11 @@ namespace WL.Island var cfg = WLIslandSettings.Instance; if (cfg == null || cfg.enabled_ == 0) return; + // 2026-09-16 PD 「던전에서 섬으로 복귀하면 인게임 울타리가 남는다」 — 장벽 그림(HideAndDontSave · 씬 무관)은 씬을 바꿔도 살아남는다. + // 돌아가기 전에 장벽 상태를 닫고 그림을 즉시 반납한다(섬 진입 훅과 3 s 재훑기가 2·3중으로 다시 막는다). + WL.Combat.Stage.StageBarrier.Clear(); + WL.Combat.Stage.StageBarrierVisual.HideImmediate(); + if (InGameInfo.Ins != null) { // 🔴 WL-816i — 나갈 때도 마찬가지다(던전 씬이 내려가며 노드가 죽지 않게 미리 섬 것으로). diff --git a/Assets/WL/Island/WLIslandGateFlow.cs b/Assets/WL/Island/WLIslandGateFlow.cs index a7cdac5cf..9443afc59 100644 --- a/Assets/WL/Island/WLIslandGateFlow.cs +++ b/Assets/WL/Island/WLIslandGateFlow.cs @@ -92,6 +92,7 @@ namespace WL.Island HideIslandFences(cfg, scene, null); // 2026-09-15 Lead 실측(광선·전수 조회) — PD 화면의 「허공에 뜬 울타리·바위」 = 전투 스테이지 「보이는 장벽」(WL815c · HideAndDontSave)이 // 던전 → 섬 전환 뒤에도 남은 것. 섬 진입마다 즉시 풀에 반납한다(슬롯 없으면 비용 0). + WL.Combat.Stage.StageBarrier.Clear(); // 2026-09-16 — 던전에서 열린 채 돌아온 장벽 상태부터 닫는다 int barrier = WL.Combat.Stage.StageBarrierVisual.HideImmediate(); if (barrier > 0) WLIslandBridge.Log(cfg, "전투 장벽 그림 " + barrier + "개 즉시 정리(섬 진입)"); WLIslandTileFenceStrip.Apply(cfg, scene); // 2026-09-15 Lead 실측 — 타일 메시에 구워진 난간 제거 @@ -539,11 +540,14 @@ namespace WL.Island { float wait = Mathf.Max(0.5f, cfg.farmReHideDelaySeconds); // 섬이 살아 있는 동안 3 s 마다 계속 훑는다(이미 꺼진 것은 건너뛰어 비용 0에 가깝다) — 늦게 활성화되는 타일·밭까지 덮는다. - for (int k = 0; k < 400; k++) + // 2026-09-16 PD 「울타리가 또 보인다(던전 갔다 섬으로 복귀 후)」 실측 원인: 이 훑기가 400회(20분)에서 끝나 그 뒤 복귀한 장벽 그림을 아무도 안 지웠다 + // → 섬 씬이 살아 있는 동안 **무한** 반복(3 s 간격 · 지울 게 없으면 비용 0). 장벽 상태(StageBarrier)도 함께 닫아 재표시를 막는다. + for (;;) { yield return new WaitForSeconds(wait); if (cfg == null || cfg.hideIslandFences == 0 || !scene.IsValid() || !scene.isLoaded) yield break; HideIslandFences(cfg, scene, null); + WL.Combat.Stage.StageBarrier.Clear(); // 던전에서 열린 채 돌아온 장벽 상태 닫기(이미 닫혀 있으면 무동작) WL.Combat.Stage.StageBarrierVisual.HideImmediate(); // 늦게 페이드 중이던 전투 장벽 그림까지(슬롯 없으면 비용 0) WLIslandTileFenceStrip.Apply(cfg, scene); // 확장·재구성으로 타일 메시가 바뀌면 다시 잘라낸다(멱등) if (cfg.hideFarms != 0) { Vector3 _c; HideFarms(cfg, scene, out _c); } // 늦게 생긴 밭의 울타리·소품도 diff --git a/Assets/WL/Island/WLIslandSettings.cs b/Assets/WL/Island/WLIslandSettings.cs index 8e2bef870..01edda2ab 100644 --- a/Assets/WL/Island/WLIslandSettings.cs +++ b/Assets/WL/Island/WLIslandSettings.cs @@ -561,7 +561,7 @@ namespace WL.Island label = "상인 설치", price = 30, platformFromDungeonRow = 1, // 기존 발판 #2 좌표 kind = "prefab", - scale = 0.5f, // 2026-09-16 PD 「상인 프랍 크기 50 %」 + scale = 0.6f, // 2026-09-16 PD 「상인 프랍 크기 50 %」 → 「20 % 더 키워」 = 0.6 prefabPath = "Assets/FarmingIsland/Prefabs/Buildings/Stall01.prefab", extraPrefabPath = "Assets/FarmingIsland/Prefabs/Characters/Merchant.prefab", extraSkipIfComponent = "Merchant", // 좌판 안에 이미 상인이 있으면 안 덧붙인다 diff --git a/Assets/WL/Look/Farm/WLDemoTerrain.cs b/Assets/WL/Look/Farm/WLDemoTerrain.cs index 14ea46e87..db2897cd1 100644 --- a/Assets/WL/Look/Farm/WLDemoTerrain.cs +++ b/Assets/WL/Look/Farm/WLDemoTerrain.cs @@ -360,8 +360,10 @@ namespace WL.Look.Farm // 2) TerrainData·Terrain — 해상도가 바뀌면 새로 만들고, 아니면 크기·위치만 옮긴다 EnsureData(hRes, aRes); - _data.size = new Vector3(w, span, l); - _child.transform.position = new Vector3(ox, bottom, oz); + var newSize = new Vector3(w, span, l); + if ((_data.size - newSize).sqrMagnitude > 1e-6f) _data.size = newSize; // 바뀔 때만(재대입 = 내부 재생성 → 프레임 빔) + var newPos = new Vector3(ox, bottom, oz); + if ((_child.transform.position - newPos).sqrMagnitude > 1e-6f) _child.transform.position = newPos; // 3) 거리장 — 테두리 선분 · 열기 연산 링(타일 가장자리에 맞춘 격자 · 칸 ≤ 스플랫 텍셀) BuildEdges(size, half); @@ -474,10 +476,11 @@ namespace WL.Look.Farm if (layers == null || layers.Length != 2 || layers[0] != cfg.demoGrassLayer || layers[1] != cfg.demoDirtLayer) _data.terrainLayers = new[] { cfg.demoGrassLayer, cfg.demoDirtLayer }; // 층0 잔디 · 층1 모래(데모 TerrainLayer 에셋 참조) - _terrain.terrainData = _data; - _terrain.materialTemplate = cfg.demoTerrainMaterial; // 데모 Terrain.mat 그대로(값 무수정) - _terrain.drawInstanced = false; // Demo.unity 1228 m_DrawInstanced 0 · 그 외 Terrain 값은 데모 = 컴포넌트 기본값 - _terrain.allowAutoConnect = false; + // 🔴 2026-09-16 PD 「상인 생성 때 맵이 잠시 사라진 것처럼 보임」 — 같은 값을 다시 대입해도 Terrain 이 내부 상태를 다시 만들어 한 프레임 비는 것을 막는다(바뀔 때만 대입). + if (_terrain.terrainData != _data) _terrain.terrainData = _data; + if (_terrain.materialTemplate != cfg.demoTerrainMaterial) _terrain.materialTemplate = cfg.demoTerrainMaterial; // 데모 Terrain.mat 그대로(값 무수정) + if (_terrain.drawInstanced) _terrain.drawInstanced = false; // Demo.unity 1228 m_DrawInstanced 0 · 그 외 Terrain 값은 데모 = 컴포넌트 기본값 + if (_terrain.allowAutoConnect) _terrain.allowAutoConnect = false; } // ─────────────────────────────────────────────────────────────────