Menu
CoddyTech

Awake ve Start

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 55 / 67.

Unity, bir nesne yüklendiğinde Awake() metodunu, Start() metodundan önce çağırır. Bu metodu kullanışlı kılan, nesneler arasındaki şu kuraldır: bir sahne başladığında, tüm nesnelerin Awake() metodu, herhangi bir nesnenin Start() metodu çalışmadan önce çalışır. Her turda hangi nesnenin önce çalışacağına Unity karar verir; buna güvenemezsin.

Bu Player betiği iki oyuncudadır: P1 (startLives 3) ve P2 (startLives 5). Her birinin rival alanı diğer oyuncuyu gösterir:

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

void Awake()
{
    lives = startLives;   // bu nesneyi ayarla
}

void Start()
{
    int theirs = rival.GetComponent<Player>().Lives();   // diğerine sor
    Debug.Log(name + " sees a rival with " + theirs + " lives");
}

public int Lives()
{
    return lives;
}

İlk sürümde lives, Start() içinde ayarlanıyordu. İlk başlayan oyuncu, rakibinin canları ayarlanmadan önce ona sordu ve 0 değerini kaydetti. Kurulum Awake() içine alındığında, Start() metodu sormaya başlamadan önce her iki oyuncunun da canları ayarlanmış olur; böylece P1, 5 ve P2, 3 değerini kaydeder. Buradan çıkarılacak alışkanlık şudur: bir nesnenin kendi alanlarını Awake() içinde ayarla, diğer nesnelerle ise Start() içinde iletişim kur.

challenge icon

Görev

Orta

İki arı kovanı, HiveA ve HiveB, aynı Hive betiğini çalıştırıyor. Her kovan arılarını (beeCount değerinden gelen 3 ve 5) bir listeye ekliyor, ardından rakibinin kaç arısı olduğunu günlüğe yazıyor: HiveA counts 5 rival bees ve HiveB counts 3 rival bees.

Oynat'a bas: kovanlardan biri NullReferenceException hatasıyla duruyor; çünkü rakibinin listesini, rakibi listeyi oluşturmadan önce istiyor. Betiği, herhangi bir kovan rakibinin arılarını saymadan önce her kovanın listesi ve arıları olacak şekilde düzelt. Sayma işlemini olduğu yerde bırak. Ardından Kontrol Et.

Kendin dene

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 iconKendini test et

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