Open AliceOfSNU opened 2 years ago
event 기반 코딩 예제 Voice.cs ` // events public Action<int, bool> OnPlayerVoiceChangedHandler = null;
public void OnPlayerVoiceChanged(int actorNr, bool state)
{
if (OnPlayerVoiceChangedHandler != null)
{
OnPlayerVoiceChangedHandler.Invoke(actorNr, state);
}
}
public void RemoveListener(Action<int, bool> action)
{
if(OnPlayerVoiceChangedHandler != null)
{
OnPlayerVoiceChangedHandler -= action;
}
}
public void AddListener(Action<int, bool> action)
{
OnPlayerVoiceChangedHandler -= action;
OnPlayerVoiceChangedHandler += action;
}`
Action
해당 Handler는 .Invoke를 통해, 그 handler 에 assign 된 action들을 모두 invoke할 수 있음(OnPlayerVoiceChanged) 이때 invoke될 함수들의 parameter를 set 해줌. Invoke(T1 param1, T2 param2);
join, leave 두가지 상황에 대한 이벤트가 있다고 하면, 이들을 위해 OnUserJoinedHandler, OnUserLeftHandler를 정의하는대신 OnUserStatusChangedHandler만 정의하고, action parameter로 enum PlayerStatus {Joined, Left} 를 주는 방법이 있음
추가자료: 새로운 UI 시스템의 BindEvent 참조 UIBase.cs UIEvent의 종류별로(click. enter, exit, drag) 분기
`public static void BindEvent(GameObject go, Action
switch (type)
{
case UIEvents.UIEvent.Enter:
evt.OnEnterHandler -= action;
evt.OnEnterHandler += action;
break;
case UIEvents.UIEvent.Click:
evt.OnClickHandler -= action;
evt.OnClickHandler += action;
break;
case UIEvents.UIEvent.Exit:
evt.OnExitHandler -= action;
evt.OnExitHandler += action;
break;
case UIEvents.UIEvent.Drag:
evt.OnDragHandler -= action;
evt.OnDragHandler += action;
break;
}
}`
현재 상황
작업 계획
일정