FC2ブログ

凛(kagring)のUE4/UE5とUnityとQt勉強中のゲーム制作ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。ゲーム制作の話題もはじめました。

PREV | PAGE-SELECT | NEXT

≫ EDIT

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」などの次回に処理を持ち越すノードを関数の中で使うと機能しなくなる。
といったもののようです。

自分はノードをべた書きした後、見やすいように関数化したりまとめたりしていたので
関数化したら動かなかった!という風にハマったので自戒としてのメモです。

みつまめ杏仁さんが書かれている

あくまでも推測ですが、
切り替えるには、状態を保持しておく値が必要で、関数内からはその値が参照できなくなるんじゃないかと思ってみたり。

こういう内部処理が原因なんじゃないかなーと。

というわけでどんな事が起きるかというのと解決方法です。

まずはこんな処理を組みます。
フローノードの関数化バグ000
ランダムな順番でHello1とHello2が表示されるような処理です。

これを「Event Tick」移行を関数化してみます。
フローノードの関数化バグ001
こんな感じですね。

その関数を呼んでみます。
フローノードの関数化バグ002
何故かこの関数を呼ぶたびに「Hello1」が表示され続けます(Hello2表示され続ける場合もあり)
※本来は交互に表示されてほしい
なんでやねん…!ということではまりました。

解決方法としてはまとめるだけなら「マクロ」を使ってまとめる(関数にはしない)
マクロならレイテントノードも使えるのでよさそうです。

もしも関数のように複数の箇所から呼びたい場合は
カスタムイベントを作るのがよさそうです。

こんな感じにカスタムイベントを作って呼んであげると良さそうです。
フローノードの関数化バグ003

「関数」「マクロ」「カスタムイベント」はかなり気を使って使い分けないとまずそうですね。

よくよく考えてみると確かにそうなりますよねって感じなのですが
公式ドキュメントにはそんなことさっぱり書いてないので小一時間悩みました(´;ω;`)ウッ…

・MultiGate
http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/FlowControl/#multigate

というバッドノウハウでした!

| UE4 | 12:39 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/434-b03874e6

TRACKBACK

PREV | PAGE-SELECT | NEXT