Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 Object継承のマクロライブラリーの中でDelayを使う方法

2016年7月23日 ※当初の内容が全て不要となるマクロのハックがありました

ずっと不可能だと思っていた、Object継承のマクロライブラリー内でDelayを利用するハックが存在することを知りました。

 なんと、Delayを利用している部分をCollapse化(折り畳み)すると、普通にDelayを利用できるようになります。上記はForLoopにDelayをつけてループさせるというマクロライブラリーのマクロです。当然親はObject型。

 

このCollapse化はそのままマクロライブラリー内でやるのではなくて、Delayが利用できる場所で一旦作成し、できたノードをそのままコピペするとマクロライブラリー内で利用できるようになります。

 

4.7 preview 3 - Delay not available in standard macros - UE4 AnswerHub

普通に一年前以上からこの情報があって、全く知りませんでしたよ…マクロライブラリーでDelay使えるとめっちゃ便利なのでぜひ。

 

2016年1月7日 ※事実と誤解される部分が多いため記事を大幅修正

Delayノードはとても便利なものですが、これをマクロで利用するためには"Actor"を継承したクラスでなければなりません。

しかしマクロライブラリーを作成した際にどこからでも使用できるようにするためにはObject継承のマクロにしなくてはならず、この場合にはDelayノードを利用する事が出来ません。

ではObject継承のマクロライブラリーではDelayを使用する事が不可能なのか?

Task Wait Delayノード

結論から言うとありました。"Task Wait Delay"というノードを使うとObject継承のマクロの中でも使用することが可能です。

 基本的に標準のDelayと同じように使えます。

が、ひとつ制限としてターゲットに"Gameplay Task"インターフェースを要求されます。

Gameplay Taskとは?

公式ドキュメントを調べてみてもほとんど資料は出てきません。

ひとまずアクターに対して、Gameplay Taskコンポーネントというものを追加する事が出来るので、それを追加してみます。

このコンポーネントを引数にしてから、そのままマクロに渡す形式してみたところ、マクロの中で無事Delayが呼び出せました。

 Gameplay Taskコンポーネントに依存するので、少し使い勝手は悪いかもしれません。ただマクロの中でDelayが使えるとやはり便利です。

結局Gameplay Taskについては調べてみた感じでは現状だと、UE4のタスクスケジューラーとして呼び出せる仕組みのようですが詳しい事はわかりません。

コンポーネントの説明をみているとGameplayAbilitiesSystemと紐づくモノらしく、これはゲームプレイ用の複雑なスキルシステムを構築するためのモノらしいです。

一応モジュールを追加すればそのシステムも使えるようですが、詳細はまだよくわかっていません。