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النص في وحدة التحكممتغيرات تتذكرإذا وإلامقارنة الأعدادمراجعة: جامع العملات7الحلقات والدوال
التكرار باستخدام forحلقات داخل حلقاتكتابة دالةدوال تُعيد إجابةالمصفوفاتمراجعة: السُّلّم5المتجهات
جمع المتجهاتالاتجاهاتالفضاء المحلي والعالميالسرعة القُطريةالمسافة بين الأشياءVector3 بنية Structمراجعة: قيادة الطائرة المسيّرة8كائنات اللعبة والمكوّنات
المراجع في Inspectorالحصول على مكوّنالمكوّنات المفقودةإضافة مكوّنRequireComponentالإظهار والإخفاءمراجعة: مفتاح الإضاءة6التحويلات والتسلسل الهرمي
الآباء والأبناءارفع العلمالتحجيمانظر إلى الأشياءتحرّك نحو نقطةمراجعة: القمر في مداره12دورة حياة السكربت
Awake و StartUpdate و LateUpdateOnEnable و OnDisableترتيب دورة الحياةمراجعة: مسجّل دورة الحياةتدرّب بنفسك: Playground لـ Unity