■ 20〜23日目のまとめ
今回は4日分をまとめて記録する。
※5/13、5/16、5/17は私用にて作業お休み。
20日目はScene_Mainの操作設計確定とUI骨格整備、21〜22日目は勢力情報パネルの本実装とデータ構造の大幅整備、23日目はコマンド設計の全体確定と外交情報パネルの本実装、各種バグ修正を実施した。
メインシーンの「見る」部分がほぼ出揃い、次はいよいよ「動かす」フェーズ管理の本実装に入る段階に来ている。
■ 20日目(5/12):操作設計確定・Panel_System新規作成
コマンド入力フェーズの操作設計確定
メインシーンの状態遷移と操作制御を確定した。
Idle状態では右ドラッグでマップスクロール、マウスホイールでズーム、拠点アイコンまたは勢力地図パーツの左クリックで地図情報パネル表示状態(ViewInfo)へ遷移する。それ以外への左クリック、または無操作10秒でUIパネル表示状態(CommandInput)へ自動遷移する。
右クリックは「短押し(0.2秒以内・離し時発火)」を遷移トリガーとし、右ドラッグと明示的に分離した。ViewInfo状態ではマップ操作を禁止し、情報閲覧に専念する設計とした。
Panel_System新規作成
セーブ・オプション・タイトルバック・ズームなどのシステムボタン群をManagerMainから独立させ、Panel_System.csとして切り出した。コールバック(Action)方式でManagerMainと連携する構成で、今後の状態制御が一元化しやすくなった。
ManagerMain改修
右クリック短押し判定を実装し、_rightDraggingフラグで押し時間を計測して離し時に発火する方式とした。MapContainer自体にButtonを設置するSetupMapClickHandler()を新設し、拠点・地図パーツ以外への左クリックをフォールバック処理する仕組みにした。これにより左クリックの吸い取り問題が解消した。
またBGM設計も確定した。プレイヤー保有拠点数に応じて5段階でBGMを切り替える方式で、使用素材はperitune.com(無料・商用利用可・ゲーム同梱可)を予定している。
■ 21〜22日目(5/14〜5/15):勢力情報パネル本実装・OfficerSaveData導入
Panel_FactionDetailInfo本実装
地図上の拠点または勢力地図パーツをクリックしたときに表示される勢力情報パネルを本実装した。表示項目は勢力名・勢力カラー・君主情報(顔小画像・名前)・各種ステータス(資金・兵数・国力・訓練度・民忠誠度・諜報力・名声・拠点数)・友好度・信頼度。
諜報レベルによる情報フィルタリングをGameUtility.GetIntelligenceLevel()として実装した。レベルに応じて閲覧できる情報が段階的に開放される。
- レベル0:勢力名・拠点数のみ
- レベル1:国力・君主情報(顔・名前)
- レベル2:資金・兵数・民忠・名声
- レベル3:全情報(訓練度・諜報力・外交情報)
プレイヤー自身の勢力はフィルタリングなし(レベル3扱い)。数値・記号専用のテキストはLocalizeTextを使用せずTextMeshProUGUI直接参照とする方針を今回から徹底している。
OfficerSaveData新設・全ファイル対応
武将データの管理構造を大幅に整理した。従来のSubordinateIds/CustomSubordinateIds(IDリスト2本)を廃止し、OfficerSaveDataクラスに統合した。MonarchId/CustomMonarchIdも廃止してOfficerSaveData Monarchに一本化した。
フィールド構成はOfficerId / CustomId / CurrentLoyalty / IsNormalの4つで、通常武将とカスタム武将を同一クラスで扱える。武将の解決はGameUtility.ResolveOfficer()経由で行う運用を徹底する。
対応ファイルはSaveDataGame.cs / GameUtility.cs / Panel_FactionDetailInfo.cs / ManagerStart.cs / DebugSaveDataCreator.csの5ファイル。構造変更に合わせてgame.jsonも再生成し、動作確認まで完了した。
Panel_FactionDetailInfoOfficer本実装
サブパネルとして武将一覧を表示するPanel_FactionDetailInfoOfficer.csを本実装した。表示枠は10枠固定(君主1名+配下最大9名)。
1枠を担当するOfficerSimpleInfo.csを新規作成した。表示項目は顔小画像・兵科アイコン・武将名・忠誠度・特技・武力/知力/魅力。君主の忠誠度は常に「—」で固定。配下の忠誠度は諜報レベル3以上またはプレイヤー勢力の場合に数値表示、それ以外は「???」でマスクする。
■ 23日目(5/18):コマンド設計確定・外交情報パネル本実装・バグ修正
コマンド設計確定
CommandType enumをGameEnums.csに追加し、全コマンド体系を確定した。
- 内政系:開発 / 施し / 徴発
- 軍事系:出陣 / 徴兵 / 募兵 / 訓練 / 迎撃
- 外交系:同盟 / 親睦 / 要請 / 破棄
- 人事系:捜索
- 謀略系:諜報 / 計略 / 引抜
- 援軍系:援軍出陣 / 援軍迎撃
解雇・褒賞はコマンドクラス管理外で即時処理、迎撃・援軍はWarクラスで別途管理する設計とした。要請コマンドは同盟勢力全員へ自動送信(個別指定不要)。出陣は経路指定方式(OriginBastionId+TargetBastionId)で戦争の一意特定を行う。
ランタイム用のOfficerCommand.csを新規作成し、セーブ用のOfficerCommandSaveDataをSaveDataGame.csに追加した。GameSaveSlot.PlayerCommandsでターン中断セーブに対応、GameSaveSlot.UnlockedSubordinateSlotsで開放済み配下枠数を永続管理する。
Panel_FactionDetailInfoDiplomacy本実装
外交情報サブパネルを本実装した。表示枠は9枠固定で敗北済み勢力を除外して表示する。
1枠を担当するDiplomacySimpleInfo.csを新規作成した。表示項目は勢力名・同盟有無・友好度(数値+段階テキスト)・信頼度(数値+段階テキスト)。このパネルは外交ボタン自体が諜報レベル3でのみ開放される前提のため、表示はレベル3固定とした。
信頼度の段階テキストを今回確定した。友好度とは別定義で以下の通り。
| 数値 | 日本語 | 英語 |
|---|---|---|
| 0〜19 | 敵視 | Hostile |
| 20〜39 | 不信 | Suspicious |
| 40〜59 | 中立 | Neutral |
| 60〜79 | 好意 | Trusting |
| 80〜99 | 信頼 | Devoted |
| 100 | 信任 | Absolute |
多言語対応改善
マスクテキストを言語依存のGetMaskText()メソッドに変更した。日本語は「???」、英語以降は半角「???」を返す。数値テキスト向けのマスクはMaskTextNumeric定数(半角「???」固定)に統一した。
Panel_Commands・Panel_CommandInterface実装
旧Panel_OfficerCommandCard.csをOfficerCommandCard.csに置き換えた。CardStateはEmpty / Locked / Idle / Doneの4種で、空席・ロック状態は顔画像欄に専用画像を表示する方式とした。
Panel_CommandInterface.csをモック実装した。ShowInput()(コマンド入力モード)とShowReadOnly()(閲覧専用モード)を実装し、onCloseコールバックに対応した。
バグ修正
今回は4件のバグを修正した。
- ロードゲーム→タイトル→新規ゲームでロードデータが残留する問題:ManagerMain.Start()でNewGameData.Clear()が呼ばれていなかったのが原因。ロード・新規どちらのルートでも呼ぶよう修正した。
- Panel_CommandInterface初期表示バグ:InitializeUI()でHideImmediate()の呼び出しが重複・漏れていたのが原因。
- ViewCommandInterface状態から右クリックで戻れないバグ:Update冒頭のisViewCommandInterface変数が未定義だったのが原因。
- Panel_CommandInterface閉じるボタンで状態遷移しないバグ:onCloseコールバック未実装・_onCardClick誤呼び出しが原因。Panel_Commands側にonCommandInterfaceCloseコールバックを追加し、ManagerMain側でViewCommands状態への遷移を統一した。
■ 現時点の開発状況
| カテゴリ | 状況 |
|---|---|
| データクラス全般 | ✅ 完了 |
| GameUtility | ✅ 完了 |
| Scene_Initialize | ✅ 完了 |
| Scene_Title | ✅ 完成 |
| Scene_Start | ✅ 完了 |
| Scene_Main(地図表示・スクロール・ズーム) | ✅ 完了 |
| Scene_Main(勢力情報パネル) | ✅ 完了 |
| Scene_Main(武将コマンドパネル) | ✅ 完了 |
| Scene_Main(コマンド設計) | ✅ 確定 |
| Scene_Main(フェーズ管理・コマンド入力) | ⬜ 未実装 |
| Scene_Main(戦闘計算・AI) | ⬜ 未実装 |
| Scene_End | ⬜ 未着手 |
■ 次回の作業予定
フェーズ管理の本実装に入る。1ターンを7フェーズで構成する設計はすでに確定しており、コマンド入力フェーズと結果表示フェーズの流れを繋ぐところから着手する予定。


































