Jeg har fulgt med på et Lynda.com-videokurs for å gjøre meg kjent med Unity. Jeg prøver for øyeblikket å hente en referanse til en scene «First Person Controller» -transformasjon som følger:

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

Og dette er innenfor et skript / klasse som arver fra MonoBehaviour. Dette gir imidlertid feilen:

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

Jeg er sikker på at det er en måte å bare endre logikken og få ønsket innvirkning med en annen tilnærming. Men jeg forstår ikke hvorfor dette resulterer i en feil. Det er den samme koden som brukes av kursets instruktør, og fra Unity Script Reference kan jeg se at MonoBehaviour arver en gameObject medlem som har Find() metoden. Så denne feilen sier at det bare er en GameObject forekomst for alle MonoBehaviour klasser, ikke sant? Men burde jeg ikke fremdeles kunne kalle det?

Jeg bruker Unity 4.1 med C # mens instruktøren bruker 3.5 (med JS) hvis det hjelper noe.

Kommentarer

  • Jepp, som Benjamin sier, det ' s nesten den samme koden som instruktøren bruker. Bare en stor bokstav G skal ordne deg. Husk å alltid lese feilmeldingene dine, " kan ikke nås med en instansreferanse, kvalifiser det med et typenavn i stedet " forteller deg nøyaktig hva ' er galt og nøyaktig hvordan du fikser det.

Svar

Du lagde faktisk bare en enkel skrivefeil. gameObject er gjeldende GameObject som skriptet ditt er knyttet til. GameObject er typen. Feilmeldingen sier at Find(string) -funksjonen bare fungerer når den kalles på typen (GameObject) ikke en forekomst av typen ( gameObject).

Enkelt sagt, bruk GameObject.Find("First Person Controller") i stedet for gameObject.Find("First Person Controller").

Kommentarer

  • Ah, ja, jeg prøvde dette kort tid etter at jeg hadde postet og lest feilmeldingen tydeligere. Det løste feilen, men kanskje det var tillatt i 3.5 eller med js, fordi det definitivt ikke ' ikke reiste en feil for henne. Thx for svaret!
  • JavaScript kan til tider være ganske vanskelig og uforutsigbart. Jeg tror det tillater deg å bruke forekomster for å få tilgang til statiske metoder, noe som er litt uintuitivt fordi forekomsten faktisk ikke brukes. Jeg anbefaler på det sterkeste å jobbe med C # bare for dets regelmessighet.

Svar

Transform targetObject;

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *