Menu
CoddyTech

Update ve LateUpdate

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 56 / 67.

Unity her karede her betik üzerinde Update() metodunu çağırır ve ancak hepsi tamamlandığında her betik üzerinde LateUpdate() metodunu çağırır. Hangi nesnenin Update() metodunun önce çalışacağı sana bağlı değildir.

Bu, başka bir şeyi takip eden her şey için önemlidir. Update() içinde oyuncunun konumunu kopyalayan bir kamera, oyuncunun kendi Update() metodu onu hareket ettirmeden önce çalışabilir; bu durumda kameraya oyuncunun bir kare önce bulunduğu konum kopyalanır: kamera bir adım geriden gelir ve bunun olup olmayacağı, nesneler eklendiğinde veya sahne yeniden yüklendiğinde değişebilir. LateUpdate() içinde kopyalama, oyuncu hareket ettikten sonra gerçekleşir:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);

void LateUpdate()
{
    transform.position = player.position + offset;
}

Kural şu: nesneleri Update() içinde hareket ettir; kameralar, etiketler ve nişan alma gibi nesnelerin son durumda bulunduğu konuma tepki veren kodları ise LateUpdate() içine koy. Her ikisi de kare başına bir kez çalışır ve Time.deltaTime her ikisinde de aynı anlama gelir.

challenge icon

Görev

Orta

Oyuncu ve ad etiketi, Mover betiğini çalıştırır. Player üzerinde target boştur, bu yüzden ok tuşları onu hareket ettirir. NameTag üzerinde target oyuncudur, bu yüzden etiket onun offset kadar üstünde durur.

Play düğmesine basın ve bir ok tuşunu basılı tutun: etiket oyuncunun gerisinde kalır. Burada etiketin Update() yöntemi önce çalışır ve oyuncunun bir kare önce bulunduğu yeri kopyalar. Bunu düzeltin; böylece etiket her karede oyuncunun tam üstünde olsun ve ok tuşlarıyla hareket Update() içinde kalsın. Ardından Check düğmesine basın.

Kendin dene

using UnityEngine;

public class Mover : MonoBehaviour
{
    public Transform target;
    public Vector3 offset;
    public float speed = 4f;

    void Update()
    {
        if (target != null)
        {
            transform.position = target.position + offset;
        }
        else
        {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
            }
        }
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler