MonoBehaviour.FixedUpdate()
Açıklama
Fizik hesaplamaları için kare hızı bağımsız MonoBehaviour.FixedUpdate mesajı.
MonoBehaviour.FixedUpdate, fizik sisteminin frekansına sahiptir; her sabit kare hızı çerçevesinde çağrılır. Fizik sistem hesaplamalarını FixedUpdate sonrasında yapın. Varsayılan olarak, çağrılar arasındaki süre 0.02 saniyedir (saniyede 50 çağrı). Bu değere Time.fixedDeltaTime ile erişin. Tercih ettiğiniz değeri bir komut dosyası içinde ayarlayarak veya Edit > Settings > Time > Fixed Timestep yolunu izleyerek değiştirin. FixedUpdate frekansı, Update frekansından daha fazla veya az olabilir. Uygulama saniyede 25 kare hızında (fps) çalışıyorsa, Unity bunu yaklaşık olarak her karede iki kez çağırır. Alternatif olarak, 100 fps'de iki render çerçevesi bir FixedUpdate ile gerçekleşir. Gerekli kare hızını ve Fixed Timestep oranını Time ayarlarından kontrol edin. Kare hızını ayarlamak için Application.targetFrameRate kullanın.
Rigidbody kullanırken FixedUpdate kullanın. Bir Rigidbody'ye kuvvet uygulayın ve bu her sabit karede uygulanır. FixedUpdate, genellikle MonoBehaviour.Update ile çakışmayan ölçülmüş bir zaman adımında gerçekleşir.
Aşağıdaki örnekte, Update çağrılarının sayısı, FixedUpdate çağrılarının sayısıyla karşılaştırılmıştır. FixedUpdate, saniyede 50 kez çalışır. (Oyun kodu test makinesinde yaklaşık 200 fps'de çalışır.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// GameObject.FixedUpdate örneği.
// FixedUpdate'i Update ile karşılaştırarak kare hızını ölçün.
// Oranları her saniye gösterin.
public class ExampleScript : MonoBehaviour
{
private float updateCount = 0;
private float fixedUpdateCount = 0;
private float updateUpdateCountPerSecond;
private float updateFixedUpdateCountPerSecond;
void Awake()
{
// Bu yorumu kaldırmak kare hızını saniyede 10 kareye düşürecektir.
// Bu, FixedUpdate'in Update'ten daha sık çağrılacağı anlamına gelir.
// Application.targetFrameRate = 10;
StartCoroutine(Loop());
}
// Update çağrı sayısını artırın.
void Update()
{
updateCount += 1;
}
// FixedUpdate çağrı sayısını artırın.
void FixedUpdate()
{
fixedUpdateCount += 1;
}
// Her iki mesaja yapılan çağrı sayısını gösterin.
void OnGUI()
{
GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("label"));
fontSize.fontSize = 24;
GUI.Label(new Rect(100, 100, 200, 50), "Update: " + updateUpdateCountPerSecond.ToString(), fontSize);
GUI.Label(new Rect(100, 150, 200, 50), "FixedUpdate: " + updateFixedUpdateCountPerSecond.ToString(), fontSize);
}
// Her iki CountsPerSecond değerini her saniye güncelleyin.
IEnumerator Loop()
{
while (true)
{
yield return new WaitForSeconds(1);
updateUpdateCountPerSecond = updateCount;
updateFixedUpdateCountPerSecond = fixedUpdateCount;
updateCount = 0;
fixedUpdateCount = 0;
}
}
}
Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.
Yorumlar
Yorum Gönder