Unityに慣れるために、Lynda.comのビデオコースをフォローしています。現在、シーンのFirst PersonControllerの変換への参照を次のように取得しようとしています。
Transform targetObject; // Use this for initialization void Start () { targetObject = gameObject.Find("First Person Controller").transform; }
これは、スクリプト/クラス内にあります。 MonoBehaviour
から継承します。ただし、これによりエラーが発生します。
Static member `UnityEngine.GameObject.Find(string)" cannot be accessed with an instance reference, qualify it with a type name instead
ロジックを変更して、別のアプローチで目的の効果を得る方法があると確信しています。しかし、なぜこれがエラーになるのか理解できません。これはコースのインストラクターが使用するコードと同じであり、Unityスクリプトリファレンスから、MonoBehaviour
がgameObject
を継承していることがわかります。 Find()
メソッドを持つメンバー。したがって、このエラーは、すべてのMonoBehaviour
クラスに対してGameObject
インスタンスが1つしかないことを示しています。しかし、「私はまだそれを呼び出すことができるべきではありません」のメソッド?
Unity 4.1とC#を使用していますが、インストラクターは3.5(JSを使用)を使用しています。
コメント
- はい、ベンジャミンが言うように、それは'インストラクターが使用するのとほぼ同じコードです。大文字のGだけで整理できます。エラーメッセージを常に読むことを忘れないでください。" インスタンス参照ではアクセスできません。代わりに、タイプ名で修飾してください "は、'の間違いと、それを修正する方法を正確に説明しています。
回答
実際には単純なタイプミスをしただけです。 gameObject
は、スクリプトが添付されている現在のGameObject
です。 GameObject
がタイプです。エラーメッセージは、Find(string)
関数は、タイプ(GameObject
)で呼び出された場合にのみ機能し、タイプ( gameObject
)。
簡単に言うと、gameObject.Find("First Person Controller")
の代わりにGameObject.Find("First Person Controller")
を使用します。
コメント
- ああ、そうです、エラーメッセージを投稿して読んだ直後に、実際にこれを試しました。エラーは修正されましたが、おそらく'彼女にエラーが発生しなかったため、3.5またはjsで許可されていました。応答に感謝します!
- JavaScriptは非常に扱いにくく、予測できない場合があります。インスタンスを使用して静的メソッドにアクセスできるようになると思いますが、インスタンスは実際には使用されていないため、少し直感的ではありません。単に規則性のためにC#を使用することを強くお勧めします。
回答
Transform targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }