Unity에서 MonoBehaviour 스크립트 인스턴스화 상속으로 인해 발생하는 NullReferenceException 해결
Unity에서 MonoBehaviour에서 상속되는 Rule 클래스의 새 인스턴스를 생성하려고 하면 이상한 문제가 발생할 수 있습니다. 매개변수가 올바르게 설정되었더라도 new
키워드에 의해 반환된 클래스 인스턴스가 비어 있습니다.
문제 원인:
이 문제의 근본 원인은 new
키워드를 사용하여 MonoBehaviour 클래스를 인스턴스화할 수 없다는 것입니다. MonoBehaviour를 상속한 후 올바른 인스턴스화 방법은 AddComponent()
또는 Instantiate()
을 사용하는 것입니다.
해결책 1: AddComponent() 사용
기존 GameObject에 규칙 스크립트를 추가하려면 AddComponent()
:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = gameObject.AddComponent<Rule>(); }</code>
해결책 2: Instantiate() 및 프리팹 사용
규칙 스크립트 프리팹이 있는 경우 다음을 사용할 수 있습니다. Instantiate()
:
<code class="language-C#">public Rule rulePrefab; Rule rule2; void Start() { rule2 = Instantiate(rulePrefab) as Rule; }</code>
해결책 3: 첨부된 스크립트에서 기존 인스턴스 가져오기
Rule 스크립트가 GameObject에 첨부된 경우 해당 인스턴스를 직접 얻을 수 있습니다.
<code class="language-C#">Rule rule2; void Start() { rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>(); }</code>
MonoBehaviour가 아닌 클래스에 대한 참고 사항:
Rule 클래스가 MonoBehaviour를 상속하지 않는 경우 new
키워드를 사용하여 인스턴스를 생성하고 필요에 따라 생성자를 사용할 수 있습니다.
요약:
MonoBehaviour에서 상속된 클래스를 사용하는 경우 new
키워드를 사용하여 인스턴스를 생성하지 마세요. 대신 AddComponent()
, Instantiate()
또는 첨부된 스크립트에서 기존 인스턴스 검색과 같은 권장 방법을 사용해야 합니다.
위 내용은 Unity에서 MonoBehaviour 파생 클래스를 인스턴스화할 때 'new'가 Null을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!