Am urmărit împreună cu un curs video Lynda.com pentru a mă familiariza cu Unity. În prezent, încerc să iau o referință la transformarea unei prime persoane a scenei, după cum urmează:

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

Și aceasta se află într-un script / clasă care moștenește de la MonoBehaviour. Cu toate acestea, acest lucru dă eroarea:

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

Sunt sigur că există o modalitate de a schimba doar logica și de a obține efectul dorit cu o abordare diferită. Dar nu înțeleg de ce rezultă o eroare. Este același cod folosit de instructorul cursului și, din Unity Script Reference, pot vedea că MonoBehaviour moștenește un gameObject membru care are metoda Find(). Deci, această eroare spune că există o singură GameObject instanță pentru toate MonoBehaviour clase nu? Dar nu ar trebui să mai pot să-i spun metodele?

Folosesc Unity 4.1 cu C # în timp ce instructorul folosește 3.5 (cu JS) dacă asta ajută.

Comentarii

  • Da, așa cum spune Benjamin, ' este aproape același cod pe care îl folosește instructorul. Doar un G capital ar trebui să te rezolve. Nu uitați să citiți întotdeauna mesajele de eroare, " nu poate fi accesat cu o referință de instanță, calificați-l cu un nume de tip " vă spune exact ce este ' greșit și exact cum să remediați.

Răspuns

De fapt tocmai ați făcut o simplă greșeală de scriere. gameObject este GameObject actual la care este atașat scriptul. GameObject este tipul. Mesajul de eroare spune că funcția Find(string) funcționează numai atunci când este apelată la tip (GameObject), nu o instanță de tipul ( gameObject).

Pur și simplu, utilizați GameObject.Find("First Person Controller") în loc de gameObject.Find("First Person Controller").

Comentarii

  • Ah, da, am încercat acest lucru la scurt timp după ce am postat și am citit mai clar mesajul de eroare. A remediat eroarea, dar poate că a fost permisă în 3.5 sau cu js, deoarece cu siguranță nu ' nu a provocat o eroare pentru ea. Thx pentru răspuns!
  • Uneori JavaScript poate fi destul de complicat și imprevizibil. Cred că vă permite să utilizați instanțe pentru a accesa metode statice, ceea ce este puțin neintuitiv, deoarece instanța nu este de fapt utilizată. Vă recomand foarte mult să lucrați cu C # pur și simplu pentru regularitatea sa.

Răspuns

Transformă targetObject;

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *