ゲームコア

ゲームプレイモード
ゲームプレイを制御し、勝利条件を評価するメインスクリプトです。GameplayMode
の一部として、プレイヤーのkill/deathの処理とプレイヤーの統計への書き込みがあります。
デスマッチ
標準的なデスマッチ機能を持つ、最も基本的なゲームプレイモードです。
消去法
プレイヤーは限られた数のライフを持っています。最後に立っていたプレイヤーが勝利します。このゲームモードは、時間経過とともに使用可能なマップスペースが減少するShrinking Areaを備えています。

バトルロワイヤル
プレイヤーは、縮小エリアを周回する飛行機でスタートします。降下開始後、飛行機はアクティブマップエリアに入り、プレイヤーはジェットパックで降下・着陸することができます。プレイヤーのライフは1つだけで、最後に立っていた人が勝ちとなります。
飛行機に乗っている間、プレイヤーの入力は AirplaneAgent
によって処理さ れます。

縮小エリア
縮小エリアは、時間経過で縮小する円形の領域で、この領域の外側にいるプレイヤーにダメージを与えます。縮小は複数のステップで行われます。各ステップの前に、警告と残り時間がUIに表示されます。縮小ステップ間の時間は、アクティブなプレイヤー数に基づいています - 生きているプレイヤーが少ないほど、エリアは早く縮小します。

バトルロイヤル、エリミネーションモードでは、縮小エリアが有効になります。
Announcer
Announcer
は、マルチキル、残り時間、残りプレイヤー数などのゲーム内イベントをプレイヤーに通知するシンプルなシステムです。すべてのゲームプレイモードで、評価されプレイヤーに提示されるアナウンスのセットを定義できます。

アナウンスメント
(Announcement)はスクリプト可能なオブジェクトで、ゲーム内のイベントを定義します。すべてのアナウンスメントオブジェクトはカスタム評価ロジックを持ち、トリガーされたときにプレイヤーに表示されるべきメッセージやオーディオクリップを含んでいます。アナウンスメントには異なる優先順位があり、特定のチャンネルで再生することができます。同じチャンネルにある2つのアナウンスが同時にトリガーされた場合、プライオリティの高い方だけが表示されます。これにより、例えばダブルキルとトリプルキルの両方のアナウンスが起動されていても、トリプルキルのアナウンスだけが表示されるようになります。
レベル生成
200人のプレイヤーに対して意味のあるレベルを作成するのは時間がかかるため、コードによる半手順のレベル生成を採用しました。

すべてのレベルは、サーバーがシーンを読み込むときに、実行時に指定されたパラメータを基に生成されます。生成プロセスにはランダム性が含まれるため、実行ごとに異なります。
シーン GenArea2
- GenArea 7
は、Gameplay/NetworkGame
ゲームオブジェクトにあるパラメータセットアップが異なるだけです。

レベル生成の詳細はこのドキュメントの範囲外ですが、簡単に言うと、レベルはエリア(色のついたセクション)に分かれています。各エリアはブロック(あらかじめ用意されたプレハブ)で構成され、ブロックはコネクター(あらかじめ用意されたプレハブ - ランプ、箱の山)で接続されます。各エリアの中心は、特別なタワーブロックによって定義されます。生成を制御する値は LevelGenerator
スクリプトで見つけることができます。

すべてのブロックは、プレイヤーのスポーン可能な位置とアイテムボックスの位置を定義することができます。アイテムボックスは、生成プロセスの一部としてレベルにスポーンされます。
NetworkGame
NetworkGame は、接続されたプレイヤーの参加と離脱を処理し、各クライアントに Player
プレハブを生成します。切断されたプレイヤーは保存され、再接続の際にデータを復元することができます。NetworkGameは初期化時にGameplayMode
を生成します。
Scene & SceneContext
Scene
は、UI、カメラ、音楽、ミニマップなど、シーン固有の機能やサービス (SceneService
) を扱います。シーンサービスは Scene
から手動で更新されるため、いつでも初期化、アクティブ化、非アクティブ化、更新を行うことができます。
SceneContext
は、コードベース全体で必要とされる共通のサービスやその他の情報に対して、静的な情報を使用せずに安全にアクセスできるようにします。シーンコンテキストは自動的にシーンサービスに渡され、Gameplay
と NetworkObjectPool
にあるネットワークオブジェクトに割り当てられます。SceneContext
にアクセスするには、NetworkBehaviour
と SimulationBehaviour
ではなく、ContextBehaviour
と ContextSimulationBehaviour
を継承することが必要です。
ゲームコア
次の画像は、アプリケーションのループを表しています。

次の図は、コアゲームスクリプトの寿命を示しています。
