Lynda.com videotanfolyamot követem, hogy megismerkedjek a Unity-vel. Jelenleg megpróbálok hivatkozást megragadni egy jelenet első személyi vezérlőjének átalakítására az alábbiak szerint:
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
És ez egy olyan szkriptben / osztályban található, amely örökli a következőt: MonoBehaviour
. Ez azonban megadja a hibát:
Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead
Biztos vagyok benne, hogy van mód arra, hogy csak megváltoztassuk a logikát, és más megközelítéssel érjük el a kívánt hatást. De nem értem, hogy ez miért okoz hibát. Ugyanaz a kód, amelyet a kurzus oktatója használ, és a Unity Script Reference-ből kiderül, hogy a MonoBehaviour
gameObject
tag, amely rendelkezik a Find()
módszerrel. Tehát ez a hiba azt mondja, hogy csak egy GameObject
példány létezik az összes MonoBehaviour
osztályban? De nem kellene még így is neveznem a módszereit?
A Unity 4.1-et a C # -val használom, míg az oktató a 3.5-ös verziót használja (JS-sel), ha ez segít.
Megjegyzések
- Igen, ahogy Benjamin mondja, ' s majdnem ugyanaz a kód, amelyet az oktató használ. Csak egy nagybetűvel kell G rendezni. Ne felejtse el mindig elolvasni a hibaüzeneteket, az " nem érhető el példány hivatkozással, inkább típusnévvel jelölje meg " pontosan megmondja, mi a ' hibája, és hogyan lehet pontosan kijavítani.
Válasz
Valójában csak egy egyszerű elírást hajtott végre. A gameObject
az a jelenlegi GameObject
, amelyhez a parancsfájlja csatolva van. A GameObject
a típus. A hibaüzenet azt mondja, hogy a Find(string)
függvény csak akkor működik, ha a típust (GameObject
) hívják meg, nem pedig a ( gameObject
).
Egyszerűen fogalmazva használja a GameObject.Find("First Person Controller")
szót a gameObject.Find("First Person Controller")
helyett.
Megjegyzések
- Á, igen, ezt valóban nem sokkal a közzététel és a hibaüzenet egyértelműbb elolvasása után kipróbáltam. Javította a hibát, de talán megengedték a 3.5-ös vagy a js-ben, mert határozottan nem emelt ' hibát neki. Gyors válasz a válaszért!
- A JavaScript időnként meglehetősen trükkös és kiszámíthatatlan lehet. Úgy gondolom, hogy ez lehetővé teszi a példányok használatát a statikus módszerekhez való hozzáféréshez, ami kissé nem értelmezhető, mert a példányt valójában nem használják. Nagyon javaslom, hogy működjön együtt a C # -val pusztán annak szabályossága miatt.
Válasz
A célobjektum átalakítása;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }