UE4 フローノードを関数の中で呼び出したときの罠(Multi Gate、Flip Flop、Do Once)
「Multi Gate」「Flip Flop」「Do Once」ノードを使ったノード郡を
関数化したときにハマったのでメモです。
詳しくはこちらの記事でも書かれています。
・A と B を交互に切り替える処理でハマった話
http://limesode.hatenablog.com/entry/2016/11/20/014817
簡単に言うと
「Multi Gate」「Flip Flop」「Do Once」などの次回に処理を持ち越すノードを関数の中で使うと機能しなくなる。
といったもののようです。
自分はノードをべた書きした後、見やすいように関数化したりまとめたりしていたので
関数化したら動かなかった!という風にハマったので自戒としてのメモです。
みつまめ杏仁さんが書かれている
というわけでどんな事が起きるかというのと解決方法です。
まずはこんな処理を組みます。

ランダムな順番でHello1とHello2が表示されるような処理です。
これを「Event Tick」移行を関数化してみます。

こんな感じですね。
その関数を呼んでみます。

何故かこの関数を呼ぶたびに「Hello1」が表示され続けます(Hello2表示され続ける場合もあり)
※本来は交互に表示されてほしい
なんでやねん…!ということではまりました。
解決方法としてはまとめるだけなら「マクロ」を使ってまとめる(関数にはしない)
マクロならレイテントノードも使えるのでよさそうです。
もしも関数のように複数の箇所から呼びたい場合は
カスタムイベントを作るのがよさそうです。
こんな感じにカスタムイベントを作って呼んであげると良さそうです。

「関数」「マクロ」「カスタムイベント」はかなり気を使って使い分けないとまずそうですね。
よくよく考えてみると確かにそうなりますよねって感じなのですが
公式ドキュメントにはそんなことさっぱり書いてないので小一時間悩みました(´;ω;`)ウッ…
・MultiGate
http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/FlowControl/#multigate
というバッドノウハウでした!
関数化したときにハマったのでメモです。
詳しくはこちらの記事でも書かれています。
・A と B を交互に切り替える処理でハマった話
http://limesode.hatenablog.com/entry/2016/11/20/014817
簡単に言うと
「Multi Gate」「Flip Flop」「Do Once」などの次回に処理を持ち越すノードを関数の中で使うと機能しなくなる。
といったもののようです。
自分はノードをべた書きした後、見やすいように関数化したりまとめたりしていたので
関数化したら動かなかった!という風にハマったので自戒としてのメモです。
みつまめ杏仁さんが書かれている
こういう内部処理が原因なんじゃないかなーと。あくまでも推測ですが、
切り替えるには、状態を保持しておく値が必要で、関数内からはその値が参照できなくなるんじゃないかと思ってみたり。
というわけでどんな事が起きるかというのと解決方法です。
まずはこんな処理を組みます。

ランダムな順番でHello1とHello2が表示されるような処理です。
これを「Event Tick」移行を関数化してみます。

こんな感じですね。
その関数を呼んでみます。

何故かこの関数を呼ぶたびに「Hello1」が表示され続けます(Hello2表示され続ける場合もあり)
※本来は交互に表示されてほしい
なんでやねん…!ということではまりました。
解決方法としてはまとめるだけなら「マクロ」を使ってまとめる(関数にはしない)
マクロならレイテントノードも使えるのでよさそうです。
もしも関数のように複数の箇所から呼びたい場合は
カスタムイベントを作るのがよさそうです。
こんな感じにカスタムイベントを作って呼んであげると良さそうです。

「関数」「マクロ」「カスタムイベント」はかなり気を使って使い分けないとまずそうですね。
よくよく考えてみると確かにそうなりますよねって感じなのですが
公式ドキュメントにはそんなことさっぱり書いてないので小一時間悩みました(´;ω;`)ウッ…
・MultiGate
http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/FlowControl/#multigate
というバッドノウハウでした!
| UE4 | 12:39 | comments:0 | trackbacks:0 | TOP↑