Game Features プラグインと Modular Gameplay プラグインをプロジェクトで利用すると、デベロッパーはスタンドアローン機能を作成できます。これらのプラグインを使用した機能を作成すると、次の利点があります。
-
プロジェクトのコードベースを明確で読み取りやすい状態に保つことができる。
-
無関係の機能同士の予期しないインタラクションや依存関係を回避できる。これは、時間の経過とともに機能セットが変化するライブ製品を開発する場合に特に重要です。
セットアップ
次の手順を実行すると、プロジェクトに 1 つまたは複数のスタンドアローンのプラグインベースの機能を追加することができます。まず Game Features プラグインと Modular Gameplay プラグインを有効にする必要があります。
-
Unreal Engine で、[Edit (編集)] > [Plugins (プラグイン)] に移動します。[Plugins] ウィンドウが開いたら、Game Features プラグインと Modular Gameplay プラグインを見つけて、有効化します。
Game Features プラグインと Modular Gameplay プラグインは、どちらも [Gameplay (ゲームプレイ)] カテゴリにあります。
-
これらのプラグインを有効にすると、エディタの再起動が必要というメッセージが表示されます。[Restart Now (今すぐ再起動)] をクリックします。
-
エディタが再起動したら、[Plugins] ウィンドウに移動し、[Add (追加)] をクリックして [New Plugin (新規プラグイン)] ウィンドウを起動します。
- ビルドする機能を含む新しいプラグインを作成します。[Game Feature(Content Only) (ゲーム機能 (コンテンツのみ))] を選択し、プラグインに名前を付けます。
-
コンテンツ ブラウザ を使用して、このプラグインの最上位のコンテンツ フォルダに移動します。プラグインがプロジェクトの「
/Plugins/GameFeatures/
」ディレクトリに保存されることを確認します。この例では、プラグインに「MyStandAloneFeature」という名前を付けました。
- [Asset (アセット)] パネルを右クリックして表示されるコンテキスト メニューの [Miscellaneous (その他)] を開き、[Data Asset (データ アセット)] を選択して、新しい データ アセットを作成します。クラスのリストから
GameFeatureData
を選択し、プラグインに付けた名前と同じ名前を付けます。
以上の手順が完了したら、エンジン (またはエディタ) の起動時にスタンドアローン機能がロードされるように設定されます。これで、機能自体の開発と、その機能を実装する アクション の追加を開始できます。アクションには、次の 4 つのタイプがあります。
ゲーム機能のアクション
スタンドアローン機能が、エンジンの起動時にロードされるように設定されたので、機能の開発と、その機能を実装する アクション の追加に進みます。
アクション | 説明 |
---|---|
Add Cheats (チートを追加) | 新しい「チート コード」を作成したり、既存のチート コードを拡張することで、Cheat Manager を拡張します。チート コードはデバッグの際に役立ちますが、シッピング ビルドからは自動的に削除されます。~ (チルダ) キーを押すとコンソールが開き、プロジェクトの実行中にこれらのチート コードを入力することができます。 |
Add Components (コンポーネントを追加) | アクタのサブクラスのリストを受け取り、オプトイン ベースでコンポーネントのセットを追加します。コンポーネントはさまざまな動作をカプセル化するのに適しているため、これは Game Features プラグインおよび Modular Gameplay プラグインを使用する最も一般的な方法です。 |
Add Data Registry (データ レジストリを追加) | 1 つまたは複数の データ レジストリ をプロジェクトに追加します。データ レジストリでは、グローバルに登録されたデータを効率的に格納および取得できます。 |
Add Data Registry Source (データ レジストリ ソースを追加) | 既存のデータ レジストリに 1 つまたは複数の データ テーブル を追加します。 |
Add World Partition Content (ワールド パーティション コンテンツを追加) | 機能に [Add World Partition Content (ワールド パーティション コンテンツを追加)] を追加します。 |
アクションを追加する
アクションを追加するには、先程作成したデータ アセットを開きます。[Actions (アクション)] カテゴリを展開すると、[Actions] という配列が表示されます。その配列に要素を追加して、その要素を該当するアクション タイプに設定します。各アクション タイプの詳細については、以降のセクションで説明します。
この図は、各アクション タイプが 1 つずつ設定されています。アクションは、どのプラグインにも必要に応じていくつでも設定できます。
チートを追加する
[Add Cheats] アクションでは、Cheat Manager Extension をゲームに登録します。デベロッパーがスタンドアローン機能の一部として独自のデバッグ コマンド (または「チート コード」) を作成し、その機能が有効なときはいつでもそのコマンドを使用できるようになります。
Cheat Manager および Cheat Manager Extensions はデバッグ ツールであるため、シッピング ビルドではインスタンス化されません。
コンポーネントを追加する
[Add Components] アクションは、提供したアクタとコンポーネント クラスのペアのリストを確認して、各コンポーネントのインスタンスをそれぞれ一致するアクタへの追加を試行します。コンポーネントをクライアント、サーバー、またはその両方に追加するかどうかを指定することができます。デフォルトでは、コンポーネントはクライアントとサーバーの両方に追加されます。
プラグイン内で機能が完全にカプセル化された状態を維持するために、追加するコンポーネントはプラグイン自体から派生させます。Actor クラスは Pawn などのビルトインのエンジン クラス、または典型的な MyPawn などのエンジン クラスのプロジェクト固有の子になります。コンポーネントは、機能に関連するすべてのプログラム ロジックとデータ ストレージを処理する必要があります。
プロジェクトの Actor サブクラスとの必要なインタラクションをできる限り少なくすると、その機能を別のプロジェクトで簡単に実装できるようになります。
Add Components アクションに基本の Actor クラスを使用することはサポートされていないため、アクションのその部分は無視されます。代わりに、コンポーネントを必要とする Actor サブクラスの最も狭いサブセットを特定し、そのクラスを指定することをお勧めします。コンポーネントを受け取る必要のあるクラスが複数あり、それらが共通の親を持たない場合は、適切な基本クラスをすべてカバーするために複数の Add Components アクションを設定することができます。
Add Components Action からコンポーネントを受け取るには、アクタは通常 Begin Play イベントで Game Framework Component Manager を使ってそれ自体を登録する必要があります。これを行うには、グローバルの Game Framework Component Manager を取得し、 Add Receiver 関数を呼び出して、アクタを Receiver パラメータに渡します。アクティブな Game Features の数に関係なく、アクタに必要な Add Receiver コールは 1 つです。Game Features に関連付けられたすべてのコンポーネントは、Game Framework Component Manager の Remove Receiver 関数を使用してアクタから取り除きます。

アクタの Begin Play でコンポーネントを受け取るための登録。
Add Components Actions からコンポーネントを受け取るには、アクタは自分自身を UGameFrameworkComponentManager
シングルトン インスタンスに登録し、自分自身を AddReceiver
関数を渡す必要があります。これは通常 BeginPlay
で行われます。コードは次のようになります。
if (UGameFrameworkComponentManager* ComponentManager = GetGameInstance()->GetSubsystem<UGameFrameworkComponentManager>())
{
ComponentManager->AddReceiver(this);
}
データ レジストリを追加する
Add Data Registry アクションは、データ レジストリ全体をプロジェクトに追加できます。追加する Data Registry アセットのパスを指定してアクションを構成します。データ レジストリの詳細については「データ レジストリ」ページを参照してください。
データ レジストリ ソースを追加する
データ レジストリにストリーミングするデータ ソースを追加するには、Add Data Registry Source アクションを使用します。各データ ソースへのパス、それらをロードするデータ レジストリの名前、関連する優先度と使用フラグを設定する必要があります。起動時にゲーム機能がロードされると、該当する識別子がドロップダウン リストに表示されます。詳細については、データ レジストリ ページの「データ レジストリ ソース」を参照してください。