関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2022.03.30UE4UE/ 初心者向けUE/ Blueprint
執筆バージョン: 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/