読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

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

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

レベルを読み込んだ直後はフレーム落ちする

仕様・不具合

妹「弾が出てくる時にエフェクト出してるんだけど、最初の1回だけなんかエフェクトがしょぼいように見えるような……」

「最初の1回って、レベル開始直後なのか。そしたら多分これフレーム落ちだろうね。最初の弾が出るまで5秒ぐらいDelayを入れてみたら多分直る」

妹「待つとエフェクトが豪華になるの? 5秒も待ちたくないんですが」

「3秒……多分1秒ぐらいでも足りるとは思うけど」

妹「じゃ1秒で。あっエフェクトが直った。ナンデ?」

「レベルの読み込んですぐだから、BeginPlayとかConstructScriptとか動いて負荷がかかるんだよ」

妹「でもレベルが読み込まれて、弾が出た後にエフェクトは出てくるんだよ? 関係なくない?」

「UE4はフレームスキップ式だから、プログラムだけ動いて画面の更新をサボる機能がある。忙しい時じゃなくて忙しかった直後にサボる。それが丁度エフェクトのあるあたりで起きたんだと思う。だからDelayでタイミングをずらすと直るんだよ」

妹「サボるとしょぼくなるの?」

「そうとも限らなくて、逆に派手に見えることもあるんだけど……。エフェクトってだいたい、最初に小さいのがでて、大きくなって、また小さくなるわけだけど、一番大きい部分が、たまたまサボるタイミングだったんだろね。大きさが1-2-3-4-3-2-1で変化するところが、1-1-3-3-3-3-1みたいになって、一番大きい4のところが見えないとしょぼく見える。逆にタイミングしだいで4が長く表示されるから派手にもなる」

妹「いつサボるかとかはこっちで決められないの?」

「決めるといってもパソコンによっても違うからね。同じパソコンでもウイルスチェックとかすれば、その分負荷が増えてタイミングが変わる。ちゃんと表示したい時はちょっと待つしかない。ちょっと待っても駄目なのは慢性的に遅いってことだから、ポリゴン減らしたり、Tickイベントやビヘイビアツリーの内容を削ったりしないと駄目だけど、レベルが始まった直後に関してはわりとどうしようもない」

妹「ということはこれ、待つのは1秒で済むとは限らないんじゃない? もっと遅いパソコンとか」

「そういうことも考えるともう少し待ってもいいけど……今回の場合難易度に影響があるほどじゃないから、そこまで気にしなくていいんじゃないかな。それにフレームが飛んでる時はDelayとかTickとかの実行も遅れるから、1秒後に混んでたらはもう少し待つはずだし」

妹「画面はサボってもプログラムはちゃんと動いてるんじゃなかったの!?」

「基本的にはそうだし、ノードを飛ばして実行したりはしないんだけどね。ただTickの回数が減ったり、Delayが指定した時間より遅れることはある。そのへんのは優先度が低いイベントだから、他にやることがあると……サボる」

妹「やっぱりサボってるじゃん!」