Menu
CoddyTech

Awake dan Start

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

Unity memanggil Awake() begitu sebuah objek dimuat, sebelum Start()-nya. Hal yang membuatnya berguna adalah aturan yang berlaku untuk semua objek: saat sebuah scene dimulai, Awake() milik setiap objek berjalan sebelum Start() milik objek mana pun. Unity menentukan objek mana yang berjalan lebih dahulu dalam tiap putaran, dan kamu tidak bisa mengandalkannya.

Skrip Player ini dipasang pada dua pemain, P1 (startLives 3) dan P2 (startLives 5), dan masing-masing menjadikan yang lain sebagai rival-nya:

public int startLives = 3;
public GameObject rival;
int lives;

void Awake()
{
    lives = startLives;   // siapkan object ini
}

void Start()
{
    int theirs = rival.GetComponent<Player>().Lives();   // tanyakan kepada object yang lain
    Debug.Log(name + " sees a rival with " + theirs + " lives");
}

public int Lives()
{
    return lives;
}

Versi pertama mengatur lives di Start(). Pemain yang memulai lebih dahulu lalu menanyakan jumlah nyawa rivalnya sebelum rival tersebut mengatur nyawanya, sehingga mencatat 0. Dengan pengaturan di Awake(), kedua pemain sudah memiliki jumlah nyawa sebelum Start() mana pun bertanya, sehingga P1 mencatat 5 dan P2 mencatat 3. Kebiasaan yang perlu diterapkan: atur field milik objek itu sendiri di Awake(), lalu berinteraksilah dengan objek lain di Start().

challenge icon

Tantangan

Sedang

Perbaiki sarangnya agar tidak ada yang menghitung list yang belum dibuat.

  1. Tambahkan void Awake() ke Hive.
  2. Pindahkan baris bees = new List<GameObject>(); dan perulangan for dari Start() ke Awake().
  3. Biarkan dua baris penghitungan di Start(): setiap Awake() berjalan sebelum Start() mana pun.

Tekan tombol “Main”: setiap sarang mencatat jumlah lebah saingannya, HiveA menghitung 5 lebah saingan, tanpa error. Lalu tekan tombol “Periksa”.

Coba sendiri

using System.Collections.Generic;
using UnityEngine;

public class Hive : MonoBehaviour
{
    public GameObject beePrefab;
    public GameObject rival;
    public int beeCount = 3;
    List<GameObject> bees;

    void Start()
    {
        bees = new List<GameObject>();
        for (int i = 0; i < beeCount; i++)
        {
            Vector3 spot = transform.position + new Vector3(i * 0.6f - 1.2f, 1.5f, 0);
            bees.Add(Instantiate(beePrefab, spot, Quaternion.identity));
        }

        int theirs = rival.GetComponent<Hive>().BeeCount();
        Debug.Log(name + " counts " + theirs + " rival bees");
    }

    public int BeeCount()
    {
        return bees.Count;
    }
}

Semua pelajaran di Dasar-Dasar Scripting Unity

Latihan sendiri: Playground Unity