ゲーム概要
AcePursuit は、航空機を使ったレース/タイムサバイバル系のサンプルです。
チェックポイント、ラップ、車両選択、順位UI、開始・終了カウントダウンなど、大きめのゲームモードに必要な要素がまとまっています。
主な内容
RaceTrack、Checkpoint、Vector3でコースデータを定義。GameTypeでレースとタイムサバイバルを切り替える。TrackDataでレース全体の状態、参加者、勝者、カウントダウンを管理。PlayerProfileでプレイヤーごとの車両、ラップ、タイム、UI状態を管理。- UIクラスで車両選択、順位、ラップ数、残り時間を表示。
- SFXやWorldIconでチェックポイント通過や状態変化を見せる。
- 離脱プレイヤーや無効プレイヤーを検査し、UIや車両を片づける。
読む順番
1. コース定義を見る
最初に RaceTrack、Checkpoint、tracks の流れを見ます。
航空機レースでは、まず「どこを、どの順番で、何周するか」が重要です。チェックポイントの位置、向き、補正用のフラグをデータとして持っている点を確認してください。
2. TrackDataを見る
TrackData は、レース1本分の状態を持つ中心クラスです。
参加者、勝者、開始カウント、終了カウント、ゲーム種別、選択可能な航空機などがここに集まっています。レースが今どの段階にあるかを知りたいときは、まず TrackData を追います。
3. PlayerProfileとUIを見る
プレイヤーごとの状態は PlayerProfile に寄せられています。
車両選択、走行中のタイム、ラップ、順位、スコアボード表示はプレイヤー単位で変わります。TrackData が全体、PlayerProfile が個人、UIクラスが見せ方、という分担で読むと迷いにくいです。
4. 終了処理と離脱処理を見る
Winner、PlayerCompletedTrack、PlayerLeftGame などは、レースの終わり方を決める重要な処理です。
大きなモードほど、開始処理より終了処理の方が壊れやすいです。勝者確定、全員完走、途中離脱、UIの閉鎖、車両破棄がどの順番で行われているかを確認してください。
小技
AcePursuit は、定数が先頭付近にまとまっています。
VERSION、debugPlayer、MinimumPlayerToStart、MapPlayers、各種カウントダウン値のような調整用の値を上部に寄せておくと、テスト用ビルドの見分けやバランス調整が楽になります。
また、レースとタイムサバイバルを GameType で分けている点も参考になります。ゲーム種別が増えるときは、あちこちに条件分岐を書くのではなく、まず状態や種別を表す値を固定すると読みやすくなります。
結論
AcePursuit は、状態を持つ大きめのゲームモードを読むためのサンプルです。
最初からUIの細部に入らず、コース定義、TrackData、PlayerProfile、勝者確定、離脱処理の順に追ってください。レース以外でも、順番に目標を通過するモードや、参加者ごとの進捗を持つモードに応用できます。