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.
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;
}
}
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
1İlk Betiğiniz
Merhaba, UnityKüpü YerleştirHer Karede Hareket EtHer Saniye DönTuşlarla Yön VerÖzet: Küpü Sür4Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir YapıdırÖzet: Drone Pilotu7Proje: Yıldızı Yakala
YakalayıcıDüşen Bir Yıldız10Betik Yaşam Döngüsü
Awake ve StartUpdate ve LateUpdateOnEnable ve OnDisableYaşam Döngüsü SırasıÖzet: Yaşam Döngüsü Günlükleyicisi5Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarÖlçekNesnelere BakışBir Noktaya Doğru HareketTekrar: Yörüngedeki Ay6GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBir Bileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı