妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ウィジェットのイベントConstructが発生するタイミング・その2

前回の話imoue.hatenablog.com

「……ということを書いていたところ、AddToViewportするまでConstructが働かないなら、むしろ最初にAddToViewportしちゃうという方法を教えてもらったよ」

妹「最初からAddViewportするとウィジェットが一瞬見えちゃうんじゃない?」

「それは大丈夫。ウィジェットを作成した段階でSetVisibilityは使えるから、AddToViewportの前にHiddenをセット出来る。もっとも表示タイミングの問題で、順番が逆でも大丈夫ではあるんだけど」

f:id:una_unagi:20151203171902p:plain

妹「そうすると表示する時と消す時はどうなるの?」

f:id:una_unagi:20151203173019p:plain

「こういう感じで、表示の切り替えだけする。AddToViewportやRemoveFromParentは使わない」

妹「見た目はこれでも問題なさそうだけど、実際は存在してるんだよね? それってちょっとモヤモヤするような」

「内部的には最初に表示するかしないかの分岐があって、それから細かい表示のあれこれをやるわけだから、Hiddenにした時点で表示速度への影響はほぼゼロになるはず。AddToViewportとRemoveFromParentを繰り返す方がメモリ使用の効率も悪そう」

妹「そう言われてみると、それでいいような気がしてきた。そっかあ、隠すだけでいいのかあ」

「あとウィジェットがHiddenになってると、マウス関係のイベントとか当然反応しないんだけど、イベントティックも動いてないということがわかった。表示に切り替えた直後から動き始めて、非表示になったらまた止まる。だから存在してない状態として扱っても問題無さそう」