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>(); }