From 9aaddae676ed0bbcc419ef3ab72c2c321e6d2af9 Mon Sep 17 00:00:00 2001 From: swrring Date: Sun, 13 Sep 2026 16:50:45 +0900 Subject: [PATCH] =?UTF-8?q?[WL-816]=20=EC=84=B8=EC=9D=B4=EB=B8=8C=20?= =?UTF-8?q?=EB=8B=A8=EC=9D=BC=ED=99=94=EA=B0=80=20=EC=8B=A4=EC=A0=9C?= =?UTF-8?q?=EB=A1=9C=EB=8A=94=20=EB=8F=99=EC=9E=91=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8D=98=20=EA=B2=83=20=EC=88=98=EC=A0=95=20(#816)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 816g 가 실측으로 지목: WLIslandSaveSettings.asset 의 m_Script 가 {fileID: 0} 이라 Resources.Load 가 null → 세이브가 여전히 Level01.dat / InGame.dat 로 갈리고 있었다(33afe0b8d 는 코드만 들어가고 설정이 안 붙은 상태였다). 원인: 유니티는 ScriptableObject 를 **클래스 이름과 같은 이름의 .cs 파일** 에서만 MonoScript 로 인식한다. 그 클래스가 WLIslandSave.cs 안에 있어 m_Script 를 바인딩할 수 없었다. 조치: WLIslandSaveSettings.cs 로 분리 + .asset 의 m_Script 를 새 GUID 로. 검증: ResolveSaveName("InGame") = "WL_Island" (런타임 실측) · 컴파일 오류 0. Co-Authored-By: Claude Opus 5 --- .../Resources/WL/WLIslandSaveSettings.asset | 4 +-- Assets/WL/Island/WLIslandSave.cs | 22 ++---------- Assets/WL/Island/WLIslandSaveSettings.cs | 36 +++++++++++++++++++ Assets/WL/Island/WLIslandSaveSettings.cs.meta | 2 ++ 4 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 Assets/WL/Island/WLIslandSaveSettings.cs create mode 100644 Assets/WL/Island/WLIslandSaveSettings.cs.meta diff --git a/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset index 3461f52a0..a2e0eeb7a 100644 --- a/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset +++ b/Assets/WL/Island/Resources/WL/WLIslandSaveSettings.asset @@ -9,9 +9,9 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 0} + m_Script: {fileID: 11500000, guid: 872d40f4ac576ea4eac94fce5f49fdd8, type: 3} m_Name: WLIslandSaveSettings - m_EditorClassIdentifier: Assembly-CSharp:WL.Island:WLIslandSaveSettings + m_EditorClassIdentifier: enabled_: 1 saveName: WL_Island verboseLog: 0 diff --git a/Assets/WL/Island/WLIslandSave.cs b/Assets/WL/Island/WLIslandSave.cs index e854c78a8..1bd93a481 100644 --- a/Assets/WL/Island/WLIslandSave.cs +++ b/Assets/WL/Island/WLIslandSave.cs @@ -19,25 +19,9 @@ 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; - } - } + // 🔴 `WLIslandSaveSettings`(ScriptableObject)는 **`WLIslandSaveSettings.cs` 로 분리**했다. + // 유니티는 SO 를 클래스 이름과 같은 이름의 .cs 파일에서만 MonoScript 로 인식한다 — + // 여기 있던 동안 `.asset` 의 `m_Script` 가 비어 세이브 단일화가 동작하지 않았다(816g 실측). public static class WLIslandSave { diff --git a/Assets/WL/Island/WLIslandSaveSettings.cs b/Assets/WL/Island/WLIslandSaveSettings.cs new file mode 100644 index 000000000..8efabf26c --- /dev/null +++ b/Assets/WL/Island/WLIslandSaveSettings.cs @@ -0,0 +1,36 @@ +// ───────────────────────────────────────────────────────────────────────────── +// WLIslandSaveSettings.cs — 섬 세이브 이름 고정 설정(SO). +// +// 🔴 왜 파일을 나눴나 (Lead 실측 · 2026-09-13) +// 유니티는 `ScriptableObject` 를 **클래스 이름과 같은 이름의 .cs 파일**에서만 +// `MonoScript` 로 인식한다. 이 클래스가 `WLIslandSave.cs` 안에 있던 동안에는 +// `.asset` 의 `m_Script` 가 **`{fileID: 0}`** 로 비어 저장돼 +// `Resources.Load` 가 null 을 돌려줬고, 그래서 세이브 단일화(main `33afe0b8d`)가 +// **동작하지 않았다**(816g 가 실측으로 지목: `WL_Island.dat` 가 아니라 +// `Level01.dat`/`InGame.dat` 가 생김). 파일을 분리해 바로잡는다. +// ───────────────────────────────────────────────────────────────────────────── + +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; + } + } +} diff --git a/Assets/WL/Island/WLIslandSaveSettings.cs.meta b/Assets/WL/Island/WLIslandSaveSettings.cs.meta new file mode 100644 index 000000000..3aa90b92a --- /dev/null +++ b/Assets/WL/Island/WLIslandSaveSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 872d40f4ac576ea4eac94fce5f49fdd8 \ No newline at end of file