コンテンツにスキップ

がっぽり!爆走人力車

ジャンル人力車ドライビングアクション
開発期間2か月
開発人数5人
開発環境C#, Unity
プラットフォーム Xbox One, Series X|S(ストアページ)、WindowsPC( itch.ioにて配信中
担当箇所企画、リードプログラマ、人力車(プレイヤー)の挙動基礎設計&実装、バージョン管理、マルチプラットフォームでの開発管理/パブリッシング
備考東京ゲームショウ2022 神戸電子専門学校ブースにて展示

人力車の車夫として、爆走しながら次々と客をお届けするゲーム。
企画やリードプログラマなどを担当。
2か月間という短い期間のなか、5人のプログラマのみで開発。
Unityで開発し、Xbox Series X|SとWindowsPCでリリース。

シームレスで広いフィールドを、短期間で作成するために工夫をしました。

Unityエディタ拡張でレベルデザインを補助

客の配置を行いやすくするエディタ拡張

150人を超える客を配置するために、エディタを拡張しました。
「乗車位置」と「降車位置」を可視化し、
マニピュレータで直感的にそれぞれを配置できるようにしました。

また、より良いレベルデザインのために「乗車位置と後者位置を線で結ぶ」という機能も追加しました。

不正な客の配置を検出するツール

床に埋まっている、空中に浮いている、ステージ外にあるなど、
不正な配置をしてしまうという辞退が発生しました。

そこで、それらを自動で検出できるツールも、Unityエディタ拡張で作成しました。

最適化とエディタ拡張

規模が大きくてシームレスなマップなので、フレームレートの低下が大きな問題となりました。

プロファイリングの結果、マップ上の建物が特に重いことが分かりました。
マップの負荷の軽減が急務となりました。

遠景の建物を簡易な共通3Dモデルとして描画

まず、ゲーム性の都合から遠景を描画する必要があったため、LoDによる解決をしようとしました。
しかし、開発メンバーは5人のプログラマのみ、開発期間も2か月という短期間であったので、LoDモデルを作成することは現実的ではありません。

そこで、一定以上離れた距離にある家は、共通の簡易な3Dモデルとして描画しています。

(左:通常時、右:遠いとき、共通の簡易3Dモデルとして描画されている様子)

共通簡易3Dモデルのスケール情報をエディタ拡張で事前計算

建物を共通の簡易3Dモデルとして描画する際、
拡大縮小を決めるためにバウンディングボックスの情報を取得する負荷が高く、処理落ちしていました。

これは、バウンディング情報を事前計算しておくことで対策しました。

バウンディング情報を一括で計算、出力するツールを、Unityのエディタ拡張で作成しました。
実行時は、事前計算情報を参照するだけなので、処理負荷を大きく削減できます。

Xbox版とPC版の同時開発

本作は、PCに加えてXboxコンソールでもリリースしました。
開発当初から、このことを留意して開発しました。

こまめなXbox実機上での動作確認

こまめにXbox実機上でテストプレイをしました。

正しくビルドができるか等に加えて、
実機の性能は開発PCの性能に比べて低いため、処理落ちしていないか等も確認しました。

Xboxの種類ごとのスペック差への対応

Xboxの対応機種は、4つあります。

  • Xbox One
  • Xbox One X
  • Xbox Series S
  • Xbox Series X

それぞれのスペック差が大きいため、
機種名を取得して機種を判別し、
自動でグラフィックス設定を変更するようにしています。

XboxとPCでの仕様の違い

機種ごとに機能や仕様を変更した部分もあります。

C#のプリプロセッサなどを活用して、ビルド先によって実装を変更しています。

仕様が異なる箇所の例

概要 PC版 Xbox版
メニュー画面の「ゲームを終了」ボタン
DualShockとキーボードマウスへの対応
機種の判別とグラフィック設定の自動変更

複数のコントローラ種に対応したキーガイドGUI

PC版では、直近に操作したコントローラの種類を識別して、
キーガイドの表示を自動で切り替えるようにしています。

例えば、

  • キーボード&マウスを使っている間:「Esc:戻る」
  • Xboxコントローラを使っている間:「B:戻る」
  • DalShock(PS4)コントローラを使っている間:「×:戻る」

のように、いつでも自動で切り替わります。

また、私が開発に関わったゲームパッド対応のPCゲームには、すべてこの仕組みを実装しています。

コントローラ種別の識別方法については、Qiita記事にまとめています。
Unityでコントローラーの種別を識別する(InputSystem) - Qiita