[WL-816] 섬 세이브를 경로 무관 단일 파일로 고정 + 기존 세이브 초기화 (#816)

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 <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-09-13 14:39:21 +09:00
parent 840655c06c
commit 33afe0b8dc
5 changed files with 82 additions and 1 deletions

View File

@ -116,7 +116,7 @@ namespace CryingSnow.FarmingIsland
}
ItemDatabase.Initialize();
saveFileName = SceneManager.GetActiveScene().name;
saveFileName = WL.Island.WLIslandSave.ResolveSaveName(SceneManager.GetActiveScene().name); // WL-816: 경로마다 세이브가 갈리지 않게 이름 고정(끄면 원래대로)
LoadGameData();
}

View File

@ -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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1c09323f591e60f468e7943fb8c6bcb5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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<WLIslandSaveSettings>("WL/WLIslandSaveSettings");
return s_cache;
}
}
public static class WLIslandSave
{
/// <summary>`IslandManager.Awake` 의 1줄 훅이 부른다. 끄면 받은 값을 그대로 돌려준다.</summary>
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;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 45775bcbefc66bd43877386c53c1a0ef