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

תרגלו בעצמכם: Unity אונליין