1 Ağustos 2012 Çarşamba

Unity3D Update Fonksiyonu ve Türevleri


Herkese merhaba.Bu derste 3 adet otomatik çağrılan fonksiyonu anlatıcam.Bunlar;
Update(),
LateUpdate(),
FixedUpdate()



Bu fonksiyonların otomatik çağrılma özelliği UnityEngine.MonoBehaviour sınıfından .NET kalıtımla geçiyor.

Update()
Bu fonksiyonun içine yazdığınız kodlar her framede* çağrılır.Bu da saniyede 20,60 veya daha fazla çağrılması demektir.Bu rakam sürekli değişir.Unity3D'nin varsayılan fps hedefi 60 olduğu için fps genellikle 55-60 arasındadır.

Bu fonksiyonu kullanarak OnCollisionEnter, Start vb. fonksiyonların birçoğunun yapacağı işi yapabilirsiniz.Tek ihtiyacınız olan algoritma.Ancak her şey için bu fonksiyonun çağrılması performans sorunlarına yol açabilir.

* frame, fps(frame per second) kavramlarını internetten araştırabilirsiniz.:)


LateUpdate()
İşlevi Update fonksiyonuyla aynıdır.Tek farkı Update'nin içindeki kodlar çalıştıktan sonra çağrılmasıdır.

FixedUpdate()
İşlevi Update fonksiyonuyla aynıdır.Ancak Update fonksiyonu her framede çalışırken FixedUpdate her hedeflenen fps'de çalışır.Örnek olarak, Update saniyede 60 kere çalışırken FixedUpdate yaklaşık 1 kere çalışır.
Bu fonksiyon daha çok fizikle ilgili işlemlerde kullanır.Özellikle Rigidbody sınıfıyla ilgili kodların bu sınıfın içinde kullanılması önerilir.

Not: Daha önce de bahsettiğimiz gibi FPS sabit değildir.Örneğin bir online oyunda Update içine sağ tuşa basıldığında sağa gitmesi yazıldığında sağa gider.Ama fps leri aynı değilse (ki aynı olması çok zor) adil olmaz.
Bu sebeple hız vektörüyle Time.deltaTime değişkeni çarpılıp hareket fonksiyonuyla kullanılmalıdır.

Örnek
function Update () {
    transform.Translate(0, 0, Time.deltaTime * 1);
}
Referans
http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.html
http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.Update.html
http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.LateUpdate.html
http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.FixedUpdate.html

3 yorum:

  1. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  2. Ders için teşekkürler. Bir sorum var. Unity4 kullanıyorum. Şu kodu yazdım ancak Update fonksiyonunu script tanımıyor
    "function fixed()
    {
    if(transform.position.y<-5)
    {
    transform.position.y=1.1;
    transform.position.x=0;
    transform.position.z=0;
    }
    }"

    Neden olabilir? JavaScript olarak eklemiştim. Teşekkürler.

    YanıtlaSil
  3. Afedersiniz boşluk bırakmadığım için oluyormuş.
    Yani update() yapıyormuşum update () yapmam gerekirken. Teşekkürler.

    YanıtlaSil