본문 바로가기

게임개발

[Unity] AddComponent 확장메서드 만들기

  • 상황: 애니메이션 상태 컴포넌트를 추가하면서 그 컴포넌트 내에 가공된 데이터를 전달해야함.

스프라이트 데이터가 있으면 생성하고 없으면 생성하지 않는 과정을 애니메이션 마다 여러 번 반복하다보니 코드가 너무 더러워져서 AddComponent의 확장메서드를 만들기로 했다.

public static class ExtensionMethods
{
    public static T AddComponentState<T>(this GameObject obj, Sprite[] sprites) where T : State
    {
        if (sprites != null)
        {
            var component = obj.AddComponent<T>(); 
            component.Init(sprites);
            return component;
        }
        else return null;
    }
}

확장 메서드만 모아 놓은 static 클래스를 생성한 뒤 그 안에 확장 메서드를 정의했다.

State를 상속 받은 클래스를 추가할 때만 사용하고

State 내에 Init 함수가 있음을 보장해줘야 하기 때문에 인터페이스를 활용했다.

생성 후 상태 컴포넌트를 상태머신 트랜지션에 넣는 작업을 하기 때문에 변수에 할당 할 수 있도록 리턴값도 주었다.

참고로 게임 오브젝트가 컴포넌트로 가질 수 있는 클래스는 MonoBehaviour를 상속 받은 클래스 뿐이다.

public abstract class State : MonoBehaviour, IState
{
    public void Init(Sprite[] sprites)
    {
		...
    }
    
    ...
}

interface IState
{
    public void Init(Sprite[] sprites);
}

이와 유사하게 GetCompent후 이니셜라이즈 작업을 하는 등 확장 메서드를 다양하게 활용 중이다.