Menu
CoddyTech

Awake dan Start

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

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

Script Player ini dipasang pada dua player, P1 (startLives 3) dan P2 (startLives 5), dan masing-masing memiliki yang lain sebagai rival:

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 menetapkan lives di Start(). Player yang memulai lebih dahulu lalu bertanya kepada rivalnya sebelum rival itu menetapkan jumlah nyawanya, sehingga mencatat 0. Dengan pengaturan di Awake(), kedua player sudah memiliki jumlah nyawa sebelum Start() salah satunya bertanya, sehingga P1 mencatat 5 dan P2 mencatat 3. Kebiasaan yang perlu diterapkan: siapkan field milik object itu sendiri di Awake(), lalu berinteraksilah dengan object lain di Start().

challenge icon

Tantangan

Sedang

Dua sarang lebah, HiveA dan HiveB, menjalankan skrip Hive yang sama. Setiap sarang membuat lebahnya (3 dan 5, dari beeCount) ke dalam list, lalu mencatat jumlah lebah yang dimiliki sarang saingannya: HiveA counts 5 rival bees dan HiveB counts 3 rival bees.

Tekan Play: salah satu sarang berhenti dengan NullReferenceException, karena sarang itu meminta list milik saingannya sebelum saingannya membuat list tersebut. Perbaiki skrip agar setiap sarang memiliki list dan lebahnya sebelum sarang mana pun menghitung jumlah lebah saingannya. Biarkan penghitungan tetap di tempatnya. Lalu tekan Check.

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;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Dasar-Dasar Scripting Unity