妹でもわかるUnrealEngine4

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

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

InputAxisの呼び出しタイミング

f:id:una_unagi:20160206224031p:plain

妹「インプットAxisのノードには、フレームごとに呼び出されるって書いてあるけど、よく考えるとこれってティックとは違うんだよね?」

「ティックのと一緒だと思うけど」

妹「でもティックは、色々忙しい時にフレーム飛ばしてることもあるんでしょ? そしたらフレームごとじゃなくない?」

「飛ばしてる分はノーカウントとしてのフレームごとなんだよ。1日じゃなくて、1営業日みたいな。試しにティックとインプットAxisで、ただPrintStringするだけの実験をするとわかる」

f:id:una_unagi:20160206223830p:plain

「PC_が付いてる方はプレイヤーコントローラーからの、付いてないのはレベルブループリントからのPrintString。この状態で負荷をかけてみると、フレームスキップは発生するけど、PrintStringの順番は変わらない。つまりティックもインプットAxisも全く同じ基準で動いてるということになる」

妹「フレームごとじゃなかった……あれ? そうすると負荷がかかると足が遅くなったりする? インプットイベントが起きてないわけだから、3秒間押しても3秒分動いてないみたいな?」

「……遅くなったりする。それを防ぐにはGetWorldDeltaSecondsノードで前のフレームからの時間差を図って、それに合わせた仕組みを作る」

unrealengine.hatenablog.com

妹「標準でこういう風になるようにしといてくれたらいいのに」

「これはこれで問題もあるというか、スキップしてる間に押してたか、押してなかったかっていうのは結局わからないわけだから。スキップしてる間も押してたことにしよう派と、押してなかったことにしよう派も、どっちも正しくはないんだよ。どのみちスキップが発生する時点で動きは悪くなるから、ゲームの都合で決めちゃっていい。オプションでエフェクトの簡素化とかしてフレームスキップ自体をを抑えるという考え方もある」