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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *