Menu
CoddyTech

Trovare per nome

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 56 di 85.

GameObject.Find("Player") cerca nella scena un oggetto attivo con esattamente quel nome e lo restituisce, oppure restituisce null se non ne trova nessuno. Evita di collegare un campo nell’Inspector, ma ha un costo: esamina ogni oggetto della scena. Quindi chiamalo una volta, in Start(), e conserva il risultato in un campo. Questa telecamera di sicurezza trova il Player all’avvio del gioco e lo osserva a ogni fotogramma:

private Transform player;

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

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

Il nome deve corrispondere esattamente, comprese maiuscole e spazi: "player" o "Player " non trova nulla. Find ignora anche gli oggetti inattivi (nascosti). Se la ricerca non riesce, restituisce tranquillamente null e l’errore compare alla riga successiva che usa il risultato: in questo caso, .transform genera un’eccezione NullReferenceException. Un percorso come "Car/Wheel" trova Wheel, che è un figlio di Car.

challenge icon

Sfida

Medio

Il rover segnala quanto dista dal suo obiettivo.

  1. In Start(), imposta goal = GameObject.Find("Goal").transform;.
  2. In Update(), quando viene premuto Input.GetKeyDown(KeyCode.Space), registra "Distance to goal: " + Vector3.Distance(transform.position, goal.position).

Premi «Gioca» e premi la barra spaziatrice: la Console mostra Distance to goal: 5. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Beacon : MonoBehaviour
{
    private Transform goal;

    void Start()
    {
        // Trova l'oggetto chiamato Goal e conserva il suo Transform in goal.
    }

    void Update()
    {
        // Space: registra la distanza dall'obiettivo nel log.
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity