Sledoval jsem spolu s video kurzem Lynda.com, abych se seznámil s Unity. V současné době se pokouším zachytit odkaz na transformaci ovladače First Person Controller scény následujícím způsobem:
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
A to je ve skriptu / třídě, která dědí z MonoBehaviour
. To však dává chybu:
Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead
Jsem si jist, že existuje způsob, jak jen změnit logiku a získat požadovaný efekt jiným přístupem. Ale nerozumím, proč to má za následek chybu. Jedná se o stejný kód, který používá instruktor kurzu, a z příručky Unity Script Reference vidím, že MonoBehaviour
dědí gameObject
člen, který má metodu Find()
. Tato chyba tedy říká, že pro všechny třídy MonoBehaviour
existuje pouze jedna GameObject
instance, že? Ale neměl bych to stále nazývat metodami?
Používám Unity 4.1 s C #, zatímco instruktor používá 3.5 (s JS), pokud to některému pomůže.
Komentáře
- Ano, jak říká Benjamin, ' s téměř stejný kód, jaký používá instruktor. Jen velké písmeno G by vás mělo vyřešit. Nezapomeňte si vždy přečíst chybové zprávy, " nelze získat přístup s odkazem na instanci, místo toho jej označte názvem typu " vám říká, co přesně ' je špatně a jak přesně to napravit.
Odpovědět
Ve skutečnosti jste právě udělali jednoduchý překlep. gameObject
je aktuální GameObject
, ke kterému je váš skript připojen. GameObject
je typ. Chybová zpráva říká, že funkce Find(string)
funguje pouze v případě, že je volána na typu (GameObject
), nikoli na instanci typu ( gameObject
).
Jednoduše řečeno, místo gameObject.Find("First Person Controller")
použijte GameObject.Find("First Person Controller")
.
Komentáře
- Aha, jo, vlastně jsem to zkusil krátce po zveřejnění a jasnějším přečtení chybové zprávy. Opravila chybu, ale možná to bylo povoleno v 3.5 nebo s js, protože to pro ni rozhodně ' t nevyvolalo chybu. Díky za odpověď!
- JavaScript může být občas docela složitý a nepředvídatelný. Věřím, že vám umožňuje používat instance pro přístup ke statickým metodám, což je trochu neintuitivní, protože instance se ve skutečnosti nepoužívá. Velmi doporučuji pracovat s C # jednoduše kvůli jeho pravidelnosti.
Odpovědět
Transformovat targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }