【Unity】描画の間隔を制御する「OnDemandRendering」について

2020/02/05DEVELOP, Unity

Unity 2019.3 から 描画の間隔を制御する API「OnDemandRendering」が追加されています。

Unity – Scripting API: OnDemandRendering

目次

実装部分

UnityCsReference/OnDemandRendering.bindings.cs at master · Unity-Technologies/UnityCsReference

OnDemandRendering

renderFrameInterval

Application.targetFrameRate = 60;
UnityEngine.Rendering.OnDemandRendering.renderFrameInterval = 2;

描画の更新間隔を調整できる。 targetFrameRate が60でrenderFrameInterval に2を設定した場合、2フレームに一度描画更新となる。 renderFrameInterval の素晴らしい所は、これまで targetFrameRate でアプリ全体のフレームレートを落とすことでスマートフォンのバッテリー消費を減らすなど対策していたものが renderFrameInterval を使うことで「アプリ全体のフレームレートは高いまま、描画だけ落とす」ことが可能となります。フレームの間隔による「ユーザーの入力受付」時間が遅くならないのはとても良いです。

willCurrentFrameRender

if(UnityEngine.Rendering.OnDemandRendering.willCurrentFrameRender)
{
    // 描画更新するフレームです、
}

現在のフレームが描画するフレームか確認できるみたいです。

effectiveRenderFrameRate

var effectiveRenderFrameRate = UnityEngine.Rendering.OnDemandRendering.effectiveRenderFrameRate;

描画のフレームレートを確認できる。 Application.targetFramerate が 60 の状態でrenderFrameInterval が1であれば60, 2なら30 といった具合に描画のフレームレートを取得できます。

まとめ

ローディング画面など、動きの少ない画面で特に有効に作用するため積極的に使っていきたいですね。

Posted by kazupon