【個人ゲーム開発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種完了 ✅
  • 地形チップ: 平地・荒野・荒れ地・茂み対応済み、残り林系・山岳系など
  • 次回予定: 林・森林・深森・山岳チップ作成、ブリーフィングシーンデザイン着手

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