Śledziłem wraz z kursem wideo Lynda.com, aby zapoznać się z Unity. Obecnie próbuję pobrać odniesienie do transformacji kontrolera pierwszoosobowego sceny w następujący sposób:
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
A to jest w skrypcie / klasie, która dziedziczy po MonoBehaviour
. Jednak powoduje to błąd:
Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead
Jestem pewien, że istnieje sposób, aby zmienić logikę i uzyskać pożądany efekt przy użyciu innego podejścia. Ale nie rozumiem, dlaczego powoduje to błąd. Jest to ten sam kod, którego użył instruktor kursu, a na podstawie Unity Script Reference widzę, że MonoBehaviour
dziedziczy gameObject
element członkowski zawierający metodę Find()
. Więc ten błąd mówi, że istnieje tylko jedno wystąpienie GameObject
dla wszystkich klas MonoBehaviour
, prawda? Ale czy nadal nie powinienem być w stanie nazywać tego metodami?
Używam Unity 4.1 z C #, podczas gdy instruktor używa 3.5 (z JS), jeśli to pomaga.
Komentarze
- Tak, jak mówi Benjamin, jest to ' s prawie ten sam kod, którego używa instruktor. Tylko duże G powinno Cię rozwiązać. Pamiętaj, aby zawsze czytać komunikaty o błędach, " nie można uzyskać do niego dostępu za pomocą odwołania do instancji, zamiast tego określ je nazwą typu " mówi dokładnie, co ' jest nie tak i jak to naprawić.
Odpowiedź
Właśnie popełniłeś prostą literówkę. gameObject
to bieżący GameObject
, do którego jest dołączony skrypt. GameObject
to typ. Komunikat o błędzie mówi, że funkcja Find(string)
działa tylko wtedy, gdy jest wywoływana w przypadku typu (GameObject
), a nie instancji typu ( gameObject
).
Po prostu użyj GameObject.Find("First Person Controller")
zamiast gameObject.Find("First Person Controller")
.
Komentarze
- Ach, tak, próbowałem tego wkrótce po opublikowaniu i dokładniejszym przeczytaniu komunikatu o błędzie. Naprawiono błąd, ale być może było to dozwolone w 3.5 lub z js, ponieważ zdecydowanie nie ' nie spowodowało dla niej błędu. Dzięki za odpowiedź!
- JavaScript może być czasami trudny i nieprzewidywalny. Uważam, że pozwala to na użycie instancji w celu uzyskania dostępu do metod statycznych, co jest trochę nieintuicyjne, ponieważ instancja nie jest faktycznie używana. Gorąco polecam pracę z C # po prostu ze względu na jego regularność.
Odpowiedź
Przekształć targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }