Menu
CoddyTech

المكوّنات المفقودة

جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 45 من 85.

عندما لا يكون المكوّن الذي تطلبه موجودًا على الكائن، لا يمنعك GetComponent من المتابعة. في المحرر، يعيد لك بديلًا يُقارن على أنه null، ويُصدر Unity استثناءً في أول مرة يستخدم فيها الكود هذا البديل. ينبغي لهذه الكرة أن تقفز عند الضغط على Space، لكن لم يُضف إليها أحد مكوّن Rigidbody:

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.AddForce(Vector3.up * 300f);
    }
}

عند الضغط على Space، تظهر الرسالة MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it.. تذكر الرسالة النوع المفقود والكائن. أضف المكوّن في Inspector، أو اطلبه أولًا عندما يكون من المحتمل أن يكون غيابه عن الكائن مقصودًا. تُعيد TryGetComponent(out rb) القيمة true وتملأ rb عندما يكون المكوّن موجودًا، وتُعيد false من دون خطأ عندما لا يكون موجودًا (تتيح out للطريقة إعادة قيمة عبر المتغير):

bool canHop;

void Start()
{
    canHop = TryGetComponent(out rb);
}

بعد ذلك، لا تدفع Update() الكرة إلا if (canHop). خارج المحرر، في لعبة مبنية، تُعيد GetComponent قيمة null عادية بدلًا من ذلك، لذا يظهر الخطأ نفسه هناك على هيئة NullReferenceException.

challenge icon

التحدي

متوسط

لا يحتوي المصباح 2 على ضوء: اجعل مفتاح المسافة يتجاوزه، وأظهر أنه معطّل.

  1. في Start()، استبدل سطر GetComponent بـ hasBulb = TryGetComponent(out bulb);، مع حقل bool hasBulb;.
  2. عندما تكون قيمة hasBulb خاطئة، لوّن المصباح: GetComponent<Renderer>().material.color = Color.gray;.
  3. في Update()، بدّل حالة الضوء فقط عندما تكون قيمة hasBulb صحيحة.

اضغط على «العب» ثم اضغط على مفتاح المسافة: ستتبدّل حالة المصابيح السليمة، من دون ظهور أي خطأ. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class LampSwitch : MonoBehaviour
{
    Light bulb;

    void Start()
    {
        bulb = GetComponent<Light>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            bulb.enabled = !bulb.enabled;
        }
    }
}

جميع دروس أساسيات البرمجة النصية في Unity

تدرّب بنفسك: Playground لـ Unity