Awake ו-Start
חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 70 מתוך 85.
Unity קוראת ל־Awake() ברגע שאובייקט נטען, לפני Start() שלו. מה שהופך אותה לשימושית הוא הכלל שחל על כל האובייקטים: כשסצנה מתחילה, Awake() של כל אובייקט רצה לפני Start() של כל אובייקט. Unity קובעת איזה אובייקט יפעל ראשון בכל סבב, ואי אפשר להסתמך על הסדר הזה.
הסקריפט הזה של Player נמצא אצל שני שחקנים, P1 (עם startLives 3) ו־P2 (עם startLives 5), וכל אחד מהם מגדיר את האחר בתור rival שלו:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // אתחל את האובייקט הזה
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // בקש מהאובייקט השני
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}בגרסה הראשונה, הערך של lives נקבע בתוך Start(). השחקן שהתחיל ראשון שאל אז את היריב שלו לפני שהיריב קבע את מספר החיים שלו, והדפיס 0. כשמגדירים את הערך בתוך Awake(), לשני השחקנים כבר יש את מספר החיים שלהם לפני שאחת מהפונקציות Start() שואלת, ולכן P1 מדפיס 5 ו־P2 מדפיס 3. הכלל שכדאי לאמץ: את השדות של האובייקט עצמו מאתחלים בתוך Awake(), ומתקשרים עם אובייקטים אחרים בתוך Start().
אתגר
בינוניתקנו את הכוורות כך שאף אחת מהן לא תספור רשימה שעדיין לא נוצרה.
- הוסיפו את
void Awake()אלHive. - העבירו את השורה
bees = new List<GameObject>();ואת לולאתforמתוךStart()אלAwake(). - השאירו את שתי שורות הספירה בתוך
Start(): כלAwake()פועלת לפני כלStart().
לחצו על "שחק": כל כוורת מתעדת את מספר הדבורים בכוורת היריבה שלה, HiveA סופרת 5 דבורים יריבות, ללא שגיאה. ואז לחצו על "בדיקה".
נסו בעצמכם
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
1יסודות C# ב-Unity
שלום, Unityמשתניםמספרים עשרוניים צריכים fטקסט ב-Consoleמשתנים ששומרים ערכיםאם ואחרתהשוואת מספריםחזרה: אוסף המטבעות5וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן8אובייקטי משחק ורכיבים
הפניות ב-Inspectorקבלת רכיברכיבים חסריםהוספת רכיבRequireComponentהצגה והסתרהחזרה: מתג תאורה6טרנספורמציות והיררכיה
הורים וילדיםלהניף את הדגלקנה מידהלהסתכל על דבריםלנוע לעבר נקודהסיכום: הירח המקיף12מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: יומן מחזור החייםתרגלו בעצמכם: Unity אונליין