【個人ゲーム開発21日目】戦術SLG制作

テストプレーしながら一歩進んでは戻る日

概ね基本的な実装が完了し、ユニットや地形チップなど素材もある程度揃ったのでステージ用マップの編集や敵味方ユニットの配置など楽しいフェーズも少しづつしています。

その結果、テストプレー→気になる点やバグ発見→いろいろ対応を検討するという流れで一歩進んでは戻るみたいな感じになってます(笑)

Unityのタイルマップにて作成した地形チップをパレット登録してマップをデザインします。画面は最初のステージなので少し小さいサイズです。地形チップはまだ接続部分とか作ってないので昔のゲームのようにマスとマスがきっちり分かれる感じの見た目(笑)

それから次はステージデータの編集です。
ここではステージ登場するユニットを登録します。種類や座標など。ただ座標は数値で見てもどこらへんかわかりにくいので位置編集用のツールを作りました。なのでここではとにかく登録するだけで座標はあとから触ります。

作ったマップ(プレハブ)とステージデータをエディターツールにセットして以下の画面のようにユニットシンボルを表示させます。ドラッグ&ドロップで動かせるので直感的でいいですね。ついでに拠点座標も触れるようにしてます。

作ったステージはテストプレーして、敵が味方ユニットに到達するタイミングや有利な交戦場所など細かく調整して、評価用のターン数など検討しています。


■ 本日の開発状況

1. 敵AI移動ロジックの改善

テストプレーで一番気になったのがこれでした。

山岳など通行不可マスに隣接した位置に敵ユニットがいると、攻撃範囲に入るまでその場から全く動かなくなる問題が発生していました。

原因:
移動先の選定に直線距離(ヘックスグリッド上の最短距離)を使っていたため、障害物を考慮した経路選択が行われていませんでした。山岳を迂回するには一時的にターゲットから遠ざかる必要がありますが、「直線距離が縮まらない移動はしない」というロジックになっていたので動かなかったわけです。

対応:
経路探索(A*)を使って実際の移動コストベースで最近傍プレイヤーを選定する方式に変更しました。具体的には移動力を999に設定したGetPath()で障害物を迂回した経路を取得し、その経路を実際の移動力の範囲内で辿るという方式です。

あわせて敵AI全体の処理をコルーチン化し、1ユニットごとにフレームを譲ることでプチフリーズも解消しています。

また移動範囲外の接近探索には、ZOC(Zone of Control)判定を省略した軽量版の経路探索メソッドを新規に追加しています。移動範囲外の接近に厳密なZOC計算は不要なので、処理負荷を大幅に削減できました。

AIパターンと拠点移動の仕様も整理しました:

パターン動作
Aggressive常時移動・拠点攻略あり
TimedAggressive設定ターン経過後に行動開始
Defensive攻撃範囲に敵が入ったらトリガー発動
GroupTrigger同グループのトリガー発動後に行動
Stationaryいかなる状況でも移動しない(固定野砲など)

Stationaryは大抵、固定野砲や敵拠点上の重戦車に設定する想定です。


2. カメラズーム機能の実装

広めのマップになるとカメラスクロールだけでは全体把握がしんどいと感じたので、ズーム機能を追加しました。

仕様:

  • 5段階ズーム:50% / 75% / 100% / 150% / 200%
  • 操作:マウスホイール+右パネル下部の+−ボタン
  • ズームアウト制限:マップが画面内に収まった時点でそれ以上のズームアウトを禁止

50%まで引くとマップ全体がある程度把握できるので、戦況確認がかなり楽になりました。

実装で一番ハマったのはCanvasの扱いです。本プロジェクトはCanvasがすべてScreen Space – Cameraモードのため、カメラのOrthographicSizeを変えるとCanvasのPlaneDistanceも連動して調整しないとUIが崩れます。この対応に想定外に時間がかかりました。

また50%ズームアウト時にマップが画面に収まる場合はカメラを固定位置に設定するのですが、右パネル・下パネルを考慮した位置オフセットの計算も必要で、解像度が変わっても正しく動くようにピクセル→ワールド座標変換を使って実装しています。


3. Debugログのビルド無効化

Unity上ではデバッグ用のログを大量に仕込んでいましたが、Debug.Log()はビルドにもそのまま含まれてパフォーマンスに影響します。

ゲーム起動時に必ず実行されるInitializeシーンで、エディタ以外のビルドではDebugログを無効化する処理を追加しました。

#if !UNITY_EDITOR
    Debug.unityLogger.logEnabled = false;
#endif

シンプルですが、リリース前に忘れずやっておきたい対応です。


■ 進捗メモと今後の課題

【現在の進捗状況】

  • 敵AI移動: 経路距離ベースの移動に対応 ✅
  • カメラズーム: 5段階ズーム実装 ✅
  • 地形チップ: 平地・荒野・荒れ地・茂み・山岳(試作)対応済み
  • 次回予定: 地形チップ量産継続、ブリーフィングシーンデザイン着手

執筆後記
テストプレーを始めると「ここが気になる」「あそこも直したい」が次々出てきてキリがないですね(笑)
ただプレイフィールはゲームの第一印象を決める最重要要素だと思っているので、地味でも手触り感の改善は優先度高めで対応しています。
敵AIが障害物を迂回して動くようになっただけで、ゲームとしての説得力がぐっと上がった気がします。

【個人ゲーム開発20日目】戦術SLG制作

バグ修正・機能追加・地形チップ量産、2日間の記録

今回も2日分をまとめてお届けします。

4月2日はひたすらピクセルアート作業、4月3日はバグ修正・機能追加・マップチップの描画問題解決と、かなりボリュームのある内容になりました。


■ 4月2日の開発状況

戦闘用スプライト 全25種完了

本日の作業のほぼ全てをここに費やしました(笑)

AI生成した元ネタ画像を元に、1種あたり1〜2時間かけて手動でピクセル調整を行い、全25種のピクセル単位調整が完了しました。

ユニット構成は歩兵・バイク・装甲車・各種戦車(軽・中・重)・自走砲・野砲など25種。

作業報告書にすると数行で終わりますが、丸1日ぶっ通しの集中作業でした(笑)
ヤクトパンターを模した以下は結構お気に入りです。


■ 4月3日の開発状況

1. ZOCバグ修正(Pathfinding.cs)

移動力3のユニットが、本来敵のZOC(Zone of Control)の都合で到達できないはずの地点まで移動できてしまうバグを修正しました。

原因はZOCマスに到達した後もキューに積んでいたため、探索が続いてしまっていたことです。

ZOCマスへの到達時はキューに積まずそこで探索を止める方式に修正し、あわせてGetPath()でZOCマスが目標地点の場合に経路確定できなかったバグも同時に修正しています。

ついでに重複していたロジックをヘルパーメソッドに統合するリファクタリングも実施しました。

2. 移動キャンセル時のスプライト戻し漏れ修正(UnitController.cs)

ユニットを移動させた後にキャンセルすると、スプライトが移動用の上面図(TopView)のままになるバグを修正しました。

UndoMove()でIdleアニメーションを再開する処理が抜けていたのが原因で、1行追加するだけで解決しています。

3. 戦闘画面の描画順修正(BattleManager.cs)

大型ユニットのスプライトが表示順によって重なって見えてしまう問題を修正しました。

スポーン後に全ユニットをY座標でソートしてSiblingIndexを設定する方式に変更し、手前のユニットが常に上に描画されるようになっています。

4. ランダムタイル機能追加(TileMappingDatabase.cs / MapManager.cs)

マップチップに「ランダム表示」フラグを追加しました。

これまでマップ作成時に手動でチップを選びながら配置してランダム感を出していましたが、フラグをONにしておくだけでステージロード時に登録チップの中からランダムに1枚が選ばれて表示されるようになります。

同じ地形でも毎回微妙に見た目が変わるので、マップに自然なばらつきが出ます。手間がごそっと省けたのでかなり助かっています。

5. スプライトPivot一括変更ツール作成(SpritePivotTool.cs)

縦長チップ(立体オブジェクトが正方形からはみ出すタイプ)に対応するため、スプライトのPivotを自動計算して一括設定するエディタツールを作成しました。

  • 正方形チップ(82×82px)→ Center(0.5, 0.5)を自動設定
  • 縦長チップ(82×Npx)→ Y = 41 ÷ 実際の高さ で正方形基準のCenter相当位置を自動計算

Unityのスプライトエディターでは複数スプライトのPivot一括変更ができないため、エディタスクリプトで解決しています。

6. マップチップの描画順問題を解決

今日一番の大仕事でした。

縦長チップ(山岳など)を縦に並べると、上のマスのチップが下のマスのはみ出し部分を上書きしてしまう問題が発生していました。

調査の結果、同じスプライト同士が隣接するとUnityのバッチ処理で描画順が不定になることが原因と判明。以下の設定変更で解決しています。

  • Tilemap Renderer の Mode を Individual に変更
  • Project Settings → Graphics → Transparency Sort Mode を Custom Axis(X:0, Y:1, Z:0)に変更

この設定でY座標が低いマス(手前)ほど後から描画されるようになり、俯瞰視点として正しい描画順が実現しました。

副作用としてユニットスプライトがTilemapの下に潜り込む問題が発生しましたが、ユニットPrefabのSpriteRendererのOrder in Layerを調整することで解決しています。

この対応によって、山岳など立体感のある縦長チップを縦に並べても奥行き感が正しく表示されるようになりました。マップに厚みと説得力が出てきます。

7. 地形チップ作成・登録

茂みチップを作成しました。平地ベースに低木オブジェクトを合成する方式で、20種前後のバリエーションを用意しています。

また山岳チップの試作と動作確認も実施。上述の描画順問題が解決したことで、縦長の山岳チップも安心して量産できる目処が立ちました。

現在のTileMappingDatabase登録状況はこちらです。

地形ステータス
平地(明緑・暗緑)登録完了
荒野(明茶・暗茶)登録完了
荒れ地(明茶・暗茶)登録完了
茂み登録作業中
林・森林・深森・山岳・山脈ほか作成中

すごーく地道な作業です。
まだ異なる地形同士の接続部分について考えていないのになかなか遅々として作業が進みません。道路とかどうしよう(笑)
ただ工夫として、以下の平野の地形チップですが、濃淡で10種づつ用意しています。で、基本チップを配置したら10種の中からランダムでマップへ配置されるので、手作業によるランダム配置とかやらずに済むよう仕組みを入れました。


■ 進捗メモと今後の課題

【現在の進捗状況】

  • 戦闘用スプライト: 全25種完了 ✅
  • 地形チップ: 平地・荒野・荒れ地・茂み対応済み、残り林系・山岳系など
  • 次回予定: 林・森林・深森・山岳チップ作成、ブリーフィングシーンデザイン着手

執筆後記 マップチップの描画順問題は地味にずっと気になっていたので、解決できたのが今日一番の収穫でした。山岳チップが正しく重なって表示されるだけで、マップの見た目がぐっと本物らしくなります。地形チップの量産がまだまだ続きますが、技術的な問題が片付いたので後は手を動かすだけですね。

【個人ゲーム開発18日目】戦術SLG制作

ピクセルアートと地道な実装改善、2日間の記録

ピクセルアート作業が本格化してきました。
今回は2日分をまとめてお届けします。

コーディング的な意味での開発フェーズは一旦落ち着いて、ひたすら画像の作成と編集作業ばかりとなり、技術的には薄い内容(笑)になってます。


■ 3月31日・4月1日の開発状況

1. 戦闘画面のチームカラー色分け

戦術マップでは敵味方がカラーで区別されていましたが、戦闘演出画面ではこの色分けが反映されていませんでした。

今回、戦闘画面に配置されるユニットスプライトにもチームカラーを適用し、プレイヤー側は青系、エネミー側は赤系で統一。
戦術マップと戦闘画面で見た目に一貫性が出ました。

2. ユニット移動スプライトの不具合修正

移動中のユニット(特に敵ユニット)が、移動専用スプライトではなく待機スプライトのまま回転して表示されるバグを修正しました。

待機アニメーションのコルーチンが移動中も並走してスプライトを上書きしていたことが原因で、移動開始時にコルーチンを停止する処理を追加することで解決しています。

3. 地形情報パネルの表示改善

下部情報パネルの地形アイコン表示を改善しました。

これまでは各地形データに登録した専用アイコン画像を表示していましたが、マップチップの種類が増えるにつれてアイコンとの乖離が気になってきたため、実際にマップに配置されているチップ画像をそのまま表示する方式に変更しています。

カーソルを動かすと、そのマスに置いてある実際のチップが情報パネルにリアルタイムで表示されるようになりました。

4. ピクセルアート:2日間の成果

引き続きピクセルアートの作業を進めています。

項目ステータス
戦闘用スプライト13種 / 25種完了(+5)
マップチップ ベース6種完了
マップチップ 地形別2地形分作成完了
チップ用オブジェクトアート4枚作成

マップチップは各地形の土台となるベースチップから着手しました。
接続パターン(隣接チップとのなじみ)は後回しにして、まずは「1種類あたり最低限の見た目が成立する」状態を優先しています。

ユニットの上面図・側面図は全ユニット分のピクセルアート調整作業まで完了。
仕上がりはこんな感じです。

戦闘用のユニット画像は元ネタ(ピクセル単位の調整前)の画像は全て揃ったのですが、ピクセルアート調整作業がまだ大量に残ってます(笑)
出来た分の一部を公開。

マップチップはまだまだ時間が掛かりそうです。
画像自体は小さいのですが、マップタイルへ配置した時の異なるチップ同士の接続ビジュアル設計がなかなかしんどいです(笑)
とにかくパターンが多くなりそうなので如何に効率的な整理ができるかですね。


■ 進捗メモと今後の課題

機能面の細かい改善とピクセルアートの量産が並行して進んでいます。

【現在の進捗状況】

  • 戦闘用スプライト: 残り12種
  • 次回予定: ピクセルアート継続、ブリーフィングシーンデザイン着手

執筆後記

地形アイコンをマップチップ画像に切り替えてみたら、思いのほかゲームらしさが増した気がします。小さい改善でもプレイ感に効いてくるので、地道な作業も悪くないですね。

【個人ゲーム開発16日目】戦術SLG制作

タイトル画面完成と、ピクセルアート25種との戦い

UI周りのブラッシュアップが一段落し、ついにタイトルシーンが形になりました。

しかし、次に待ち受けていたのは「25種類のユニット素材」という物量の壁です。

■ 本日の開発状況

1. タイトルシーンの完成

セーブデータ選択およびステージ選択のウィンドウデザインを適用しました。これでゲームの「入り口」は完全に整ったことになります。

以下、セーブデータ選択ウィンドウ。

続けてステージ選択ウィンドウです。

2. 徹底的なバグ潰し

地味ながらプレイフィールに直結する修正を行いました。

  • セーブ日時の表示不具合: JsonUtilityDateTime型をシリアライズできない問題に対し、文字列保持用の変数を用意することで解決。
  • 敵AIの行動ルール厳格化: 移動後に攻撃できないはずのユニットが攻撃してくるズル(バグ)を修正。hasMovedフラグによる制御を導入しました。
  • 画面モード切り替え: 設定変更時の挙動を整理し、安定性を向上させています。

3. ユニット量産体制へ(ブリーフィングシーン着手)

本作の要となるユニットのピクセルアート制作を開始。

元ネタとなる上面図・側面図の生成は25種分完了しましたが、ここからの「ドット打ち直し(ピクセル単位の修正)」が本番です。

項目ステータス備考
元ネタ生成25種完了AIベースの素材
ドット修正済3種 / 25種残り22種
1枚あたりの工数1~2時間集中力が必要

これ1枚作るのに1時間くらい掛かる(笑)
ちまちまと作業してます。


■ 進捗メモと今後の課題

現在、ユニット1枚の修正に最大2時間を要しています。単純計算で残り22種 = 22~44時間

4月下旬のデモ版公開という目標に対し、このグラフィック作業のボリュームは無視できない数値です。

ブリーフィングシーンのデザイン実装と並行しつつ、いかに効率よく「鋼鉄の質感」をドットに落とし込めるかが鍵になりそうです。

【現在の進捗状況】

  • 目標: 4月下旬 デモ版リリース
  • 次回予定: ユニットピクセルアート修正継続、ブリーフィングシーンデザイン

執筆後記

1種修正するごとに肩が凝りますが、画面上で自作のユニットが動く姿を想像して乗り切ります。

【個人ゲーム開発15日目】戦術SLG制作

タイトル確定と多言語展開——視覚演出と内部処理の親和性

個人ゲーム開発記、2Dタクティカル『鋼鉄の交響曲 -Symphony of Steel-』の制作報告です。

本日は、本作の「顔」となるタイトルの正式決定と、それに伴う多言語リソースの制作、および演出面の実装を進めました。プライベートで用事があった為、作業量はいつもより少なくなっています。

1. 【重要】正式タイトルの確定とSteam対策

ストア展開を見据え、既存作品との重複を避けるための調査を完了し、正式名称を以下の通りに策定しました。

  • 日本語: 鋼鉄の交響曲 -Symphony of Steel-
  • 英語: Symphony of Steel -Tactical Command-
  • 中国語: 钢铁之交响 -Symphony of Steel-

サブタイトルを含めた固有の名称とすることで、ストア上での識別性を確保しています。

2. 三言語ロゴ制作と「フリンジ」問題の克服

タイトルロゴの制作は、プログラミング以上に根気と時間を要する工程となりました。

特に、透過画像の境界に不自然な白縁が残る「フリンジ」の除去に注力。Clip Studio Paintを使用し、透過境界のピクセルを許容誤差0で選択・除去するという地道な作業を3言語分行い、クリーンなロゴ画像を完成させました。

これらは自作の LocalizeImage スクリプトにより、実行環境の言語設定に合わせて自動で切り替わるよう実装済みです。

以下は3言語対応したタイトルロギイメージです。

3. タイトル画面のUI・演出強化

ユーザーが最初に目にする画面として、細部の調整を行いました。

  • UI配置の最適化: アプリケーション終了ボタンの配置とデザインを再調整。
  • DEMO版の明示: 右下に「DEMO」スタンプを配置し、現在のバージョンを視覚的に定義。
  • SE同期演出: Animation Event を活用。ロゴ出現の特定のタイミングでSEが再生されるよう、Animatorへのブリッジとなる TitleAnimationBridge.cs を新規作成しました。

4. ロード/ステージ選択機能の基礎構築

ゲームの根幹となる進行管理画面の実装の続きに着手しました。

  • 基本機能の開発は開発初期で終えており、現在は仮置きの枠・ボタンのデザインを本番用にブラッシュアップするフェーズに移行しています。

5. 本日の作業履歴まとめ

カテゴリ内容
タイトル確定3言語分の正式名称決定。Steam重複調査完了。
グラフィックタイトルロゴ作成(日・英・中)。フリンジ除去作業完了。
UI・演出終了ボタン調整、DEMOスタンプ追加。Animation EventによるSE再生。
スクリプトLocalizeImage.cs 改修(フォールバック・サイズオーバーライド対応)。
新規実装ロード/ステージ選択ウィンドウの基本ロジック構築。

6. 所感と次への課題

画像リソースの制作は想像以上に工数を消費しますが、多言語対応の基盤を初期段階で固めることは、将来的なグローバル展開において不可欠な投資であると判断しています。

残タスク:

  • ウィンドウ枠・ボタンの本番用画像作成
  • ステージ選択画面のビジュアル強化
  • 敵AI思考アルゴリズムの動作確認・調整

引き続き、理想のタクティカルSLGを目指して構築を継続します。

【個人ゲーム開発14日目】戦術SLG制作

UIデザイン一挙完成!タイトル画面刷新とサウンド演出の強化

個人ゲーム開発記、2Dタクティカル『Steel Symphony』の制作報告です。
早いものでもう新規プロジェクト立ち上げから二週間経過しました。

本日は、これまで「仮」の状態だったUIデザインを一気に本番仕様へブラッシュアップし、ゲームの没入感を高めるサウンド周りの実装を行いました。4月末のデモ版リリースに向け、視覚・聴覚ともに大きな前進です。

1. 【UI刷新】情報設計とデザインのブラッシュアップ

プレイ中の快適さを左右する各種ウィンドウのデザインが、ついに完成しました。

ユニット詳細ウィンドウの表示強化

ユニットリストから呼び出す詳細画面を大幅に強化しました。3言語対応の兵器区分表示(GetWeaponClassName)をメソッド化し、どの言語でもレイアウトが崩れず、かつ必要な情報が瞬時に目に入るデザインを実現しています。


戦術画面:システムウィンドウの強化

設定変更やタイトル戻りなどを行うシステムウィンドウも、ゲームの世界観に合わせたデザインへ。操作ロック(GameFlowController)との連動も完璧で、迷いのない操作が可能です。


戦況ウィンドウ(Sitrep)の実装

現在の勢力図や戦力値を一目で把握できる「戦況ウィンドウ」を実装。右側からのスライドイン演出とともに、戦場の緊張感を伝える重要なインターフェースが加わりました。


2. タイトル画面のブラッシュアップ

ゲームの「顔」であるタイトル画面を作り込みました。フェーズバナーの画像分離やフォントの選定(WDXL Lubrifont等)を経て、デモ版として恥ずかしくないクオリティまで引き上げています。


3. サウンド・演出基盤の構築(AudioMixer導入)

音の演出はゲームの命。今回は AudioMixer を導入し、BGMとSEの独立制御を可能にしました。

  • BGMフェード制御: 無音からSEを経て、BGMが滑らかに立ち上がる演出を実装。
  • 移動SEの実装: 4種類の移動音を使い分け、ユニットが止まれば音も即停止するキレのある制御を実現。
  • 専用マネージャー新設: SceneSoundManagerMainTacticalSEManager により、シーンごとの音響管理を効率化しました。

4. バグ改修:ZOC判定のロジックミス解決

以前から保留していた「ZOC・移動範囲のズレ」を徹底調査。原因は、六角形(ヘックス)グリッド特有のGetNeighbors()における奇偶判定ロジックの誤りでした。ここを修正したことで、タクティカルゲームの肝となる移動ルールが正常化しました。


5. 本日の作業履歴まとめ

カテゴリ内容
デザイン完了ユニットリスト、詳細、システム、サイドパネル、戦況ウィンドウ、タイトル画面。
新規実装AudioMixer導入、3言語対応兵器区分表示、移動SE制御、フェーズ別SE。
不具合修正ZOC・移動範囲・包囲判定の計算ミス解決
環境整備日本語・中国語のフォント選定確定、Noto Sansによる補完設定。

6. 所感と次への課題

UIの作り込みと機能実装を並行して大量に消化した1日でした。特にZOCの計算バグが取れたのは大きな収穫です。

4月末のデモ版リリースは、今のペースなら十分に現実的なスケジュールだと確信しています。

残タスク:

  • ボタンのホバー・クリックSEの実装
  • 敵AIの思考中アニメーション検討
  • 本番用画像への差し替え作業

引き続き、鋼鉄の交響曲(Steel Symphony)を組み上げていきます。

【個人ゲーム開発13日目】戦術SLG制作

ユニットリストUI刷新とシステム基盤の再構築。16:9レターボックス&操作ロック一元化

個人製作中の2Dタクティカル『Steel Symphony』開発記です。

ここ数日は、ビルド時の表示不具合(マゼンタ問題)という大きな壁を乗り越えつつ、ゲームの「手触り」と「堅牢さ」を一段上のステージへ引き上げる作業に没頭しました。

1. 【メイン改修】ユニットリストUIの視認性と操作性の向上

今回の作業で最も目に見えて進化したのが、戦闘中に表示されるユニットリストUIの全面的なブラッシュアップです。

見た目のビフォーアフター

これまでは機能を優先した仮素材の状態でしたが、自軍と敵軍の判別を容易にし、情報の優先度を整理しました。


仮実装では適当にImageオブジェクト、Textオブジェクトを配置して処理実装のみでしたが、見た目の調整を行いました。一覧に並べる要素(プレハブ)をしっかりデザイン。
デザインの刷新に加え、テキストエリアからはみ出す長い名称を自動で横スクロールさせる ScrollingText.cs を実装。限られたスペースでも情報を余さず伝えられるようになりました。

直感的な操作感:カメラ・カーソル連動

見た目だけでなく、リストとマップを繋ぐ「手触り」も強化しています。

  • ホバー連動: リスト上の項目にマウスを乗せるだけで、マップカメラが自動的にそのユニットを捉えます。
  • クリック連動: クリック時もカメラがユニットを中心に移動。

2. システムの必需品:3言語対応の汎用確認ダイアログ

ゲームの随所で必要となる、プレイヤーへの確認を求める汎用ダイアログ(ConfirmDialog)を実装しました。


こだわりの多言語対応

グローバル展開を見据え、日本語・英語・中国語(簡体字)の3言語に対応。「確定 / 取消」といった適切な表記をさっそく組み込み、メッセージやコールバックを動的に指定できる設計にしました。



出来上がり。バックのシステムウィンドウはまだデザイン出来てないです(笑)

3. 画面表示の最適化:16:9固定レターボックスの導入

PCゲームにおいて、プレイヤーごとに異なる解像度のモニターに対応するため、16:9固定のレターボックス表示(LetterboxCamera.cs)を導入しました。

  • 表示の安定: 全シーンのCanvasを Screen Space - Camera に変更し、カメラアセットを統一。
  • 解像度設計: 現在は 1280×720 を基本とし、製品版では 1920×1080 への引き上げを予定しています。
  • 不具合解消: 起動時に前回の画面モード(フルスクリーン/ウィンドウ)が正しく復元されない問題も併せて解決しました。

4. 堅牢な設計へ:操作ロック制御の一元化

「演出中にボタンが押せてしまう」「敵ターンなのにカメラが動かせる」といったバグを根絶するため、GameFlowControllerを新設しました。

これまで各マネージャーに散らばっていた操作可能/不可能のフラグ管理を一括管理。演出の開始・終了に合わせて、一括でプレイヤーの入力を制御できる「交通整理」の仕組みが整い、プロジェクトの堅牢さが飛躍的に高まりました。


5. 本日の作業履歴まとめ

カテゴリ内容
UI・操作性ユニットリストUI刷新、カメラセンタリング、ホバー/クリック連動、自動スクロールテキスト。
新規実装汎用確認ダイアログ(3言語)、16:9レターボックス。
環境整備操作ロック(GameFlowController)の一元化
不具合修正解像度復元バグの解決。

6. 次のステップへ

UIの基盤とシステム設計が強固になったことで、ようやく「ゲーム性」の深掘りに集中できる状態になりました。深夜まで及んだ表示バグとの死闘も、今となっては開発の足腰を強くする良い経験でした。

次は、この整ったUIの上で、本格的な戦闘バランスの微調整やスキル演出の実装を進めていきます!

【個人ゲーム開発12日目】戦術SLG制作

サイドパネル実装とグラフィック強化……のはずが、深夜のマゼンタ問題と死闘を繰り広げた1日

個人製作中の2Dタクティカルシミュレーション『Steel Symphony』開発記です。

昨日のメインテーマは「UIの完成度を高めること」と「視覚効果の強化」。サクサク進める予定でしたが、開発の神様はそう簡単に通してくれませんでした。予定外のバグ改修に時間を溶かされつつも、なんとか形にした12時間の記録です。

1. 本日のメイン:サイドパネルの実装とUI刷新

今回の作業の柱は、プレイ中の情報を一目で把握できるサイドパネルの実装です。

  • SidePanelManagerの新設: ターン数、自軍・敵軍の総戦力、ユニット残数をリアルタイムで表示。戦況バーも搭載し、どちらが優勢か視覚的にわかるようになりました。
  • ユニットリストの改良: プレイヤー用とエネミー用のPrefabを分離し、リストから各ユニットへのアクセスを容易に。
  • ウィンドウ演出の強化: 各種ウィンドウにスライドインやスケールアップのエフェクトを追加。右クリックで詳細を閉じられるようにするなど、手触りの部分を徹底的に磨きました。

    まずはスクリプトとの連携確認から始め、数値表示を段階的に仕上げていきました。

右のパネルに無事連携した数値表示を実装完了。

あとは見栄えを良くする「皮」付けて一応の完成!


2. 視覚効果の強化と「エッジスクロール」の導入

2Dゲームとしてのクオリティを一段階上げるため、操作系と演出にも手を加えました。

  • エッジスクロールの実装: 画面端にマウスを動かすとカメラが滑らかに移動する機能を導入。加速処理やUI上での無効化設定など、ストレスのない操作感を目指しました。
  • UIカーソルの連動: リスト項目をホバーした際、マップ上のターゲットを自動追従する仕組みを構築。

3. 【予定外】深夜の「マゼンタ問題」との死闘

UIの実装が一段落し、ビルド確認を行ったところで事件は起きました。戦闘背景が、開発者にとって最も恐ろしい色……「マゼンタ(ピンク)」に染まっていたのです。

泥沼の調査過程

最初はパスの間違いやResourcesフォルダの構成を疑い、数時間を調査に費やしました。しかし、真の原因はもっと根深いところにありました。

  • 原因: 2D Built-Inプロジェクトに後付けでURPを導入したことによる、レンダリングパイプラインの不整合。
  • 結末: Shader Graphがビルド環境で正常に動作していなかったため、急遽、URPに依存しない純粋なHLSLシェーダーを書き下ろすことで解決しました。 Shader Graphはエディタ上では動くものの、ビルド環境ではMainTexが正常に渡らない状態だったため、 シェーダー自体を作り直すのが最も確実な対処でした。 同じ構成(Built-inテンプレート+URP後付け)で詰まっている方の参考になれば幸いです。

不具合改修という「予定外の作業」に想定以上の時間を奪われましたが、結果としてHLSLの知識も深まり、プロジェクトの足腰は強くなった……と自分に言い聞かせています。


4. 昨日の作業履歴まとめ

カテゴリ内容
新規実装サイドパネル、戦況バー、エッジスクロール、ユニット詳細ウィンドウの連続切り替え。
改修・統合SettingsManagerを戦術画面に統合。音量・言語設定・タイトル戻り等を実装。
トラブル解決ビルド時マゼンタ問題の完全払拭。シェーダーをHLSLで再構築。
バグ修正クリック判定のズレ(透明オブジェクト干渉)解決、二重リスナー登録の解除。
環境整備Git導入(GitHub Desktop)。不測の事態に備えリポジトリ管理を開始。

5. 次のステップへ

UIの基盤とグラフィックの表示不具合がクリアになったことで、ようやく「ゲームプレイの調整」に本腰を入れられる状態になりました。

12時間ぶっ続けの作業は堪えましたが、深夜にマゼンタが消え、意図した背景が表示された瞬間の快感は個人開発ならではですね。次回は「SITREPウィンドウ」と「HELPウィンドウ」の中身を実装します。 現状は開閉だけできる空箱なので、ここに実際のゲーム情報を流し込んで 「使えるUI」に仕上げるのが直近の目標です。

個人ゲーム製作の始動に向けて

はじめに

ある程度報告できそうなレベルまで開発が進んだので、本日より、個人でのゲーム製作記録を投稿していきたいと思います。 開発は完全に一人で行う予定です。途中の挫折を防ぐためにも、ここで進捗を公開しながら完遂を目指します。

筆者のスキル・経歴について

まずは、私のバックグラウンドを簡単に紹介させていただきます。 これまでIT企業への勤務やフリーランスを経て、システム開発業務に20年以上携わってきました。実務で経験してきた主な技術スタックは以下の通りです。

  • C/C++:約7~8年
  • C# (.NET系):約5~6年
  • PHP:10年以上(フレームワークに頼らないスクラッチ開発がメイン)
  • フロントエンド:JavaScript (jQuery中心)、HTML、CSS(※CSSは少し苦手意識があります)
  • DB:PostgreSQL, MySQL, SQL Server, Oracle等。チューニングの実務経験もあり。

その他、COBOL、VB、Pythonなど、1年未満の経験を含めると膨大な行数になるため割愛しますが、OSもWindows 95/98時代から最新のWindows 11/Server系まで、Linux(Fedora, CentOS)のCUI環境を含め、幅広く触れてきました。

Unityとの再会

今回、満を持してUnityでの本格的なゲーム制作に着手しました。 実はUnity 4時代にAndroidアプリの「Hello World」レベルを触ったことはあったのですが、当時は本業の忙しさもあり、実務に直結しない技術へ深入りすることなく離れてしまいました。

最新の Unity 6 (6000.0.x) を触ってみた感想は、「昔の印象とは全くの別物」という驚きです。 ダブルバッファリング全盛期で思考が止まっている私にとって、Unityの「コンポーネント指向」という概念には、初日はなかなか馴染めませんでした(笑)。しかし、慣れてくるとその利便性の高さに圧倒されています。

開発タイトル:『鋼鉄の交響曲 -Steel Symphony-』

2026年3月15日より、戦術級シミュレーションゲームの開発を開始しました。 仮題ではありますが、タイトルは『鋼鉄の交響曲 -Steel Symphony-』。

本作は、かつてPCエンジンでリリースされた名作『ネクタリス』(海外名「Military Madness」)へのオマージュ作品を目指しています。ご存じの方もいるかもしれませんが、私はあの作品の「支援効果」と「包囲効果」が大好きでした。少数で多数を打ち破る戦術的カタルシスを、現代の環境で再現したいと考えています。

以下は開発着手から10日目のゲーム画面です。 現在はコアプログラムの実装がメインのため、グラフィックやエフェクトの多くは仮置きの状態ですが、システムとしては一通り動作する段階まで到達しました。

戦闘バランスの微調整や敵AIの高度化など、解決すべき課題は山積みですが、4月末までにはBOOTHフリーゲーム夢現にてデモ版を公開したいと考えています。

何分、完全な個人開発(ぼっち開発)ゆえ、進捗が停滞することもあるかと思いますが、温かく見守っていただければ幸いです。m(_ _)m

『ネクタリス』のような骨太なタクティカルSLGを求めている方に刺さる作品に仕上げていきます。デモ版公開に向けて爆走しますので、応援よろしくお願いします!