From 33afe0b8dc2b032b420b3b753710794db3cc04e7 Mon Sep 17 00:00:00 2001 From: swrring Date: Sun, 13 Sep 2026 14:39:21 +0900 Subject: [PATCH] =?UTF-8?q?[WL-816]=20=EC=84=AC=20=EC=84=B8=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=A5=BC=20=EA=B2=BD=EB=A1=9C=20=EB=AC=B4=EA=B4=80=20?= =?UTF-8?q?=EB=8B=A8=EC=9D=BC=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EA=B3=A0?= =?UTF-8?q?=EC=A0=95=20+=20=EA=B8=B0=EC=A1=B4=20=EC=84=B8=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=20=EC=B4=88=EA=B8=B0=ED=99=94=20(#816)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 「세이브가 경로마다 갈리면 안돼. 그냥 기존 세이브를 초기화하고 단일 경로로 맞춰」. 원인(816f 실측): IslandManager.Awake 가 saveFileName 을 활성 씬 이름으로 잡아, 섬 단독 Play 는 Level01.dat · 게임 정식 경로(Additive)는 InGame.dat 로 갈렸다. 섬을 키워 놔도 다른 경로로 들어가면 초기 상태가 나왔다. 조치: - IslandManager.cs:119 **1줄** 훅 → WLIslandSave.ResolveSaveName() - 새 파일 WLIslandSave.cs + SO(WL_Island · enabled_=1) - 기존 세이브 4개(InGame/Level01/Level02/WL_FarmLook.dat) 백업 후 삭제 → Temp/claude/island_save_backup_143818 - enabled_=0 이면 원래 동작(씬 이름)으로 복귀 Co-Authored-By: Claude Opus 5 --- .../Scripts/Island/IslandManager.cs | 2 +- .../Resources/WL/WLIslandSaveSettings.asset | 17 ++++++ .../WL/WLIslandSaveSettings.asset.meta | 8 +++ Assets/WL/Island/WLIslandSave.cs | 54 +++++++++++++++++++ Assets/WL/Island/WLIslandSave.cs.meta | 2 + 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset create mode 100644 Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta create mode 100644 Assets/WL/Island/WLIslandSave.cs create mode 100644 Assets/WL/Island/WLIslandSave.cs.meta diff --git a/Assets/FarmingIsland/Scripts/Island/IslandManager.cs b/Assets/FarmingIsland/Scripts/Island/IslandManager.cs index 553bcecd6..5c457f0e7 100644 --- a/Assets/FarmingIsland/Scripts/Island/IslandManager.cs +++ b/Assets/FarmingIsland/Scripts/Island/IslandManager.cs @@ -116,7 +116,7 @@ namespace CryingSnow.FarmingIsland } ItemDatabase.Initialize(); - saveFileName = SceneManager.GetActiveScene().name; + saveFileName = WL.Island.WLIslandSave.ResolveSaveName(SceneManager.GetActiveScene().name); // WL-816: 경로마다 세이브가 갈리지 않게 이름 고정(끄면 원래대로) LoadGameData(); } diff --git a/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset new file mode 100644 index 000000000..3461f52a0 --- /dev/null +++ b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: WLIslandSaveSettings + m_EditorClassIdentifier: Assembly-CSharp:WL.Island:WLIslandSaveSettings + enabled_: 1 + saveName: WL_Island + verboseLog: 0 diff --git a/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta new file mode 100644 index 000000000..415cdf82b --- /dev/null +++ b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c09323f591e60f468e7943fb8c6bcb5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Island/WLIslandSave.cs b/Assets/WL/Island/WLIslandSave.cs new file mode 100644 index 000000000..cf1c8135a --- /dev/null +++ b/Assets/WL/Island/WLIslandSave.cs @@ -0,0 +1,54 @@ +// ───────────────────────────────────────────────────────────────────────────── +// WLIslandSave.cs — 섬 세이브 파일 이름을 **경로와 무관하게 하나로** 고정한다. +// +// ■ 왜 필요한가 (Lead 실측 · 2026-09-13 · 816f 가 발견) +// `IslandManager.cs:119` 가 `saveFileName = SceneManager.GetActiveScene().name` 이라 +// 같은 섬인데도 **들어온 경로에 따라 세이브가 갈린다**: +// · 섬 씬만 단독 Play → `Level01.dat` +// · 게임 정식 경로(로그인 → Load_Map → 섬이 Additive) → **`InGame.dat`** +// → 섬을 키워 놔도 다른 경로로 들어가면 초기 상태가 나온다. +// +// ■ PD 결정(2026-09-13): 「세이브가 경로마다 갈리면 안돼. 그냥 기존 세이브를 +// 초기화하고 단일 경로로 맞춰」 → 이름을 하나로 고정한다. +// +// ■ 원본 수정은 `IslandManager.cs` **1줄**(그 대입문)뿐이다 — WL 하우스 규칙의 +// 「1줄 훅 + 새 파일」 그대로. `enabled_ = 0` 이면 원래 동작(씬 이름)으로 돌아간다. +// ───────────────────────────────────────────────────────────────────────────── + +using UnityEngine; + +namespace WL.Island +{ + public sealed class WLIslandSaveSettings : ScriptableObject + { + [Tooltip("0 이면 원본 동작(활성 씬 이름)으로 되돌아간다.")] + public int enabled_ = 1; + + [Tooltip("모든 경로가 공유할 세이브 파일 이름(확장자 제외).")] + public string saveName = "WL_Island"; + + [Tooltip("1 이면 해석 결과를 로그로 남긴다.")] + public int verboseLog = 0; + + static WLIslandSaveSettings s_cache; + + public static WLIslandSaveSettings Get() + { + if (s_cache == null) s_cache = Resources.Load("WL/WLIslandSaveSettings"); + return s_cache; + } + } + + public static class WLIslandSave + { + /// `IslandManager.Awake` 의 1줄 훅이 부른다. 끄면 받은 값을 그대로 돌려준다. + public static string ResolveSaveName(string sceneName) + { + var cfg = WLIslandSaveSettings.Get(); + if (cfg == null || cfg.enabled_ == 0 || string.IsNullOrEmpty(cfg.saveName)) return sceneName; + if (cfg.verboseLog != 0) + Debug.Log("[WL-816] 섬 세이브 이름 '" + sceneName + "' → '" + cfg.saveName + "' (경로 무관 고정)"); + return cfg.saveName; + } + } +} diff --git a/Assets/WL/Island/WLIslandSave.cs.meta b/Assets/WL/Island/WLIslandSave.cs.meta new file mode 100644 index 000000000..31f0b9ec8 --- /dev/null +++ b/Assets/WL/Island/WLIslandSave.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 45775bcbefc66bd43877386c53c1a0ef \ No newline at end of file