Menu
CoddyTech

Update dan LateUpdate

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 56 dari 67.

Pada setiap frame, Unity memanggil Update() pada setiap skrip, dan hanya setelah semuanya selesai, Unity memanggil LateUpdate() pada setiap skrip. Kamu tidak dapat menentukan Update() milik object mana yang berjalan lebih dahulu.

Hal ini penting untuk apa pun yang mengikuti sesuatu yang lain. Kamera yang menyalin posisi pemain di Update() mungkin berjalan sebelum Update() milik pemain sendiri menggerakkannya, lalu kamera menyalin posisi pemain satu frame sebelumnya: kamera tertinggal satu langkah, dan hal ini bisa berubah saat object ditambahkan atau scene dimuat ulang. Di LateUpdate(), penyalinan selalu terjadi setelah pemain bergerak:

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

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

Aturannya: gerakkan benda di Update(), dan letakkan kode yang bereaksi terhadap posisi akhir benda, seperti kamera, label, dan bidikan, di LateUpdate(). Keduanya berjalan sekali setiap frame, dan Time.deltaTime memiliki arti yang sama di keduanya.

challenge icon

Tantangan

Sedang

Pemain dan tag namanya sama-sama menjalankan skrip Mover. Pada Player, target kosong, jadi tombol panah menggerakkannya. Pada NameTag, target adalah pemain, jadi tag berada sejauh offset di atasnya.

Tekan Play dan tahan tombol panah: tag tertinggal di belakang pemain. Di sini, Update() pada tag berjalan lebih dulu dan menyalin posisi pemain dari satu frame sebelumnya. Perbaiki agar tag tepat berada di atas pemain pada setiap frame, dan biarkan pergerakan dengan tombol panah tetap di Update(). Lalu tekan Check.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar Scripting Unity