스크립터블 오브젝트의 사용 방법 중 스크립터블 오브젝트로 이벤트 시스템을 만들어 관리할 수 있는 방법이 있어서 정리하고자 한다.
기본적으로 다음과 같이 선언한다.
[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
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프를 마치며 (4) | 2023.12.21 |
---|---|
의존성 주입 (DI, Dependency Injection) (0) | 2023.11.16 |
Unity 제네릭 싱글턴 (Generic Singleton) (0) | 2023.11.13 |
최종프로젝트를 앞두며 (0) | 2023.10.20 |
Unity 포톤 동기화 작업 시 주의할 점들 (1) | 2023.10.19 |