Part 1の一部になります。
前回の続き
今回はGameplay Ability System (通称GAS)を使って、雪玉を渡す相手を光らせて雪玉を渡します。
お約束 | |
---|---|
この記事作成にあたって使用した主なUnreal Engine バージョン | UE4.27.2 / UE5 Preview1 |
本日のゴール
雪玉を渡す相手を光らせて雪玉を渡します。
今回スマートに解決できなかったなぁ。まあ仕方ないですけど。
参考文献
https://github.com/Pantong51/GASContent/blob/master/Tutorial_Attribute_Delegates.md
https://github.com/tranek/GASDocumentation/blob/master/README.md#412-setup-and-initialization
第一段階:雪玉を渡す候補の選定
これにはいくつか方法がありますが、思いつくのはMultiSphereTraceForObjectsを使う方法ですかね。これなら自分の周りにいるキャラを全て捜査することができるので、あとはそのキャラが味方かどうかを判定して・・・というやり方です。
これでもいいんですが、問題がありまして、このMulti〜を回し続ける必要があるんですね。第二段階:雪玉を渡す候補を光らせる
[UE4] PostProcessでObjectにOutlineをつける~前編~[UE4.18] / Qiita by @kanurapoison
UE4 誰でもわかるアウトライン入門/ alweiさん(神)
「オブジェクト アウトライン」でググると幸せになれそうです。Youtubeもありました。
こういった、アクターに対する視覚効果なんかはGameplay Cueの得意分野です。(→今回挫折しました笑)
早速やってみましょう。今回はPostProcessを使ってみます。
meshの周囲を囲うノード |
あとはGameplay Cueと組み合わせるだけやーとやってたんですが、結論から言うと、頓挫しました。
実際の実装では、Gameplay Cueを一切使わなかったです結局。。。
---
以下供養のためのメモ
どうも勝手にReplicationされちゃうんですよねエフェクトが。GAをLocal専用にしてみたりしたんですが、そうなるとなぜかSet Render Custom Depthをオンオフするタイミングが思ったようにならなくて、謎な現象が頻発しました。(Serverでは問題なく起動していたのでまじで謎のままです。)
ちなみにGameplay Cue Notify ActorというC++のクラスを継承してBP化したものを「Gameplay Cue」として使います。
ポイントとして、"On Active" "On Remove"という開始時と終了時の処理(関数)を継承できるので、非常に便利なんですよね。なんで開始と終了時にSet Render Custom DepthをON/OFFしたんですけど、なぜかClient側だと、即時終了しちゃうんですよね。なぜや。ためしにGameplay CueにNiagaraをセットして使ってみたところ、そっちは問題なくClientでも動作しているんですよね。なので原因が全く謎のまま終わりました。
On Active関数 |
私が間違っているかもしれませんが、Gameplay Cueを使う場合は、基本的にNiagaraと組み合わせるのが良さそうです。間違ってるかもしれませんが!!
だれか原因がわかったら教えて下さい〜〜。
ちなみにGameplay Cueを起動するにはGameplay Effectを使う必要があって意外と面倒だったので、視覚効果だけ生じさせたい場合は使わないほうが楽かもしれません。(Game CueをSpawnさせればいいんですが、それだとNiagaraをSpawnさせるのとあまり変わらない)
---
実際の実装
すごい地味ですが、GA_Pass内で、Set Render Custom Depthノードを入りきりするだけです。すっごい地味だったので詳しくは割愛します。
光らせるのは、自分の画面だけなので、GA_Pass自体をLocalだけで動作するように設定します。一応Is locally Controlledノード使いましたけど。
第三段階:雪玉を渡す
ApplyGameplayEffectToTarget + Ability Target Data from Actor |
このノードの組み合わせを使います。これでTarget DataにつないだアクターにGEを与えます。
0 件のコメント:
コメントを投稿