■ 10〜11日目のまとめ
今回は2日分をまとめて記録する。
10日目はScene_Startの基本実装が中心。勢力選択から確定まで一通りのUIフローが動くようになった。11日目はそこに機能を追加しつつ、データ設計の抜け漏れを潰した。
■ 10日目:Scene_Start 基本実装
勢力選択・確定フロー
Scene_Startのメインとなる画面遷移を実装した。
世界地図上の拠点アイコンをクリックするとPanel_FactionInfoが表示され、勢力の基本情報を確認できる。そこから「選択」を押すとPanel_FactionConfirmに遷移し、君主・配下武将のカード表示、各種変更ボタンが並ぶ確定ウィンドウになる。
拠点表示モードと勢力図モードの切り替えも実装済み。勢力図モードはalphaHitTestMinimumThresholdで透過部分のクリック判定を除外している。

状態管理
6状態のEnumで一元管理している。
Idle / FactionInfo / FactionConfirm / OfficerSelect / FaceImageSelect / ErrorDialog
状態によって操作可否を切り替える設計で、後の機能追加時にも拡張しやすい構造にした。
OfficerCard Prefab
武将カードUIをPrefab化してCommonに配置した。勢力確定ウィンドウと武将選択ダイアログで共用する。顔絵・名前・兵科・特技・三能力値を表示する。

■ 11日目:機能追加とデータ設計
配下武将変更ボタン
Panel_FactionConfirmの配下武将カード下部にボタンを配置した。
ScrollViewの配下カード列と並列にPanel_SubChangeButtonsを置き、配下数に応じてボタンをInstantiateする方式にした。LayoutGroupの動的生成でいくつか試行錯誤があったが、ラッパー構造は使わず並列配置で解決した。後でデザインボタンに差し替える予定なので、ボタンはPrefab(OfficerChangeButton)から生成する設計にしている。
君主画像差し替え機能
顔変更ボタンから起動する画像取り込みウィンドウを実装した。
Panel_ImageImportはCommon配置のPrefabで、カスタム武将登録でも流用できる設計にしている。OSのファイル選択ダイアログにはStandaloneFileBrowserを使用した。取り込んだ画像は512×768にリサイズし、上部384×384を顔絵として自動切り出しする。
対応フォーマット:PNG / JPG / JPEG
最大ファイルサイズ:10MB
出力サイズ(立ち絵):512×768
出力サイズ(顔絵):384×384(上部中央クロップ)
画像処理はImageImporter.csとして共通化した。

勢力名・君主名の編集機能
Panel_FactionEditを新規作成した。勢力確定ウィンドウの「勢力編集」ボタンから開き、勢力名と君主名をその場で変更できる。
文字数制限は以下で確定した。
| 項目 | 日本語 | 英語 |
|---|---|---|
| 武将名 | 15文字 | 19文字 |
| 勢力名 | 10文字 | 25文字 |
この制限値は武将登録画面でも共通仕様となる。

SaveDataRecord の新規設計
アプリ通算の実績データクラスを新規に設計・実装した。
これまでセーブデータはSaveDataSystem(設定)とSaveDataGame(プレイ進行)の2種類だったが、コレクション解放状況やカスタム武将管理のためにSaveDataRecordを追加した。SaveDataCustomOfficerとして別管理を検討していたが、ファイルを増やしたくないという方針からSaveDataRecordに統合した。
| フィールド | 内容 |
|---|---|
| areaClearRecords | エリア戦クリア記録(シナリオIDごと) |
| nationalClearCount | 全国版クリア回数 |
| unlockedOfficerIds | コレクション解放済み武将IDリスト |
| customOfficerSlotCount | カスタム武将スロット上限 |
| customOfficers | 登録済みカスタム武将リスト |
バージョンマイグレーション機構も組み込んだ。アップデートでフィールドを追加した場合は、ロード時に旧バージョンのデータを自動補完する。
ManagerSaveData の拡張
SaveDataSystem・SaveDataRecordの両方を同じ初期化フローで管理するように整理した。初回起動判定はisInitializedフラグで行い、ファイルパスの参照はManagerSaveData内に集約している。
ユーティリティメソッドも追加した。
IsNationalScenarioUnlocked() // 全国版解放判定
IsAreaCleared(scenarioId) // 指定シナリオのクリア判定
CalcCustomOfficerSlotCount() // スロット上限の算出
Scene_Title:状態管理の刷新
TitleSceneState EnumをManagerTitle.csに導入した。これまでboolを複数管理していたが、Enumに一元化して各ボタンイベントに状態チェックを入れた。状態の階層構造は以下の通り。
Opening → WaitingInput → MainMenu(起点)
├ ScenarioSelect → DifficultySelect → StartScene遷移
├ Collection
├ ForgeOfficer
├ LoadGame
└ Option
同一レベル間の平行移動はなし、戻るは常に1レベル上へ、という設計で統一している。
Panel_Scenario.cs 新規作成
シナリオ選択パネルの専用スクリプトを作成した。シナリオ名のテキスト表示(LocalizeText使用)と、全国版ボタンの有効/無効制御を実装している。全国版かどうかの判定はIsNationalScenarioフラグで行い、シナリオIDのマジックナンバーは使用していない。キャンセルボタンも追加した。
今回からパネルごとに専用スクリプト1本という方針を確立した。
■ 現時点の開発状況
| カテゴリ | 状況 |
|---|---|
| データクラス全般 | ✅ 完了 |
| SaveDataRecord | ✅ 新規完了 |
| Scene_Initialize | ✅ 完了 |
| Scene_Title(基本) | ✅ 完了 |
| Scene_Title(Collection・ForgeOfficer・LoadGame) | 🔶 未実装 |
| Scene_Start(基本UI) | ✅ 完了 |
| Scene_Start(武将選択・遷移) | 🔶 未実装 |
| Scene_Main | ⬜ 未着手 |
■ 次回の作業予定
タイトルシーンの残実装(Collection・ForgeOfficer・LoadGame)を優先して進める。Scene_Startのスタートボタン遷移はその後。
