Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE5 Game Featuresで簡単に依存関係なしのコンポーネントを作ってみる

今回もUE5についての解説記事です。

UE5に搭載される新機能で、Game Features & Modular Gameplayというものがあります。

docs.unrealengine.com

ドキュメントによると以下が概要となっています。

これらのプラグインを使用した機能を作成すると、プロジェクトのコードベースを明確で読み取りやすい状態に維持し、さらに無関係の機能同士の予期しないインタラクションや依存関係を回避するなど、複数のメリットがあります。これは、時間の経過とともに機能セットが変化するライブ製品を開発する場合に特に重要です。

今ひとつわかりにくい!まぁ要約すると、

プロジェクトとは完全に独立した依存関係が全くない何らかの機能を簡単に追加、削除することができる機能

ということです。

実際に触ってみるのが一番はやいですね。では早速使ってみましょう。今回はUE5 EA版を利用しています。

プラグインの有効化

まずはプラグインを有効化します。

f:id:alwei:20211127235421p:plain

Game FeaturesModular Gameplay を有効化してエディターを再起動してください。

エディターを再起動すると以下のようなメッセージのエラーが表示されます。

f:id:alwei:20211127235707p:plain

PrimaryAssetTypesToScanにエントリを追加しますか? と表示されますので、そのままクリックすると追加が行われて次からエラーは表示されなくなります。これで準備が完了です。

Featuresプラグインの作成

Game Featuresを利用するためにはプラグインを自作する必要があります。プラグインといってもC++コードを書くわけではないので大丈夫です。メニューから再度プラグインページを開いて、右下にある新しいプラグインを選択するとウィンドウが開きますので、ゲーム機能(コンテンツのみ)を選択して、プラグイン名を入力して、プラグインを作成を選択してください。

f:id:alwei:20211128000410p:plain

これでGame Features用プラグインが作成されました。作成するとプラグインのフォルダー内にデータアセットが1つ自動的に作成されますので、これでプラグインとして利用可能な状態になります。

f:id:alwei:20211128000722p:plain

Features用コンポーネントを作成

では自作Game Featuresプラグイン内にBPコンポーネントを普通に1つ作成してみます。ここでは BPC_Test というActorコンポーネントを1つ作成し、中身は5秒経過後にオーナーとなるアクターが爆発するという単純なものです。

f:id:alwei:20211128001024p:plain

これでGame Features用のコンポーネントが用意できました。

f:id:alwei:20211128001201p:plain

プロジェクト側で使えるようにする

今度はプロジェクト側で用意しているアクターにこのコンポーネントを使えるようにします。今回はみんなよく使う、ThirdPersonCharacterのBP上にこのコンポーネントを追加します。

f:id:alwei:20211128001607p:plain

BeginPlayからAdd ReceiverというノードをGame Framework Component Managerというサブシステムから呼び出します。画像をみてもわかるようにコンポーネントは実際には追加されず、依存関係も発生しません。つまりThirdPersonCharacterのBPには何も追加の依存関係が発生しないことになります。これでBP側の準備が整い実際に使える状態になりました。

データアセットを設定

最後にプラグイン作成時に追加されたデータアセットを開きます。ここにアクションと呼ばれるものを追加していきます。

f:id:alwei:20211128002627p:plain

アクションにはいくつかプリセットが用意されています。この中でもAdd Componentsは使いやすくすぐに利用可能です。追加後に更にComponent Listを1つ追加し、Actor ClassとComponent Classを選択します。これでアクターに対してコンポーネントを追加できるようになりました。

ちなみにアクションC++を使ってコードを書くことで完全に独自のアクションを追加できるので、コンポーネントに限らずあらゆるものを追加可能となっており、UE5の古代の谷プロジェクトでは具体的なサンプルも用意されているのでカスタムアクションが必要になればぜひ参考にしてみましょう。

データアセット上部にある、初期状態現在の状態というものがありますが、これはプラグインとしてどのようになっているかという状態を示しています。それぞれ以下のようになっています。

  • インストール済みプラグインがインストールされているのみの状態
  • 登録済みプラグインが登録され、コンテンツブラウザーにも表示される状態
  • ロード済み → 実際にメモリー上に読み込まれた状態
  • 有効 → 実際にノードなどで機能が呼び出せるようになった状態

この中で実際にGame Featuresのコンテンツが使えるようになっているのは有効の状態のみです。他の3つは見えていても実際に利用することはできませんので注意してください。

動作チェック

実際に動作しているところをチェックしましょう。

ThirdPersonCharacterには直接コンポーネントを追加していませんが、ちゃんと爆発処理が呼び出されていることがわかります。更に現在の状態をインストール済みに切り替えた場合、この爆発処理自体が呼び出されなくなっていることもわかります。上手く動いてますね!

このようにプロジェクト側からはGame Features側の情報を一切参照していないのにも関わらず、新しい機能を外部から追加できていることがわかります。機能をオンオフすることも非常に簡単です。これは非常に強力な機能だということがわかります。うまく使えば依存関係ないままでどんどん新機能を追加していくことが可能ですし、取り外しも容易なので色んな使い方ができるはずです。

UE5ではこの強力なGame Featuresという新機能が使えますので、ぜひUE5を使っている人、使ってみようという人は使ってみましょう!