- Gameplay Ability System コードリーディング ① WaitOverlap - You are done!
- Gameplay Ability System コードリーディング ② SpawnActor - You are done!
- Gameplay Ability System コードリーディング ③ WaitTargetData - You are done!
- Gameplay Ability System コードリーディング ④ WaitTargetData - GameplayAbilityTargetActor (及び Radius) - You are done!
上記の続きになります。
前回は WaitTargetData
で利用する GameAbilityTargetActor
の一つである GameplayAbilityTArgetActor_Radius
に関して眺めました。
今回はそれを利用するサンプルを書きつつ進めたいと思います。
サンプルの用意
手順を簡略化するために GASDocumentation をベースに進めます。
GitHub - dany1468/GASDocumentation_PlayGround at blog/wait_target_data_radius
上記に今回のコードを上げていますが、GASDocumentation を folk し blog/wait_target_data_radius
という branch で push しています。
サンプル用の Ability と、その Input トリガーの追加
Ability は GA_Sample_SpawnActor
として以下のパスに用意しています。
GASDocumentation_PlayGround/Content/GASDocumentation/Characters/Hero/Abilities/Sample/GA_Sample_SpawnActor.uasset at blog/wait_target_data_radius · dany1468/GASDocumentation_PlayGround · GitHub
Ability に関しては、GDGameplay Ability
を継承する必要があります。
また、Input を紐づけるために、コードの修正も行っています。
Add new AbilityInputID `Sample` · dany1468/GASDocumentation_PlayGround@fca71af · GitHub
加えて、以下のように T
key に対して Sample
という ActionMapping を追加しています。
こうすることで、Ability に対して Input の紐づけができます。(この辺の詳細はあまり見てないので他にも用途はあるのかもしれません)
Ability を Character に紐づける
BP_HeroCharacter
が操作用になるので、こちらに Ability を設定します。
これで、キャラクターを操作中に T
をクリックすることで Ability を Activate することができるようになります。
Ability の実装
ここからが本題になります。今回は WaitTargetData
を TargetActor に Radius
を使い、検出できた場合には以前に見た SpawnActor
で検出した location に Cube を出すということを行います。
見ての通りですが、コメントされている箇所 2 つは、GA_Meteor_BP
から持ってきています。
Show Confirm / Cancel help text
GA_Meteor_BP
の方では岩を落とす場合の確認に使われていますが、今回は単純に Radius
の Confirm に使います。
StartLocation の作成
GameplayAbilityTargetingLocationInfo
を生成する必要があるためこのような方法になっているようです。
GameplayAbilityTargetingLocationInfo
を経由はしていますが、よくあるキャラクターの前方を指定しているだけですね。
Filter の指定
こちらも GameplayTargetDataFilter
を生成する必要があります。
今回は、検出対象を GASDocumentation に付属している BP_Blue_Minion
にしているため、これを Required Actor Class
に指定しています。それ以外はデフォルトです。
WaitTargetData の設定
ここまでで用意した StartLocation
と Filter
を指定しています。
また、Class には GameplayAbilityTargetActor_Radius
を指定し、Radius
には 500
を指定しました。
検出後の SpawnActor
Radius のコードを読んだ際にも触れましたが、仮に適切な Pawn が検出できなくても ValidData
に流れてきてしまいます。
よって、ValidData
に流れてきても実際に Actor を含んでいるかを確認した上で SpawnActor
に流しています。
Spawn しているのは BP_CubeToSpawn
という Actor ですが、単に Cube の mesh が配置してあるだけの BP です。
Character 側での Debug Sphere の表示
これは補助的なものですが、 WaitTargetData
の Radius が検出される場所をなんとなく可視化するために Character 側で Debug Sphere を表示しています。(これも GAS でできたらよかったんですが手抜きしました 😅)
動きの確認
左マウスクリックが射撃にも関連してるので微妙に分かりにくいのですが、T
を押した時に Confirm のメッセージが表示され待機状態に入ります。
その後、左マウスクリックを押すのですが、その時に Radius の範囲内に今回対象となっている Blue Minion が入っているかどうかで、Blue Minion の場所に Cube が出現するかどうかが変わります。
Confirmation Type を Instant にする
ちなみに、Confirmation Type を Instant にすると、T
を押した時点で待機状態無しで Radius の判定が行われます。
まとめ
サンプルとしてはあまり面白みの無いものでしたが、初歩的な WaitTargetData
の動作の確認ができたのではないかと思います。
今回は簡略化のために Confirmation Type については GASDocumentation の既存コードから拝借しましたが、いまいちよくわからないので次回はそこの詳細を見ていこうと思います。