Jag har följt med en videokurs på Lynda.com för att bekanta mig med Unity. Jag försöker för närvarande ta en referens till en scen ”First Person Controller” -transformation enligt följande:
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
Och detta ligger inom ett skript / klass som ärver från MonoBehaviour
. Detta ger dock felet:
Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead
Jag är säker på att det finns ett sätt att bara ändra logiken och få önskad påverkan med ett annat tillvägagångssätt. Men jag förstår inte varför detta resulterar i ett fel. Det är samma kod som används av kursens instruktör och från Unity Script Reference kan jag se att MonoBehaviour
ärver en gameObject
medlem som har metoden Find()
. Så detta fel säger att det bara finns en GameObject
instans för alla MonoBehaviour
klasser, eller hur? Men ska jag inte kunna kalla det för metoder?
Jag använder Unity 4.1 med C # medan instruktören använder 3.5 (med JS) om det hjälper.
Kommentarer
- Japp, som Benjamin säger, det ' s nästan samma kod som instruktören använder. Bara en stor bokstav G borde reda ut dig. Kom ihåg att alltid läsa dina felmeddelanden, " kan inte nås med en instansreferens, kvalificera det med ett typnamn istället " berättar exakt vad ' är fel och exakt hur du fixar det.
Svar
Du gjorde faktiskt bara ett enkelt skrivfel. gameObject
är den aktuella GameObject
som ditt skript är kopplat till. GameObject
är typen. Felmeddelandet säger att funktionen Find(string)
bara fungerar när den anropas av typen (GameObject
) inte en instans av typen ( gameObject
).
Enkelt uttryckt, använd GameObject.Find("First Person Controller")
istället för gameObject.Find("First Person Controller")
.
Kommentarer
- Ah, ja, jag försökte det faktiskt strax efter att jag publicerat och läst felmeddelandet tydligare. Det fixade felet, men kanske var det tillåtet i 3.5 eller med js, eftersom det definitivt inte gjorde ' t för ett fel för henne. Thx för svaret!
- JavaScript kan ibland vara ganska knepigt och oförutsägbart. Jag tror att det tillåter dig att använda instanser för att komma åt statiska metoder, vilket är lite ointuitivt eftersom instansen inte faktiskt används. Jag rekommenderar starkt att du arbetar med C # helt enkelt för dess regelbundenhet.
Svar
Transformera targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }