Game Core
ゲームプレイモード
ゲームプレイを制御し、勝利条件を評価するメインスクリプトです。GameplayMode の一部として、プレイヤーのキル/デス処理やプレイヤー統計への書き込みも行います。
デスマッチ
最も基本的なゲームプレイモードで、標準的なデスマッチ機能を備えています。
エリミネーション
プレイヤーには限られたライフ数が与えられます。最後まで生き残ったプレイヤーが勝者となります。このゲームプレイモードでは、時間とともに使用可能なマップ範囲が狭まっていく小さくなっていくエリアが特徴です。
バトルロワイヤル
プレイヤーは、小さくなっていくエリアの上空を周回する飛行機内からスタートします。降下が開始されると、飛行機はアクティブなマップエリアに進入し、プレイヤーはジェットパックを使って降下・着地します。プレイヤーのライフは1回限りで、最後まで生き残った者が勝者となります。
While in the airplane, the player's input is processed by the AirplaneAgent.
エリア縮小
エリア縮小は、円形のエリアが時間の経過とともに小さくなっていく機能で、そのエリアの外に出たプレイヤーはダメージを受けます。エリア縮小は何段階か段階を踏んでだんだんと小さくなっていきます。毎回、縮小が起きる前に警告と残り時間がUIで表示されます。次に縮小が起きるまでの時間は、アクティブなプレイヤーがどれだけ残っているかで決まります。生き残っているプレイヤーが少なければ、縮小するスピードも上がります。
エリア縮小はバトルロワイヤルモードとエリミネーションモードで使える機能です。
アナウンサー
アナウンサーは、プレイヤーにマルチキルや残り時間、残っているプレイヤーなどゲーム内のイベントを知らせるシンプルなシステムです。すべてのゲームプレイモードで、プレイヤーの評価・表示方法について様々なアナウンスのセットを定義することができます。
Announcement(アナウンス) は、ゲーム内イベントを定義するスクリプタブルオブジェクトです。各アナウンスオブジェクトには独自の評価ロジックがあり、トリガーされた際にプレイヤーに表示するメッセージや再生する音声クリップが含まれています。アナウンスには優先度を設定でき、特定のチャンネルで再生されます。同じチャンネル内で複数のアナウンスが同時にトリガーされた場合は、優先度の高い方のみが表示されます。これにより、たとえば「ダブルキル」と「トリプルキル」のアナウンスが同時に発動しても、「トリプルキル」のみが表示されるようになります。
レベル生成
200人プレイに使えるレベルを作成するには時間がかかります。そこで、コードによってある程度自動的にレベルが生成されるようにしました。
すべてのレベルは、サーバーがシーンを読み込む際に指定された実行時のパラメータに基づいて生成されます。生成プロセスにはランダムな部分も含まれているため、毎回異なる内容になります。
シーンGenArea2 - GenArea 7は、Gameplay/NetworkGameゲームオブジェクトにあるパラメータ設定のみで異なります。
レベル生成の詳細は本ドキュメントの範囲外ですが、簡単に言うと、レベルはエリア(色分けされたセクション)に分割されています。全てのエリアはブロック(プリメイドプレハブ)で構成されており、ブロックはコネクタ(プレメイドプレハブ-ランプ、たくさんの箱)に繋がっています。各エリアの中心は、タワー ブロックで決まります。生成を制御する値はLevelGeneratorスクリプト内にあります。
全てのブロックでプレイヤーがスポーンされる可能性のある位置やアイテムボックスの位置を決められます。アイテムボックスはレベル生成プロセスの一環でスポーンされます。
NetworkGame
NetworkGameでは接続したプレイヤーの参加と退出を処理し、各クライアントのPlayerプレハブをスポーンします。切断したプレイヤーは保存されるため、再接続した際にはデータが回復されます。NetworkGameは初期化プロセスの間にGameplayModeをスポーンします。
SceneとSceneContext
**Scene**は、UI、カメラ、音楽、ミニマップなどのシーンごとの機能とサービス(SceneServiceからの継承)を処理します。シーンサービスはSceneから手動で更新するため、初期化、有効化、無効化、更新を好きな時に行えます。
**SceneContext**は、一般的なサービスやその他の情報が、コードベース間で必要な場合に、統計を使用せずに安全にアクセスできるようにします。シーンのコンテキストはシーンサービスに自動的に受け渡され、GameplayとNetworkObjectPoolでネットワークオブジェクトに割り当てられます。SceneContextへアクセスするには、NetworkBehaviourの代わりにContextBehaviourから継承する必要があります。
Game Core
以下の画像はアプリケーションループを図解しています。
以下の図はコアゲームスクリプトのライフスパンを現しています。