Awake ve Start
Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 70 / 85.
Unity, bir nesne yüklendiğinde Start() çağrılmadan önce Awake() çağrısını yapar. Bu yöntemi kullanışlı kılan, nesneler genelinde geçerli olan kuraldır: bir sahne başladığında, herhangi bir nesnenin Start() çağrısından önce tüm nesnelerin Awake() çağrıları çalışır. Her turda hangi nesnenin önce çalışacağına Unity karar verir; buna güvenemezsin.
Bu Player betiği iki oyuncuda, P1 (startLives 3) ve P2 (startLives 5), bulunuyor ve her birinin diğer oyuncusu rival olarak ayarlanmış:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // bu nesneyi hazırla
}
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. Önce başlayan oyuncu, rakibinin canları ayarlanmadan ona sordu ve 0 değerini kaydetti. Kurulum Awake() içine taşındığında, Start() içindeki sorgulardan önce her iki oyuncunun da canı ayarlanmış olur; bu nedenle P1, 5; P2 ise 3 değerini kaydeder. İzlemen gereken 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 kovanın da henüz oluşturulmamış bir listeyi saymaması için kovanları düzelt.
Hiveiçinevoid Awake()ekle.bees = new List<GameObject>();satırını vefordöngüsünüStart()içindenAwake()içine taşı.Start()içindeki iki sayma satırını bırak: herAwake(), herhangi birStart()çalışmadan önce çalışır.
“Oyna” düğmesine bas: her kovan rakibinin arılarını günlüğe yazar; HiveA, rakibin 5 arısını sayar ve hata oluşmaz. Ardından “Kontrol et” düğmesine bas.
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;
}
}
Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler
1Unity'de C# Temelleri
Merhaba, UnityDeğişkenlerOndalık Sayılar için f GerekirKonsolda MetinHatırlayan DeğişkenlerEğer ve DeğilseSayıları KarşılaştırmaTekrar: Coin Collector4Girdi
Basılı, Basılı Tutulmuş, BırakılmışEksenlerAdlandırılmış DüğmelerFare DüğmeleriTekrar: Zıplama Yükleme7Döngüler ve Metotlar
for ile tekrarlamaİç içe döngülerBir metot yazmaYanıt veren metotlarDizilerTekrar: Merdiven10Nesneleri Bulma
Ada Göre BulEtiketlerTüre Göre BulReferanslar Bulmaktan İyidirUnity'de NullÖzet: En Yakın Madeni Para13Proje: Bloklardan Kaç
KoşucuGökyüzünden Bloklar5Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir Struct'tırTekrar: Drone Pilotu8GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı3Inspector
Inspector AlanlarıSerializeFieldOndalıklı Sayılar ve MathfInspector ÖzellikleriTekrar: Asansör6Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarBayrağı Göndere ÇekÖlçekNesnelere BakBir Noktaya Doğru Hareket EtTekrar: Yörüngedeki Ay9Proje: Yıldızı Yakala
YakalayıcıDüşen Bir Yıldız12Betiğin Yaşam Döngüsü
Awake ve StartUpdate ve LateUpdateOnEnable ve OnDisableYaşam Döngüsü SırasıTekrar: Yaşam Döngüsü KaydedicisiKendi başına pratik yap: Unity playground