20230912_ Scriptable Object을 통한 이벤트 관리

Minsang Kim·2023년 9월 12일
0

TIL

목록 보기
22/41

유니티 리멤버

Scriptable Object을 통한 이벤트 관리

public class GameEventListener : MonoBehaviour
{
    [Tooltip("Event to register with.")]
    public GameEvent Event;

    [Tooltip("Response to invoke when Event is raised.")]
    public UnityEvent Response;

    private void OnEnable()
    {
        Event.RegisterListener(this);
    }

    private void OnDisable()
    {
        Event.UnregisterListener(this);
    }

    public void OnEventRaised()
    {
        Response.Invoke();
    }
}
[CreateAssetMenu(menuName = "Scriptable Objects/Game Event")]
public class GameEvent : ScriptableObject
{
    private readonly List<GameEventListener> eventListeners = new List<GameEventListener>();

    public void Raise()
    {
        for (int i = eventListeners.Count - 1; i >= 0; i--)
            eventListeners[i].OnEventRaised();
    }

    public void RegisterListener(GameEventListener listener)
    {
        if (!eventListeners.Contains(listener))
            eventListeners.Add(listener);
    }

    public void UnregisterListener(GameEventListener listener)
    {
        if (eventListeners.Contains(listener))
            eventListeners.Remove(listener);
    }
}

팀원분이 가져오신 새로운 방식이다. GameEvent ScriptableObject에 UnityEvent를 구독해주는 방식으로 한다.

image

이런 식으로 인스펙터에서 구독을 걸어줄 함수를 불러와 걸어주고. GameEvent를 스크립트에서 받아와 Raise() 해주면 구독되있는 메소드들이 실행된다.


세줄 요약

  • GameEvent
  • GameEventListener
  • 이벤트 구독하는 새로운 방법
profile
게임만 하다가 개발자로

0개의 댓글