본문 바로가기
개발/Unity 내일배움캠프 TIL

Unity 스크립터블 오브젝트로 이벤트 시스템 만들기

by 석시 2023. 11. 15.



스크립터블 오브젝트의 사용 방법 중 스크립터블 오브젝트로 이벤트 시스템을 만들어 관리할 수 있는 방법이 있어서 정리하고자 한다.

기본적으로 다음과 같이 선언한다.

[CreateAssetMenu(fileName = "EventSO", menuName = "Scriptable Object/EventSO")]
public class EventSO : ScriptableObject
{
    private List<EventListener> listners = new List<EventListener>();

    public void Subscribe(EventListener listener)
    {
        listeners.Add(listener);
    }
    
    public void Unsubscribe(EventListener listener)
    {
        listeners.Remove(listener);
    }
    
    public void Publish()
    {
        foreach(EventListener listener in listeners)
            listener.OnEventTrigger();
    }
}

public class EventListener : MonoBehaviour
{
    public EventSO Event;
    public UnityEvent EventMessage;

    private void OnEnable()
    {
        Event.Subscribe(this);
    }
    
    private void OnDisable()
    {
        Event.Unsubscribe(this);
    }
    
    public void OnEventTrigger()
    {
        EventMessage.Invoke();
    }
}

앞선 게시글에서 언급한 이벤트 버스 패턴의 전역성을 없애고 일종의 오브젝트화를 한 이벤트 시스템이라고 생각하면 좋다.


Uploaded by N2T