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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük