Olen seurannut yhdessä Lynda.com-videokurssin kanssa tutustuaksesi Unityyn. Yritän napata viittausta kohtauksen ensimmäisen persoonan ohjaimen muunnokseen seuraavasti:
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
Ja tämä on komentosarjassa / luokassa, joka perii osoitteesta MonoBehaviour
. Tämä antaa kuitenkin virheen:
Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead
Olen varma, että on olemassa tapa vain muuttaa logiikkaa ja saada haluttu vaikutus erilaisella lähestymistavalla. Mutta en ymmärrä, miksi tämä johtaa virheeseen. Se on sama koodi, jota kurssin ohjaaja käyttää, ja Unity Script Reference -sivulta saan selville, että MonoBehaviour
perii gameObject
jäsen, jolla on menetelmä Find()
. Joten tämä virhe tarkoittaa, että GameObject
-esiintymää on kaikille MonoBehaviour
-luokille oikein? Mutta eikö minun pitäisi silti voida kutsua sen menetelmiksi?
Käytän Unity 4.1: tä C #: lla, kun ohjaaja käyttää 3.5: tä (JS: n kanssa), jos se auttaa.
Kommentit
- Jep, kuten Benjamin sanoo, se ' s melkein sama koodi, jota ohjaaja käyttää. Vain iso kirjain G pitäisi selvittää sinut. Muista lukea aina virheilmoitukset, " ei voida käyttää ilmentymäviitteellä, määritä se tyypin nimellä sen sijaan " kertoo tarkalleen, mitä ' on väärin ja miten se korjataan.
Vastaa
Teit juuri yksinkertaisen kirjoitusvirheen. gameObject
on nykyinen GameObject
, johon komentosarjasi on liitetty. GameObject
on tyyppi. Virhesanoma sanoo, että Find(string)
-toiminto toimii vain, kun sitä kutsutaan tyypille (GameObject
), ei tyypin esiintymälle ( gameObject
).
Yksinkertaisesti sanottuna käytä GameObject.Find("First Person Controller")
gameObject.Find("First Person Controller")
: n sijaan.
Kommentit
- Ah, joo, yritin itse asiassa tätä pian virheviestin lähettämisen ja selkeämmän lukemisen jälkeen. Se korjasi virheen, mutta ehkä se sallittiin versiossa 3.5 tai js: llä, koska se ei todellakaan aiheuttanut virhettä hänelle '. Thx vastausta varten!
- JavaScript voi olla toisinaan melko hankala ja arvaamaton. Uskon, että se antaa sinun käyttää instansseja staattisten menetelmien käyttämiseen, mikä on vähän järjetöntä, koska instanssia ei tosiasiallisesti käytetä. Ehdotan, että työskentelet C #: n kanssa yksinkertaisesti sen säännöllisyyden vuoksi.
Vastaa
Muunna targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }