UE の GameplayAbilitySystem (GAS) はとても便利です。
一方で、私はまだまだ理解も浅いです。Lyra や古代の谷などのサンプルの他に、以下のドキュメントが参照先として紹介されるのを見ることがありますが、いつも見ては忘れ、見ては忘れという感じです。
- GitHub - tranek/GASDocumentation: My understanding of Unreal Engine 5's GameplayAbilitySystem plugin with a simple multiplayer sample project.
- GASDocumentation/README.jp.md at lang-ja · sentyaanko/GASDocumentation · GitHub
以前は C++ がなければ使えないような機能があり、その当時から GAS Companion を使っていたのですが、同じ作者が Blueprint Attributes というプラグインを公開しているのを知り、今回はそれらを連携させてどういうことができるか試してみました。
Plugins
以下にマーケットプレイスのリンクと Description に加えて、公式のドキュメントとサンプルプロジェクトを一覧します。
いずれもとても丁寧に作られ、更新されていますし Discord での質問も受け付けているようです。
- https://www.unrealengine.com/marketplace/ja/product/gas-companion
Ever wanted to use GAS without any C++ knowledge ? Leveraging the power of the Gameplay Ability System, this plugin provides a starting template and a robust foundation to speed up the creation and development of GAS based projects.
- https://gascompanion.github.io/
- GitHub - GASCompanion/GASCompanionDemo: Example Project for GAS Companion Plugin and Demo Builds
- https://www.unrealengine.com/marketplace/ja/product/gameplay-blueprint-attributes
Blueprint Attributes is a plugin extension for GAS (Gameplay Ability System), fully exposing Gameplay Attributes and Attribute Sets to Blueprints.
- Home – Blueprint Attributes
- GitHub - BlueprintAttributes/GBA_ContentExamples: Sample project for Blueprint Attributes plugin
どちらも、GAS で C++ が必要な部分を Blurprint のみで実装可能にしてくれるものではありますが、それに加えて前述の GASDocumentaion で推奨されるようなパターンを考慮した形になっているようです。
今回試すこと
GAS Companion だけでも GAS を使う分には十分なのですが、Blueprint Attributes を使うことで、GAS の Attribute Set を Blueprint で作成することができます。今回はその点を中心に試していきます。
GAS Companion だけだと、https://gascompanion.github.io/api/Abilities/Attributes/GSCAttributeSet/ にある基本的な属性しか利用できず、追加するためには C++ での実装が必要になります。 とはいえ、Attributes Wizard にあるようにウィザードまで用意されているので、「やれば」的な感じではあるのですが。
実際に試す
とりあえず必要なものを揃える
BP_GASStudyCharacter
: Thirdperson をコピーしたもので、 GSCModularCharacter
に Parent を変更してあるだけです。
以下は、公式のサンプルプロジェクトに入っている Utility のコードなのですが、便利なのでとりあえずコピーします。(一番下の Home
ボタンのは私が足したので、不要だと思います)
今回は PlayerController (PC_GASStudy
) に貼りました。
まずは GAS Companion だけで Attributes を設定する
BP_GASStudyCharacter
の方に設定するだけです。 GSCAttributeSet
は GAS Companion からデフォルトで提供されています。
この状態で PIE で Enter
を押してデバッグ情報を表示すると以下のようになり、 GAS Companion が提供する AttributeSet が設定できていることが分かります。
UI を付ける
デフォルトの AttributeSet であれば、こちらもデフォルトで提供されている Widget を利用できます。今回は WB_HUD
を使いました。
上記を PC_GASStudy
に設定すると期待通り表示を確認できます。
自分で UI を作る
先ほどのデフォルトの Widget の親クラスになる GASUWHud
を継承して作成できます。
https://gascompanion.github.io/api/UI/GSCUWHud/
今回は WBP_CustomGSCUWHud
と名前を付けました。これを先ほどの WB_HUD
の代わりに入れても当然何も表示されません。
Widget の内部を作成
https://gascompanion.github.io/working-with-ui/#designing-your-own-widget
ドキュメントの通りですが、デフォルトで提供されている AttributeSet はすでに C++ 側で Text なども準備されており、それをレイアウトするだけになります。今回は Progress Bar は無視して Text 系だけ同じ名前で設定します。
これだけで以下のように UI が表示されました。現状 Max も Current も 0
なので 0 / 0
のような表示になります。
デフォルトの Attribute Set に値を入れる
https://gascompanion.github.io/quick-start/#initialization-with-data-table
ドキュメントの通りですが、Data Table を以下の構造を使って作成します。
DT_Study_Attributes
という名前にしました。内容は以下です。ここも Row Name は決まっています。
先ほどの BP_GASStudyCharacter
に設定した箇所の下に Data Table を設定できるので設定します。
設定 | 表示 |
---|---|
UI をカスタムし、自分で値を取得し表示する
さて、自動で値が設定されるのは便利なのですが、ここから Attribute を追加したいので、まずは手動で表示してみます。
https://gascompanion.github.io/api/Components/GSCCoreComponent/
そのためには上記の Component を追加する必要があります。
先程の Widget に一列追加し、手動表示の列とします。
tree | view |
---|---|
Widget 側の Construct で以下のように初期値を表示してみます。(以下は簡略化のために Health
だけです)
お気づきの通りで、 Health など、デフォルトで用意される Attribute に関しては専用の取得関数も用意されています。
以下のように最終列に手動での表示ができました。
UI をさらにカスタムして使う
先ほどは GSCUWHud
を継承して使いましたが、見てきた通りでデフォルトで提供される Attribute の Text 等がすでに入っていました。
今回はそれも入っていない GSCUserWidget
を使います。
https://gascompanion.github.io/api/UI/GSCUserWidget/
WBP_CustomGSCUserWidget
という名前にしました。とりあえず、先程の WBP_CustomGSCUWHud
の UI の内容だけコピペしておきます。
次に、スクリプトもコピーしようとしますが、Get Owning Core Component
が存在しないエラーになります。
Set Owner Actor を使う
https://gascompanion.github.io/api/UI/GSCUserWidget/#setowneractor
つまり、まだ Widget は GSCCoreComponent
を持つ Owner Actor を知らないということです。
とりあえず、Widget のコンストラクタで設定してみます。
うまくいきました。
さて、ここまでで Blueprint Attributes で新しい Attribute を追加した時に表示できそうな準備ができました。(デバッグ表示だけでも良かったのですが。)
Attribute を Blueprint Attributes で作る
コンテンツブラウザから簡単に作れます。 GBA_Study_Attributes
という名前にしました。
Armor
/ MaxArmor
を作ります。
Blueprint Attributes には Gameplay Clamped Attribute Data
が追加されており、これを利用することで簡単に最大値・最小値に clamp してくれる Attribute を作れます。
さて、この新しい Attribute Set もこれまでと同様に BP_GASStudyCharacter
に設定します。
まずはデバッグで確認しましょう。OKですね!
追加した Attribute を UI に表示する
WBP_CustomGSCUserWidget
の方で表示してみます。
UI に関しては単にグリッドの最終列に追加しました。
さて、表示ですが Health 等と違って専用の取得ノードは用意されていません。よって以下の Get Current Attribute Value
を利用します。
以下のように表示することができました!(Armor の Base 値を 60 にしてしまったので、先程と値が変わっています。)
試してみて
今回はそれぞれのプラグインについてではなく、簡単にそれぞれがうまく噛み合うか確認しました。
GAS Companion と Blueprint Attributes は作者が同じということもあり、ある程度の棲み分けも考えて作られていると思いますが、どちらか単独でも十分に機能するように作られているように思います。
記述できる場所が違う( C++ か BP か、だけでなく)けれど同じことはできるような感じです。一方でこれは GAS を UE のデフォルトだけで書くのも同じ話ではあるので、このプラグイン達を便利に感じるかどうかはチームによると思います。
個人的には、サンプルも通して GAS の使い道を考える上で勉強になることが多かったです。それほど高額なプラグインでもないので検討に値するのではないかと思います。