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().
Tantangan
SedangPerbaiki sarangnya agar tidak ada yang menghitung list yang belum dibuat.
- Tambahkan
void Awake()keHive. - Pindahkan baris
bees = new List<GameObject>();dan perulanganfordariStart()keAwake(). - Biarkan dua baris penghitungan di
Start(): setiapAwake()berjalan sebelumStart()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
1Dasar-Dasar C# di Unity
Halo, UnityVariabelDesimal Memerlukan fTeks di ConsoleVariabel yang Menyimpan NilaiIf dan ElseBandingkan AngkaUlasan: Pengumpul Koin7Perulangan dan method
Ulangi dengan forPerulangan di dalam perulanganTulis methodMethod yang Mengembalikan NilaiarrayUlasan: Tangga10Menemukan Benda
Cari Berdasarkan NamaTagCari Berdasarkan TipeReferensi Lebih Baik daripada FindNull di UnityRangkuman: Koin Terdekat13Proyek: Hindari Balok
Karakter PelariBalok dari Langit2Buat Bergerak
Tempatkan KubusBergerak Setiap FrameBerputar Setiap DetikKemudikan dengan TombolRangkuman: Kemudikan Kubus5Vektor
Menjumlahkan VektorArahRuang Lokal dan DuniaKecepatan DiagonalJarak AntarobjekVector3 adalah StructRangkuman: Pilot Drone8GameObjects dan Komponen
Referensi di InspectorAmbil KomponenKomponen yang HilangTambahkan KomponenRequireComponentTampilkan dan SembunyikanRingkasan: Sakelar Lampu6Transformasi dan Hierarki
Objek Induk dan AnakKibarkan BenderaSkalaMelihat BendaBergerak Menuju TitikRekap: Bulan yang Mengorbit12Siklus Hidup Skrip
Awake dan StartUpdate dan LateUpdateOnEnable dan OnDisableUrutan Siklus HidupRekap: Lifecycle LoggerLatihan sendiri: Playground Unity