using System.Collections; using System.Collections.Generic; using System.Threading; using UnityEngine; public class FrameRateManager : MonoBehaviour { [Header("Frame Settings")] int maxFrameRate = 9999; public float TargetFrameRate = 60.0f; float currentFramTime; private void Awake() { QualitySettings.vSyncCount = 0; Application.targetFrameRate = maxFrameRate; currentFramTime = Time.realtimeSinceStartup; } IEnumerator WaitForNextTime() { while (true) { yield return new WaitForEndOfFrame(); currentFramTime += 1.0f / TargetFrameRate; var t = Time.realtimeSinceStartup; var sleepTime = currentFramTime - t - 0.01f; if (sleepTime > 0) { Thread.Sleep((int)(sleepTime * 1000)); } while (t < currentFramTime) { t = Time.realtimeSinceStartup; } } } }