Gaming Life

一日24時間、ゲームは10時間

UMGの詳細パネルから関数を作ってバインディングするのは良くない

 今日Twitterで教えてもらい知ったこと。下の記事でも使っているテクニックのUMG要素の制御関数を詳細パネルで作るのは良くない。

ai-gaminglife.hatenablog.com

 それを確かめるのに簡単なテスト。UMGを作成し、Textを配置、そこからバインディングする関数Get Text 0を追加してみる。

f:id:ai_gaminglife:20180624235124p:plain

 関数の実装はこんな感じ。関数が呼ばれるたびにPrint Stringするだけの単純なもの。

f:id:ai_gaminglife:20180624235131p:plain

 作成したUMGをレベルブループリントで追加してPlayしてみると

f:id:ai_gaminglife:20180624235141p:plainf:id:ai_gaminglife:20180624235143p:plain

 関数Get Text 0が毎フレーム呼ばれている!

 これまで何故かこの方法で作成した関数は参照した値が書き換わる時だけ呼び出されるものだと思っていた。よく考えれば毎フレーム呼ばれるのは当然の事。

 Event Tickが毎フレーム呼ばれると非常に処理が重くなるのはぷちコンの時に痛いほど学んだので、最近はCustom EventやPure関数、ディスパッチャーやEvent Begin Playで変数代入など色々工夫するようにしていたのだが思わぬところに落とし穴があった。こんな基本的な事見落としていたなんて……

 というわけでこれからはこの方法を使うのは(基本的には)止めていこう。