القيمة Null في Unity
جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 60 من 85.
لكائن Unity نصفان: كائن C# الذي يحتفظ به برنامجك النصي، وكائن المحرك الذي يقف وراءه. تزيل Destroy(obj) نصف المحرك في نهاية الإطار، لكن متغيرك يظل يشير إلى نصف C#، لذا فهو ليس null من منظور C# البحت. تتجاوز Unity العامل == لمعالجة ذلك: بمجرد تدمير الكائن، تصبح obj == null صحيحة، وكذلك الاختبار المختصر !obj. هذا هو null الوهمي في Unity.
لا تستخدم ?. و?? وis null العامل ==. فهي تختبر مرجع C#، الذي لا يزال موجودًا، لذا تسمح بتمرير الاستدعاء، ويؤدي التعامل مع الكائن المدمر إلى طرح MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it. يعرض هذا الملصق اسم متصدر السباق، الذي قد يُقصى (ويُدمّر):
[SerializeField] private Transform leader;
void Update()
{
// يُطلق استثناءً بمجرد تدمير leader: string shown = leader?.name ?? "nobody";
string shown = leader != null ? leader.name : "nobody";
Debug.Log("Leader: " + shown);
}بالنسبة إلى أي شيء مصدره UnityEngine.Object (كائنات اللعبة والمكوّنات والبرامج النصية الخاصة بك)، اختبر باستخدام == null أو != null أو if (obj)، واحتفظ بـ ?. و?? لكائنات C# العادية مثل السلاسل النصية. وتذكّر أيضًا أن Destroy تنتظر حتى نهاية الإطار: وحتى ذلك الحين، يظل الكائن حيًا وتكون == null غير صحيحة.
التحدي
متوسطأوقف أخطاء الطائرة المسيّرة بعد تدمير هدفها.
- في
Update()، استبدل السطرين بـif (target != null)، وهو اختبار null الخاص بـ Unity. - بداخله، اكتب
transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);.
اضغط «العب»: تطارد الطائرة المسيّرة الهدف، ثم تنتظر دون أخطاء في وحدة التحكم. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Chaser : MonoBehaviour
{
[SerializeField] private Transform target;
[SerializeField] private float speed = 2f;
void Start()
{
Destroy(target.gameObject, 2f); // يُدمَّر الهدف بعد 2 ثانية
}
void Update()
{
Vector3 goal = target?.position ?? transform.position;
transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
}
}
جميع دروس أساسيات البرمجة النصية في Unity
1أساسيات C# في Unity
مرحبًا يا Unityالمتغيراتالأعداد العشرية تحتاج إلى fالنص في وحدة التحكممتغيرات تتذكرإذا وإلامقارنة الأعدادمراجعة: جامع العملات7الحلقات والدوال
التكرار باستخدام forحلقات داخل حلقاتكتابة دالةدوال تُعيد إجابةالمصفوفاتمراجعة: السُّلّم10البحث عن الأشياء
البحث بالاسمالوسومالبحث حسب النوعالمراجع أفضل من Findالقيمة Null في Unityمراجعة: أقرب عملة5المتجهات
جمع المتجهاتالاتجاهاتالفضاء المحلي والعالميالسرعة القُطريةالمسافة بين الأشياءVector3 بنية Structمراجعة: قيادة الطائرة المسيّرة8كائنات اللعبة والمكوّنات
المراجع في Inspectorالحصول على مكوّنالمكوّنات المفقودةإضافة مكوّنRequireComponentالإظهار والإخفاءمراجعة: مفتاح الإضاءة6التحويلات والتسلسل الهرمي
الآباء والأبناءارفع العلمالتحجيمانظر إلى الأشياءتحرّك نحو نقطةمراجعة: القمر في مدارهتدرّب بنفسك: Playground لـ Unity