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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *