[WL-816w/816zc/816zj] 복귀 후 울타리(전투 장벽 그림) 3중 차단(복귀 직전 Clear+HideImmediate · 섬 진입 Clear · 재훑기 무한) · 상인 프랍 0.6 · 지형 재대입 프레임 빔 방지(바뀔 때만 대입) (#816)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
141197a5f1
commit
e5325b3864
|
|
@ -233,6 +233,11 @@ namespace WL.Island
|
||||||
var cfg = WLIslandSettings.Instance;
|
var cfg = WLIslandSettings.Instance;
|
||||||
if (cfg == null || cfg.enabled_ == 0) return;
|
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)
|
if (InGameInfo.Ins != null)
|
||||||
{
|
{
|
||||||
// 🔴 WL-816i — 나갈 때도 마찬가지다(던전 씬이 내려가며 노드가 죽지 않게 미리 섬 것으로).
|
// 🔴 WL-816i — 나갈 때도 마찬가지다(던전 씬이 내려가며 노드가 죽지 않게 미리 섬 것으로).
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ namespace WL.Island
|
||||||
HideIslandFences(cfg, scene, null);
|
HideIslandFences(cfg, scene, null);
|
||||||
// 2026-09-15 Lead 실측(광선·전수 조회) — PD 화면의 「허공에 뜬 울타리·바위」 = 전투 스테이지 「보이는 장벽」(WL815c · HideAndDontSave)이
|
// 2026-09-15 Lead 실측(광선·전수 조회) — PD 화면의 「허공에 뜬 울타리·바위」 = 전투 스테이지 「보이는 장벽」(WL815c · HideAndDontSave)이
|
||||||
// 던전 → 섬 전환 뒤에도 남은 것. 섬 진입마다 즉시 풀에 반납한다(슬롯 없으면 비용 0).
|
// 던전 → 섬 전환 뒤에도 남은 것. 섬 진입마다 즉시 풀에 반납한다(슬롯 없으면 비용 0).
|
||||||
|
WL.Combat.Stage.StageBarrier.Clear(); // 2026-09-16 — 던전에서 열린 채 돌아온 장벽 상태부터 닫는다
|
||||||
int barrier = WL.Combat.Stage.StageBarrierVisual.HideImmediate();
|
int barrier = WL.Combat.Stage.StageBarrierVisual.HideImmediate();
|
||||||
if (barrier > 0) WLIslandBridge.Log(cfg, "전투 장벽 그림 " + barrier + "개 즉시 정리(섬 진입)");
|
if (barrier > 0) WLIslandBridge.Log(cfg, "전투 장벽 그림 " + barrier + "개 즉시 정리(섬 진입)");
|
||||||
WLIslandTileFenceStrip.Apply(cfg, scene); // 2026-09-15 Lead 실측 — 타일 메시에 구워진 난간 제거
|
WLIslandTileFenceStrip.Apply(cfg, scene); // 2026-09-15 Lead 실측 — 타일 메시에 구워진 난간 제거
|
||||||
|
|
@ -539,11 +540,14 @@ namespace WL.Island
|
||||||
{
|
{
|
||||||
float wait = Mathf.Max(0.5f, cfg.farmReHideDelaySeconds);
|
float wait = Mathf.Max(0.5f, cfg.farmReHideDelaySeconds);
|
||||||
// 섬이 살아 있는 동안 3 s 마다 계속 훑는다(이미 꺼진 것은 건너뛰어 비용 0에 가깝다) — 늦게 활성화되는 타일·밭까지 덮는다.
|
// 섬이 살아 있는 동안 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);
|
yield return new WaitForSeconds(wait);
|
||||||
if (cfg == null || cfg.hideIslandFences == 0 || !scene.IsValid() || !scene.isLoaded) yield break;
|
if (cfg == null || cfg.hideIslandFences == 0 || !scene.IsValid() || !scene.isLoaded) yield break;
|
||||||
HideIslandFences(cfg, scene, null);
|
HideIslandFences(cfg, scene, null);
|
||||||
|
WL.Combat.Stage.StageBarrier.Clear(); // 던전에서 열린 채 돌아온 장벽 상태 닫기(이미 닫혀 있으면 무동작)
|
||||||
WL.Combat.Stage.StageBarrierVisual.HideImmediate(); // 늦게 페이드 중이던 전투 장벽 그림까지(슬롯 없으면 비용 0)
|
WL.Combat.Stage.StageBarrierVisual.HideImmediate(); // 늦게 페이드 중이던 전투 장벽 그림까지(슬롯 없으면 비용 0)
|
||||||
WLIslandTileFenceStrip.Apply(cfg, scene); // 확장·재구성으로 타일 메시가 바뀌면 다시 잘라낸다(멱등)
|
WLIslandTileFenceStrip.Apply(cfg, scene); // 확장·재구성으로 타일 메시가 바뀌면 다시 잘라낸다(멱등)
|
||||||
if (cfg.hideFarms != 0) { Vector3 _c; HideFarms(cfg, scene, out _c); } // 늦게 생긴 밭의 울타리·소품도
|
if (cfg.hideFarms != 0) { Vector3 _c; HideFarms(cfg, scene, out _c); } // 늦게 생긴 밭의 울타리·소품도
|
||||||
|
|
|
||||||
|
|
@ -561,7 +561,7 @@ namespace WL.Island
|
||||||
label = "상인 설치", price = 30,
|
label = "상인 설치", price = 30,
|
||||||
platformFromDungeonRow = 1, // 기존 발판 #2 좌표
|
platformFromDungeonRow = 1, // 기존 발판 #2 좌표
|
||||||
kind = "prefab",
|
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",
|
prefabPath = "Assets/FarmingIsland/Prefabs/Buildings/Stall01.prefab",
|
||||||
extraPrefabPath = "Assets/FarmingIsland/Prefabs/Characters/Merchant.prefab",
|
extraPrefabPath = "Assets/FarmingIsland/Prefabs/Characters/Merchant.prefab",
|
||||||
extraSkipIfComponent = "Merchant", // 좌판 안에 이미 상인이 있으면 안 덧붙인다
|
extraSkipIfComponent = "Merchant", // 좌판 안에 이미 상인이 있으면 안 덧붙인다
|
||||||
|
|
|
||||||
|
|
@ -360,8 +360,10 @@ namespace WL.Look.Farm
|
||||||
|
|
||||||
// 2) TerrainData·Terrain — 해상도가 바뀌면 새로 만들고, 아니면 크기·위치만 옮긴다
|
// 2) TerrainData·Terrain — 해상도가 바뀌면 새로 만들고, 아니면 크기·위치만 옮긴다
|
||||||
EnsureData(hRes, aRes);
|
EnsureData(hRes, aRes);
|
||||||
_data.size = new Vector3(w, span, l);
|
var newSize = new Vector3(w, span, l);
|
||||||
_child.transform.position = new Vector3(ox, bottom, oz);
|
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) 거리장 — 테두리 선분 · 열기 연산 링(타일 가장자리에 맞춘 격자 · 칸 ≤ 스플랫 텍셀)
|
// 3) 거리장 — 테두리 선분 · 열기 연산 링(타일 가장자리에 맞춘 격자 · 칸 ≤ 스플랫 텍셀)
|
||||||
BuildEdges(size, half);
|
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)
|
if (layers == null || layers.Length != 2 || layers[0] != cfg.demoGrassLayer || layers[1] != cfg.demoDirtLayer)
|
||||||
_data.terrainLayers = new[] { cfg.demoGrassLayer, cfg.demoDirtLayer }; // 층0 잔디 · 층1 모래(데모 TerrainLayer 에셋 참조)
|
_data.terrainLayers = new[] { cfg.demoGrassLayer, cfg.demoDirtLayer }; // 층0 잔디 · 층1 모래(데모 TerrainLayer 에셋 참조)
|
||||||
|
|
||||||
_terrain.terrainData = _data;
|
// 🔴 2026-09-16 PD 「상인 생성 때 맵이 잠시 사라진 것처럼 보임」 — 같은 값을 다시 대입해도 Terrain 이 내부 상태를 다시 만들어 한 프레임 비는 것을 막는다(바뀔 때만 대입).
|
||||||
_terrain.materialTemplate = cfg.demoTerrainMaterial; // 데모 Terrain.mat 그대로(값 무수정)
|
if (_terrain.terrainData != _data) _terrain.terrainData = _data;
|
||||||
_terrain.drawInstanced = false; // Demo.unity 1228 m_DrawInstanced 0 · 그 외 Terrain 값은 데모 = 컴포넌트 기본값
|
if (_terrain.materialTemplate != cfg.demoTerrainMaterial) _terrain.materialTemplate = cfg.demoTerrainMaterial; // 데모 Terrain.mat 그대로(값 무수정)
|
||||||
_terrain.allowAutoConnect = false;
|
if (_terrain.drawInstanced) _terrain.drawInstanced = false; // Demo.unity 1228 m_DrawInstanced 0 · 그 외 Terrain 값은 데모 = 컴포넌트 기본값
|
||||||
|
if (_terrain.allowAutoConnect) _terrain.allowAutoConnect = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue