情報は力ではない

UE4 とか Blender とか。

Gameplay Ability System のデバッグ HUD について

この記事は Unreal Engine (UE) Advent Calendar 2021 その2 の 12 日目の記事です。

qiita.com

11 日目は @Takuegg さんの「UnrealEngineで映像制作のすゝめ」でした。

qiita.com

今回の内容

Gameplay Ability System (以下 GAS) が 2018 年?くらいから出て、少しずつ情報も増えてきて GAS を使用している人も増えてきているのではないかと感じております。GAS は個人的に非常に便利に感じていて、個人製作中のゲームでも使用しています。
今回はそんな GAS を使った開発時のデバッグに便利な HUD について紹介します。

前提

以下の内容は GameplayAbility や GamaplayEffect を使ったことがある人が読むことを想定しているので、GameplayAbilitySystem 等の説明はしていません。
また、以下の説明では私の個人製作中のゲームで使用している GameplayAbility や GameplayEffect の名前が説明なく出てきます。GA_* は GameplayAbility を、GE_* は GameplayEffect を表しているんだなぁと読み取っていただけると助かります。

GAS のデバッグ HUD の起動方法

ゲーム実行中にコンソールコマンドで showdebug abilitysystem を入力し、実行するだけで起動できます。

f:id:masahiro8080:20211212122716p:plain

コンソールコマンドとは、というのは以下のヒストリアさんの記事にお任せすることにし、ここでは説明を省略します。

historia.co.jp

HUD の表示内容の紹介

showdebug abilitysystem コマンドを実行すると以下のような HUD が表示されます。赤枠部分が GAS の HUD 表示部分になります。

f:id:masahiro8080:20211212123959p:plain

この HUD は全部で 3 ページに分かれており AbilitySystem.Debug.NextCategory コマンドで次ページへ進むことができます。

2 ページ目
f:id:masahiro8080:20211212124700p:plain

3 ページ目
f:id:masahiro8080:20211212125253p:plain

もう一度 AbilitySystem.Debug.NextCategory コマンドで 1 ページ目に戻ります。

共通の表示内容

すべてのページで共通して表示されているものは以下です。

No 名前 説明
1 Owned Tags 現在デバッグ対象になっている Actor が保持する AbilitySystemComponent が持っている GameplayTag
2 BlockedAbilityTags 現在デバッグ対象になっている Actor が起動している GameplayAbility の Block Abilities with Tags で設定している GameplayTag

以下の画像では Owned Tags Effect.Enchant や Effect.Consumables.Ignition が 1 つずつ設定されていることが確認できます。

f:id:masahiro8080:20211212134119p:plain

GameplayTag の設定状況については、どのページからでも確認できるようになっています。

1 ページ目の表示内容

それでは 1 ページ目の表示内容について紹介します。1 ページ目で表示されている内容は AttributeSet の情報が表示されています。
以下では AttributeSet に Health という Attribute があり、その値が 600.00 であることや Stamina が 82.00 であることがわかります。

f:id:masahiro8080:20211212123959p:plain

GameplayEffect で一時的に AttributeSet の値を変更している場合は、表示が少し変わります。
以下では GE_Ignition という GameplayEffect によって FireAttack が 80.00 加算され、一時的に 80.00 になっていることが確認できます。

f:id:masahiro8080:20211212130758p:plain

このように 1 ページ目は AttributeSet の内容を確認する際に便利です。

2 ページ目の表示内容

続いて 2 ページ目。2 ページ目で表示されている内容は GameplayEffect の情報が表示されています。
以下では、GE_RegeneStamina という Duration Policy が Inifinite な GameplayEffect が 0.03 秒ごとに Stamina を 1.00 ずつ加算していること、
GE_Ignition という Duration Policy が Has Duration な GameplayEffect が 60.00 秒間だけ FireAttack を 80.00 加算していることが確認できます。また GE_Ignition によって Effect.Enchant というタグが付与されていることも確認できます。

f:id:masahiro8080:20211212124700p:plain

このように 2 ページ目は GameplayEffect の発動状況を確認する際に便利です。

3 ページ目の表示内容

最後の 3 ページ目で表示されている内容は GameplayAbility の情報が表示されています。
以下では、デバッグ対象の Actor(プレイヤーキャラクター)に付与されている GameplayAbility と、現在 Active になっている GameplayAbility 等が確認できます。
表示されている GA_* は、付与されている GameplayAbility です。 白または黄色で表示されている GameplayAbility は現在 Active な GameplayAbility、赤色で表示されている GameplayAbility は Activation Blocked Tags によって Activate できない GameplayAbility になっています。 灰色で表示されている GameplayAbility は現在 Active ではない GameplayAbility を表しています。
また GameplayAbility 中で使用している AbilityTask についても確認ができます。

f:id:masahiro8080:20211212125253p:plain

このように 3 ページ目は GameplayAbility の設定状況や起動状況を確認する際に便利です。

デバッグ対象の Actor の切り替えについて

デバッグ対象の Actor の切り替え方については AbilitySytem.Debug.NextTarget または AbilitySystem.Debug.PrevTarget で切り替えます。
ただし現在のところ、今どの Actor をデバッグ対象にしているかについては知る方法がないのが残念なところです。 (デバッグ対象には緑色のボックスが表示されるはずなのですが、上記のコマンドを実行しても緑色のボックスはプレイヤーについたままになります)

一応 issue として記録されているようです。

Unreal Engine Issues and Bug Tracker (UE-90437)

おわりに

以上で GameplayAbilitySystem のデバッグ HUD の紹介を終わります。かなり便利かと思うのでぜひ使ってみてください。
showdebug コマンドは GameplayAbilitySystem だけでなく、他のデバッグを行う際も便利なので、調べて使ってみるとよいかと思います。

本記事は以上になります。

明日は @Naotsun の 独自のタブをエディタのメニューから呼び出す方法 になります。 楽しみです!