Menu
CoddyTech

البحث بالاسم

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

يبحث GameObject.Find("Player") في المشهد عن كائن نشط يحمل هذا الاسم بالضبط، ويعيده، أو يعيد null إذا لم يوجد. يجنّبك ذلك توصيل حقل في Inspector، لكن له كلفة: إذ يبحث بين جميع الكائنات في المشهد. لذا استدعِه مرة واحدة في Start()، واحتفظ بالنتيجة في حقل. تعثر كاميرا المراقبة هذه على Player عند بدء اللعبة، وتراقبه في كل إطار:

private Transform player;

void Start()
{
    player = GameObject.Find("Player").transform;
}

void Update()
{
    transform.LookAt(player);
}

يجب أن يطابق الاسم تمامًا، بما في ذلك الأحرف الكبيرة والمسافات: "player" أو "Player " لا يعثر على شيء. كما أن Find يتجاوز الكائنات غير النشطة (المخفية). يعيد البحث الفاشل null دون تنبيه، ويظهر الخطأ في السطر التالي الذي يستخدم النتيجة: هنا، يؤدي .transform إلى إطلاق NullReferenceException. ويعثر مسار مثل "Car/Wheel" على Wheel الذي يُعدّ كائنًا فرعيًا لـ Car.

challenge icon

التحدي

متوسط

يُبلّغ الروبوت عن بُعد هدفه.

  1. في Start()، عيّن goal = GameObject.Find("Goal").transform;.
  2. في Update()، عند Input.GetKeyDown(KeyCode.Space)، سجّل "Distance to goal: " + Vector3.Distance(transform.position, goal.position).

اضغط على «العب» واضغط على مفتاح المسافة: تعرض وحدة التحكم Distance to goal: 5. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class Beacon : MonoBehaviour
{
    private Transform goal;

    void Start()
    {
        // اعثر على الكائن المسمى Goal واحتفظ بمكوّن Transform الخاص به في goal.
    }

    void Update()
    {
        // Space: سجّل المسافة إلى الهدف.
    }
}

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

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