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.
Görev
OrtaOyuncu 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);
}
}
}
}
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
1İlk Betiğiniz
Merhaba, UnityKüpü YerleştirHer Karede Hareket EtHer Saniye DönTuşlarla Yön VerÖzet: Küpü Sür4Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir YapıdırÖzet: Drone Pilotu7Proje: Yıldızı Yakala
YakalayıcıDüşen Bir Yıldız10Betik Yaşam Döngüsü
Awake ve StartUpdate ve LateUpdateOnEnable ve OnDisableYaşam Döngüsü SırasıÖzet: Yaşam Döngüsü Günlükleyicisi5Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarÖlçekNesnelere BakışBir Noktaya Doğru HareketTekrar: Yörüngedeki Ay6GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBir Bileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı