0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】GameplayAbilitySystemに自由に引数を渡したい

Last updated at Posted at 2024-10-05

はじめに

UE5から使うハードルが下がったと評されるGameplayAbility、 a.k.a. GAS。
GASに自由に引数を渡す良い方法がいまいちわからなかったのですが、SNSパワーで理解できたのでメモがてら記事にしました。

ひとこと結論

呼び出し元:SendGameplayEventToActorでGASをActivate。その際、PayloadのOptionalObjectに引数を保存したDataAssetを渡す。
GAS:"EventActivateAbilityFromEvent"ノードでPayloadを受け取る。

...
以下本編です。

対象者

  • GASの基本的な使い方を知っている人
  • DataAssetを使ったことがある人
  • Object型、Float型以外の引数をGASに渡したい人

(※Object型、Float型の引数を渡したい方はDataAssetを使わなくてもいい可能性があります。最後の「補足情報」もご覧ください!)

準備

以下の準備をお願いします。詳しい説明は先人に任せちゃいます。

  • GameplayAbilitiesプラグインの導入
    ...

  • GASの呼び出しを行うクラス(以降呼び出し元クラス)の準備

  • 呼び出し元クラスにAbilitySystemComponentを追加

  • 呼び出し元クラスに、GiveAbilityノードを実装
    ...

  • GameplayAblilityアセットの作成

  • GameplayAblilityアセットでゲームプレイタグを設定


以下の記事を手順通りにやれば、上記の項目はクリアできます。👇
良き記事ありがたや。

【本題】GASに引数を渡す方法

▼ DataAssetの作成

引数として渡したいデータを持たせたDataAssetを作成してください。
今回は、以下の名称でアセットを作成したとして説明します。

名称
PrimaryDataAsset BP_PDA_arguments
DataAsset DA_arguments

保管するデータは、

  • String型のTestMessage
  • SoundWave型のTestSound

としました。

DataAssetの作り方を超ざっくりXのポストでまとめたので、わからない方は良ければ参考にしてください。)

image.png

GASの呼び出し元クラスに、BP_PDA_arguments型の変数を用意します。
デフォルトバリューは、DA_argumentsとします。

image.png


▼ 呼び出し元クラスでのGASのActivate方法

image.png

"SendGameplayEventToActor"を使ってGASをActivateします。
PayloadのOptionalObjectに、先ほど作成したDataAssetを格納した変数をつないでください。


▼ GASの実装

image.png

"EventActivateAbilityFromEvent"に引数を用いた処理を実装できます。
EventDataからOptionalObjectを引っ張ってきて、作成したPrimaryDataAssetのクラスにCastToします。
CastTo~~のノードから引数として設定したデータをGetできます。

デフォルトだと、"EventActivateAbility"と"EventOnEndAbility"しか表示されていません。"EventActivateAbilityFromEvent"は検索して出現させてください。

GASのActivateによく使われる"TryActivateAbilitiesByTag"ノードにはPayloadを入力するピンがありません。

補足情報

① OptionalObjectは二つあるので、DataAssetを二つ引数に設定することも可能です。

② Payloadに含まれるEventMagnitudeも自由に使っていいFloat型の引数のようです。

image.png

③ 以上から、そもそも引数が「Object型の変数二つ+Float型の変数一つ」で事足りる場合はデータアセットを作る必要はありません。あとから仕様変更で足りなくなる可能性があるなら最初からDAにしといたほうが楽かも?
とはいえ、たくさんDA用意するのは、ちょい大変だから作らずに済むならそれのほうが楽かも...。

④Float型の引数だけGASで使いたい場合はGameplayAttribute・GameplayEffectのご利用もご検討ください。むしろこっちがGASの王道の実装方法なのだと思います。

おわりに

以上で、好きな引数をGASに渡してActivateすることができました!
よりスマートな方法があれば教えてくださいmm
ここまで読んでくれてありがとうございました!

参考記事

謝辞

Toyojiroさん(@Toyojiro3619)、Metasevenさん(@suramaru517)とのXでのやりとりで勉強させてもらいました。
ありがとうございました!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?