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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *