From c88d0fa7e2eb17fc48310ae996f3d9451b15171d Mon Sep 17 00:00:00 2001 From: swrring Date: Tue, 15 Sep 2026 21:07:33 +0900 Subject: [PATCH] =?UTF-8?q?[WL-816w]=20=EC=9A=B8=ED=83=80=EB=A6=AC=20?= =?UTF-8?q?=EC=9B=90=EC=B2=9C=20=EC=B0=A8=EB=8B=A8=20=E2=80=94=20IslandMan?= =?UTF-8?q?ager.islandMeshes=20=EB=AA=A9=EB=A1=9D=20=ED=95=AD=EB=AA=A9?= =?UTF-8?q?=EC=9D=84=20=EB=82=9C=EA=B0=84=20=EC=A0=9C=EA=B1=B0=20=EB=B3=B5?= =?UTF-8?q?=EC=A0=9C=EB=B3=B8=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4(Confi?= =?UTF-8?q?gureIsland=20=EA=B0=80=20=ED=99=95=EC=9E=A5=C2=B7=EC=9E=AC?= =?UTF-8?q?=EA=B5=AC=EC=84=B1=EB=A7=88=EB=8B=A4=20=EC=9B=90=EB=B3=B8=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EB=A5=BC=20=EB=8B=A4=EC=8B=9C=20=EB=AC=BC?= =?UTF-8?q?=EB=A0=A4=20=EB=90=98=EC=82=B4=EC=95=84=EB=82=98=EB=8D=98=20?= =?UTF-8?q?=EA=B2=83)=20=C2=B7=20=EC=8B=A0=EA=B7=9C=20.cs=20meta=202?= =?UTF-8?q?=EA=B1=B4=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/WLIslandTileFenceStrip.cs | 32 ++++++++++++++++++- .../WL/Island/WLIslandTileFenceStrip.cs.meta | 2 ++ Assets/WL/Look/Farm/WLSoftDirt.cs.meta | 2 ++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 Assets/WL/Island/WLIslandTileFenceStrip.cs.meta create mode 100644 Assets/WL/Look/Farm/WLSoftDirt.cs.meta diff --git a/Assets/WL/Island/WLIslandTileFenceStrip.cs b/Assets/WL/Island/WLIslandTileFenceStrip.cs index 3a0cf95ff..3fd449069 100644 --- a/Assets/WL/Island/WLIslandTileFenceStrip.cs +++ b/Assets/WL/Island/WLIslandTileFenceStrip.cs @@ -14,19 +14,21 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using FIIsland = CryingSnow.FarmingIsland.Island; +using FIIslandManager = CryingSnow.FarmingIsland.IslandManager; namespace WL.Island { public static class WLIslandTileFenceStrip { static readonly Dictionary s_cache = new Dictionary(); - public static int TilesStripped, TrianglesRemoved, Unreadable; + public static int TilesStripped, TrianglesRemoved, Unreadable, SourceReplaced; public static string LastLog = ""; /// 섬 씬의 타일(FI Island)마다 메시를 검사해 난간 삼각형이 있으면 잘라낸 복제본으로 바꾼다(멱등). public static void Apply(WLIslandSettings cfg, Scene scene) { if (cfg == null || cfg.stripBakedFences == 0) return; + ReplaceSourceList(cfg, scene); var isls = Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); int changed = 0; for (int i = 0; i < isls.Length; i++) @@ -49,6 +51,34 @@ namespace WL.Island } } + /// + /// 2026-09-15 Lead 실측 — 원본 `Island.ConfigureIsland` 가 확장·재구성 때마다 `IslandManager.islandMeshes[i]`(원본 메시)를 + /// 타일에 **다시 물려** 잘라낸 복제본이 원본으로 되돌아간다(화면의 타일 메시명이 `04`·`07` 등 원본 그대로였다). + /// 그래서 원천인 그 목록의 항목 자체를 잘라낸 복제본으로 바꿔 둔다(리플렉션 · 원본 0줄) — 이후 어떤 시점에 물려도 난간 없음. + /// + static void ReplaceSourceList(WLIslandSettings cfg, Scene scene) + { + var mgrs = Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); + if (mgrs == null || mgrs.Length == 0) return; + var field = typeof(FIIslandManager).GetField("islandMeshes", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public); + if (field == null) return; + for (int k = 0; k < mgrs.Length; k++) + { + var mgr = mgrs[k]; + if (mgr == null || (scene.IsValid() && mgr.gameObject.scene != scene)) continue; + var list = field.GetValue(mgr) as List; + if (list == null) continue; + for (int i = 0; i < list.Count; i++) + { + var src = list[i]; + if (src == null || src.name.EndsWith("_nofence")) continue; + Mesh dst; + if (!s_cache.TryGetValue(src, out dst)) { dst = Strip(src, cfg.fenceStripMinY); s_cache[src] = dst; } + if (dst != null && dst != src) { list[i] = dst; SourceReplaced++; } + } + } + } + static Mesh Strip(Mesh src, float minY) { // 🔴 Read/Write 가 꺼진 메시는 접근 자체가 Unity 에러 로그(→ 게임 팝업)를 낸다 — 예외가 아니라 로그라 try/catch 로 못 막는다. diff --git a/Assets/WL/Island/WLIslandTileFenceStrip.cs.meta b/Assets/WL/Island/WLIslandTileFenceStrip.cs.meta new file mode 100644 index 000000000..5bb2a3f64 --- /dev/null +++ b/Assets/WL/Island/WLIslandTileFenceStrip.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 46247c798030a9746bf06e12f9b45a4f \ No newline at end of file diff --git a/Assets/WL/Look/Farm/WLSoftDirt.cs.meta b/Assets/WL/Look/Farm/WLSoftDirt.cs.meta new file mode 100644 index 000000000..fd423ce3c --- /dev/null +++ b/Assets/WL/Look/Farm/WLSoftDirt.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 870b83e7cd0b2b144abba6944bc2ea9a \ No newline at end of file