Lynda.com 비디오 과정을 따라 Unity에 익숙해졌습니다. 현재 다음과 같이 장면의 1 인칭 컨트롤러 변환에 대한 참조를 가져 오려고합니다.
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
인스턴스 만 있다는 것을 의미합니다. 맞습니까? 하지만 “아직도 그 메서드를 호출 할 수 있어야하지 않습니까?”
저는 C #과 함께 Unity 4.1을 사용하고 있지만 도움이되는 경우 강사는 3.5 (JS 포함)를 사용합니다.
댓글
- 예, Benjamin이 말했듯이 ' 강사가 사용하는 코드와 거의 동일합니다. 대문자 G 만 있으면됩니다. 항상 오류 메시지를 읽어야합니다. " 인스턴스 참조로 액세스 할 수 없습니다. 대신 유형 이름으로 한정 "는 ' 무엇이 잘못되었는지 정확히 알려주고 정확한 해결 방법을 알려줍니다.
답변
실제로 방금 오타를 입력했습니다. gameObject
는 스크립트가 첨부 된 현재 GameObject
입니다. GameObject
는 유형입니다. 오류 메시지는 Find(string)
함수가 유형의 인스턴스가 아닌 유형 (GameObject
)에서 호출 될 때만 작동한다는 것입니다 ( gameObject
).
간단히 말해서 gameObject.Find("First Person Controller")
대신 GameObject.Find("First Person Controller")
를 사용하세요.
댓글
- 아, 맞습니다. 오류 메시지를 더 명확하게 게시하고 읽은 직후에 실제로 시도했습니다. 오류를 수정했지만 3.5 또는 js에서 허용되었을 수 있습니다. 확실히 ' 그녀에게 오류가 발생하지 않았기 때문입니다. 응답 해 주셔서 감사합니다!
- 자바 스크립트는 때때로 매우 까다 롭고 예측할 수 없습니다. 인스턴스가 실제로 사용되지 않기 때문에 약간 직관적이지 않은 정적 메서드에 액세스하기 위해 인스턴스를 사용할 수 있다고 생각합니다. 단순히 규칙 성을 위해 C #으로 작업하는 것이 좋습니다.
답변
Transform targetObject;
// Use this for initialization void Start () { targetObject = GameObject.Find("First Person Controller").GetComponent<Transform>(); }