BLOGブログ

2022.03.30UE4/ 初心者向けUE4/ Blueprint

[UE4]Tickの下にあるFloat型について(Delta Seconds)

執筆バージョン: Unreal Engine 4.26

[挨拶]

こんにちは、ゲームデザイナーの西尾です。

突然ですが「Event Tick」って便利ですよね。
自分でBPを組むときも、よく利用しているEventの一つです。

Tickには「DeltaSeconds」と呼ばれるFloat型の値が用意されていますが
これが何を指すものか謎でした。(使用しなくても制作は進められました。)

今回はこの「DeltaSeconds」が何者かをご紹介いたします。

 

[解説]

まずはTickとDeltaSecondsについて掘り下げていきます。

 

「Tick」=毎フレーム、実行が走るイベント
例えば、ゲームのフレームレートを10FPSにした場合
Tickは1秒に10回実行が走ることになります。

 

「DeltaSeconds(float)」=フレーム間の合計時間
ゲームのフレームレートを30FPSにした場合
Tickは1秒に30回処理が走るので

[1 秒÷ 30回 = 0.0333…秒]

つまり30FPSの状態だと
DeltaSecondsからは「 0.0333…」が出てくるはずです!
実際にBPを組んで測ってみましょう。

BP内にあるTickのDeltaSecondsをPrintStringで表示するように組みます。
プレイを開始して、コマンド「t.MaxFPS 30」を実行し、ゲーム内フレームレートを30FPSにします。
※コンソールはデフォルトでキーボードの「@」に設定されています。

出てきました!
DeltaSecondsはTickが走るフレーム間の時間を出力してくれるFloat型の値でした。

ではDeltaSecondsは、いったい何に使えるのでしょうか。

 

[使用例]

突然ですが、こんなものを作って見ました!
Tickで毎フレーム上の方向に押し上げられるBP
つまり「吹き上げギミック」です!

アクションゲームにはありそうなギミックですよね

 

しかし、PCのスペックやゲーム内の処理負荷によっては
フレームレートが下がってしまう場合があります。

たとえフレームレートを120に設定していても
負荷次第で重くなる事だってあるはずです。

ということで、「t.MasFPS 30」で
フレームレートを「120」→「30」に変更します。

・・・吹き上げられなくなりました。

これはフレームレートを変更したことで
Tickの出力する回数が減ったために起きている現象です。
(120回→30回)

このままでは処理負荷によって結果が変わるため
プレイをするマシンによって体験が変わってしまいます!

そこで「DeltaSeconds」の出番です。

DeltaSecondsを利用してImpulseに繋げてあげると
フレームレートによってImpulseの強さが変わるようになります。

「t.MaxFPS 30」で落下しなくなりました!

この様に、フレームレートの変化に対応する事を
可変フレーム対応と呼ばれています。

皆さん、フレームレートによって結果が変わっていたりしませんか?
変わっている場合は、「DeltaSeconds」を活用すると良いかもしれません!

 

[おまけ]

今回、「t.MaxFPS 30」(ゲームのフレームレートの上限を30にする)
というコンソールコマンドを使いましたが
UE4には他にもたくさんのコンソールコマンドが存在します。

弊社ブログにて、他のコンソールコマンドを紹介していますので
気になった方はご覧ください!
https://historia.co.jp/archives/1342/