Unreal Engine の基礎を学ぶ際には、Unreal ゲームプレイ フレームワークの仕組みを理解する必要があります。 このドキュメントでは、Parrot のゲーム モードとゲーム ステート クラスを設定する方法について説明します。
ゲーム モード
ゲーム モードは、プレイヤー数やゲームへの参加方法といった基本的なプレイのルールを定義します。 また、ゲーム ステート、プレイヤー コントローラー、HUD、デフォルトのポーン クラスといった便利なゲーム クラスを設定するためのフレームワークも提供します。
Parrot のゲーム モードを設定するには、以下の手順を実行します。
コンテンツ ブラウザで、[Content (コンテンツ)] > [Blueprints (ブループリント)] > [Game (ゲーム)] をクリックします。
ブラウザ内で右クリックし、[Blueprint Class (ブループリント クラス)] をクリックします。
親クラスを AGameModeBase に設定します。
クラス名を「BP_ParrotGameMode」にします。
新しく作成したブループリントをダブルクリックすると、定義されているコア クラスが表示されます。 Parrot の場合、以下のクラスの一部を変更する必要があります。
Game State Class を BP_ParrotGameState に設定する
Player Controller Class を BP_ParrotPlayerController に設定する
HUD Class を BP_ParrotHUD に設定する
Default Pawn Class を BP_ParrotPlayerCharacter に設定する
[Edit (編集)] > [Project Settings (プロジェクト設定)] > [Maps & Modes (マップ & モード)] に移動して、[Default GameMode (デフォルトのゲーム モード)] を BP_ParrotGameMode に設定します。
ゲーム モードの設定が完了したら、ゲーム ステートを設定できます。
ゲーム ステート
ゲーム ステートは、ゲーム内で現在何が起こっているかを管理します。 クライアントが把握する必要があるものの、特定のプレイヤーに結び付けられていない情報を管理します。 たとえば、チームのスコアをここに保存できます。
Parrot のゲーム ステートを作成するには、以下の手順を実行します。
メイン エディタで、[Tools (ツール)] > [New C++ Class... (新規 C++ クラス...)] の順に選択します。
親クラスを AGameStateBase に設定します。
クラス名を「AParrotGameState」にします。
コンテンツ ブラウザで [+Add (+追加)] > [Blueprint Class (ブループリント クラス)] の順にクリックします。
親クラスを AParrotGameState に設定します。
クラス名を「BP_ParrotGameState」にします。
ゲーム モード ブループリントで、ゲーム ステート フィールドに BP_ParrotGameState を割り当てます。
ゲーム モードとゲーム ステートの概念レビュー
ゲーム モードとゲーム ステートの詳細については、「Game Mode と Game State」を参照してください。 開発中に新しいクラスが作成されるたびに、ゲーム モードとゲーム ステートを更新することを忘れないでください。
ゲーム モードはマップごとに設定することもできます。 Parrot のメイン メニューでは、ゲーム内のレベルで使用されるゲーム モードとは異なるゲーム モードが使用されます。
ゲーム インスタンス
ゲーム インスタンスは、エンジン内の単一の永続的なクラス インスタンスであり、プロジェクト固有の機能を処理します。 アプリケーションのライフタイム中ずっと存在します。 これには、ゲームのビューポート クライアントとローカル プレイヤーが含まれています。
ゲーム モードおよびステートと同じパターンに従って、C++ の基本クラス UParrotGameInstance、ブループリント クラス BP_ParrotGameInstance を作成します。 プロジェクトのゲーム インスタンス クラスは、[Edit] > [Project Settings] > [Maps & Modes] で設定できます。
Parrot のゲーム インスタンスを作成するには、以下の手順を実行します。
メイン エディタで、[Tools (ツール)] > [New C++ Class... (新規 C++ クラス...)] の順に選択します。
親クラスを UGameInstance に設定します。
クラス名を「UParrotGameInstance」にします。
コンテンツ ブラウザで [+Add (+追加)] > [Blueprint Class (ブループリント クラス)] の順にクリックします。
親クラスを UParrotGameInstance に設定します。
クラス名を「BP_ParrotGameInstance」にします。
[Edit (編集)] > [Project Settings (プロジェクト設定)] > [Maps & Modes (マップ & モード)] に移動して、[Game Instance Class (ゲーム インスタンス クラス)] を BP_ParrotGameInstance に設定します。
レベル ストリーミングの例
Parrot では、ゲーム モードごとに異なるマップが用意されており、ゲーム インスタンスは「UParrotMapDataAsset」ファイルを使用して、どのマップをロードするかをゲームに指示します。 これらは、マップ ファイルへのソフト オブジェクト ポインタを含むデータ アセットです。 これらのアセットはゲーム インスタンス上に整理され、プレイヤーがゲームを進めるにつれて循環的に表示されます。 これはゲーム インスタンス上にあるため、いつでもどこからでも次のレベルをストリーミングできます。 プレイヤー コントローラーはゲーム ステートの変化をリッスンし、必要に応じてゲーム インスタンスを呼び出します。
以下のスクリーンショットは、Stream Level ノードと Async Load Asset ノードを使用して、ParrotMapDataAsset へのソフト オブジェクト参照を非同期的にロードするブループリントを示しています。 レベルがすでにロードされているため、同期ロードを待つことなく Open Level ノードが呼び出されます。 ここでは、CommonLoadingScreen プラグインも使用されています。 ロード画面ウィジェットは、次のマップのプリロード時に呼び出され、ポストロード時に削除されます。
ロード画面の詳細と、Parrot が同期ロードではなく非同期ロードを行う理由については、「Parrot のユーザー インターフェース」のドキュメントを参照してください。