Menu
CoddyTech

Update dan LateUpdate

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 71 dari 85.

Di setiap frame, Unity memanggil Update() pada setiap skrip, dan baru setelah semuanya selesai, Unity memanggil LateUpdate() pada setiap skrip. Kamu tidak bisa menentukan objek mana yang Update()-nya berjalan lebih dulu.

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

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

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

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

challenge icon

Tantangan

Sedang

Buat label nama tetap tepat di atas pemain pada setiap frame.

  1. Tambahkan void LateUpdate(), yang berjalan setelah Update() setiap skrip.
  2. Pindahkan bagian if (target != null) ke dalamnya, dan sisakan hanya gerakan dengan tombol panah di Update(), di bawah if (target == null).

Tekan tombol “Main” dan tahan tombol panah: label tetap tepat di atas pemain. Lalu tekan tombol “Periksa”.

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

Semua pelajaran di Dasar-Dasar Scripting Unity

Latihan sendiri: Playground Unity