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 71 / 85.

Her karede Unity, her betiği üzerinde Update() çağırır ve ancak hepsi işini bitirdiğinde her betiği üzerinde LateUpdate() ç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 kamera, oyuncunun bir kare önceki konumunu kopyalar: 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 her zaman 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; kamera, etiketler ve nişan alma gibi, nesnelerin vardığı konuma tepki veren kodları ise LateUpdate() içine koy. Her ikisi de kare başına bir kez çalışır ve Time.deltaTime ikisinde de aynı anlama gelir.

challenge icon

Görev

Orta

Her karede isim etiketinin oyuncunun tam üzerinde durmasını sağla.

  1. Her betiğin Update() metodundan sonra çalışan void LateUpdate() metodunu ekle.
  2. if (target != null) bölümünü bu metoda taşı ve Update() içinde, if (target == null) koşulunun altında yalnızca ok tuşlarıyla hareket etme kodunu bırak.

“Oyna” düğmesine bas ve bir ok tuşunu basılı tut: etiket oyuncunun hemen üzerinde kalır. Ardından “Kontrol et” düğmesine bas.

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);
            }
        }
    }
}

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

Kendi başına pratik yap: Unity playground