Jeg har fulgt sammen med et videokursus på Lynda.com for at gøre mig bekendt med Unity. Jeg forsøger i øjeblikket at få fat i en henvisning til scenens “First Person Controller” -transformation som følger:
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
Og dette er inden for et script / klasse, der arver fra MonoBehaviour
. Dette giver dog fejlen:
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 der er en måde at bare ændre logikken og få den ønskede effekt med en anden tilgang. Men jeg forstår ikke, hvorfor dette resulterer i en fejl. Det er den samme kode, som instruktøren af kurset bruger, og fra Unity Script Reference kan jeg se, at MonoBehaviour
arver en gameObject
medlem, der har metoden Find()
. Så denne fejl siger, at der kun er en GameObject
instans for alle MonoBehaviour
klasser, ikke? Men skal jeg ikke stadig kunne kalde det metoder?
Jeg bruger Unity 4.1 med C #, mens instruktøren bruger 3.5 (med JS), hvis det hjælper noget.
Kommentarer
- Ja, som Benjamin siger, er det ' s næsten den samme kode, som instruktøren bruger. Bare en stor G skal ordne dig. Husk altid at læse dine fejlmeddelelser, " kan ikke fås med en instansreference, kvalificer det med et typenavn i stedet " fortæller dig nøjagtigt, hvad ' er forkert, og præcis hvordan du løser det.
Svar
Du lavede faktisk en simpel skrivefejl. gameObject
er den aktuelle GameObject
som dit script er knyttet til. GameObject
er typen. Fejlmeddelelsen siger, at Find(string)
-funktionen kun fungerer, når den kaldes på typen (GameObject
) ikke en forekomst af typen ( gameObject
).
Kort sagt, brug GameObject.Find("First Person Controller")
i stedet for gameObject.Find("First Person Controller")
.
Kommentarer
- Ah, ja, jeg prøvede faktisk dette kort efter at have sendt og læst fejlmeddelelsen mere tydeligt. Det fik fejlen, men måske var det tilladt i 3.5 eller med js, fordi det bestemt ikke ' ikke rejste en fejl for hende. Thx for svaret!
- JavaScript kan til tider være ganske vanskeligt og uforudsigeligt. Jeg tror, det giver dig mulighed for at bruge forekomster til at få adgang til statiske metoder, hvilket er lidt uintuitivt, fordi forekomsten faktisk ikke bruges. Jeg foreslår stærkt at arbejde med C # simpelthen for dets regelmæssighed.
Svar
Transformer targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }