Описание
Текущая расчетная скорость рендеринга в кадрах в секунду, округленная до ближайшего целого числа.
Это ориентировочное значение, которое может быть недостижимо в зависимости от приложения.
Если значение QualitySettings.vSyncCount больше 0, оно рассчитывается следующим образом:
FPS = Resolution.refreshRate / QualitySettings.vSyncCount / OnDemandRendering.renderFrameInterval
Если QualitySettings.vSyncCount равно 0 и Application.targetFrameRate также больше 0:
FPS = Application.targetFrameRate / OnDemandRendering.renderFrameInterval
Android, iOS и tvOS используют 30 кадров в секунду в качестве частоты кадров по умолчанию, если не указано другое значение. В этом случае возвращается 30 / OnDemandRendering.renderFrameInterval. Все остальные платформы возвращают значение Application.targetFrameRate.
using UnityEngine;
using UnityEngine.Rendering;
using System.Collections;
// This example shows how to use effectiveRenderFrameRate to ensure your application renders at a given frame rate regardless of
// settings that could be changed by the user. Also demonstrates use of setting renderFrameInterval from a coroutine.
public class Example : MonoBehaviour
{
void Start()
{
const int myTargetFrameRate = 10;
// Start off assuming that Application.targetFrameRate is 60 and QualitySettings.vSyncCount is 0
OnDemandRendering.renderFrameInterval = 6;
// Some applications may allow the user to modify the quality level. So we may not be able to rely on
// the framerate always being a specific value. For this example we want the effective framerate to be 10.
// If it is not then check the values and adjust the frame interval accordingly to achieve the framerate that we desire.
if (OnDemandRendering.effectiveRenderFrameRate != 10)
{
if (QualitySettings.vSyncCount > 0)
{
OnDemandRendering.renderFrameInterval = (Screen.currentResolution.refreshRate / QualitySettings.vSyncCount / myTargetFrameRate);
}
else
{
OnDemandRendering.renderFrameInterval = (Application.targetFrameRate / myTargetFrameRate);
}
}
StartCoroutine(SlowRenderingFor5Seconds());
}
IEnumerator SlowRenderingFor5Seconds()
{
// After 5 seconds go back to rendering every frame
yield return new WaitForSeconds(5);
OnDemandRendering.renderFrameInterval = 1;
}
void Update()
{
// For 5 seconds this will report that the effective framerate is 10. Afterward it will log what the framerate is given the current
// quality and target framerate settings.
Debug.Log("FrameRate: " + OnDemandRendering.effectiveRenderFrameRate);
}
}