유니티 제네릭 클래스의 AddComponent 널 오류 ( Unity Genetic class AddComponenet Null )

 

 

상태 패턴을 관리하는 클래스는 범용적으로 만들기 위해 제네릭 클래스로 만들었다.

제네릭 클래스여도 Mono를 상속받지 않는다면 new 로 초기화하면 된다.

 

아래의 StateMachine<T>는 딱히 Mono를 상속안받아도 되는 클래스지만 디버깅을 위해 Mono를 붙여주었다.

 

그런데 몬스터가 가지고 있게 하려고 AddComponenet를 하니 Null 오류가 발생한다.

// 컴포넌트로서 들어갈 클래스
public class StateMachine<T> : MonoBehaviour
{
}

public abstract class MonsterBase : CharacterBase
{
    [SerializeField] public StateMachine<MonsterBase> StateMachine;
    
    void Start()
    {
        // Null이 발생하여 StateMachine에는 아무것도 할당되지 않는다.
        StateMachine = gameObject.AddComponent<StateMachine<MonsterBase>>(); 
    }
}

 

유니티 포럼등에서 추천하는 방법은, 제네릭 클래스를 상속받는 클래스를 하나 만들고서 할당하는 방법.

불필요한 상속이라는게 좀 그렇지만, 빠르게 적용이 가능하다.

 

// 컴포넌트로서 들어갈 클래스
public class StateMachine<T> : MonoBehaviour
{
}

public class StateMachineMonster : StateMachine<MonsterBase>
{
}

public abstract class MonsterBase : CharacterBase
{
    [SerializeField] public StateMachineMonster StateMachine;
    
    void Start()
    {
        // 정상적으로 StateMachine에 할당된다.
        StateMachine = gameObject.AddComponent<StateMachineMonster>(); 
    }
}

 

 

 

 

댓글

Designed by JB FACTORY