Ho seguito un corso video su Lynda.com per familiarizzare con Unity. Attualmente sto tentando di ottenere un riferimento alla trasformazione del controller in prima persona di una scena come segue:

Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; } 

E questo è allinterno di uno script / classe che eredita da MonoBehaviour. Tuttavia, questo dà lerrore:

 Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead 

Sono sicuro che ci sia un modo per cambiare semplicemente la logica e ottenere leffetto desiderato con un approccio diverso. Ma non capisco perché questo si traduca in un errore. È lo stesso codice utilizzato dallistruttore del corso e da Unity Script Reference, posso vedere che MonoBehaviour eredita un gameObject membro che ha il metodo Find(). Quindi questo errore sta dicendo che esiste solo unistanza GameObject per tutte le classi MonoBehaviour, giusto? Ma non dovrei ancora essere in grado di chiamarlo metodi?

Sto usando Unity 4.1 con C # mentre linsegnante usa 3.5 (con JS) se questo aiuta.

Commenti

  • Sì, come dice Benjamin, ' è quasi lo stesso codice usato dallistruttore. Solo una G maiuscola dovrebbe risolverti. Ricorda di leggere sempre i tuoi messaggi di errore, " non è accessibile con un riferimento allistanza, qualificalo con un nome di tipo " ti sta dicendo esattamente cosa ' è sbagliato ed esattamente come risolverlo.

Risposta

In realtà hai appena fatto un semplice errore di battitura. gameObject è lattuale GameObject a cui è allegato lo script. GameObject è il tipo. Il messaggio di errore dice che la funzione Find(string) funziona solo quando viene chiamata sul tipo (GameObject) non è unistanza del tipo ( gameObject).

In poche parole, utilizza GameObject.Find("First Person Controller") invece di gameObject.Find("First Person Controller").

Commenti

  • Ah, sì, ho provato a farlo subito dopo aver postato e letto il messaggio di errore in modo più chiaro. Ha corretto lerrore, ma forse era consentito in 3.5 o con js, perché ' non sollevava alcun errore per lei. Grazie per la risposta!
  • JavaScript può essere abbastanza complicato e imprevedibile, a volte. Credo che ti consenta di utilizzare istanze per accedere a metodi statici, il che non è intuitivo perché listanza non viene effettivamente utilizzata. Consiglio vivamente di lavorare con C # semplicemente per la sua regolarità.

Answer

Transform targetObject;

// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); } 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *