

event를 붙이게 되면 action이 구독한 함수들을 stateChanged 변수에 저장. 단, 함수들을 받을 때 파라미터 IState를 넘겨줄 것
event 키워드 추가시 stateChanged 에 구독한 이벤트(함수)들이 쌓인다.
stateChanged 객체(변수)는 유튜버를 의미한다.
이 유튜버는 원하는 구독자가 있다. 원하는 것은 IState 타입이여야 한다.



OnStateChanged 는 구독자를 의미한다.
player.stateMachine.stateChanged += OnStateChanged; 유튜버인 stateChanged 를 유료로 구독 하는 OnStateChanged 구독자이다.
player.stateMachine.stateChanged -= OnStateChanged; 유튜버인 stateChanged 를 유로로 구독했던 것을 취소하는 OnStateChanged 구독자이다.

IState의 객체인 state을 이용하여 GetType().Name;을 해서 각 상태에 이름을 text에 저장한다.
1번에서 유튜버는 IState 타입을 갖고 있는 구독자를 원하므로, OnStateChanged(구독자)는 IState 타입의 매개변수를 갖고 있어야 한다.

stateChanged? : stateChanged에 구독된 것들이 null인지 아닌지 판별. null이 아니라면 이벤트 뿌린다.
이벤트를 뿌릴 때 유튜버는 IState을 갖고있는 구독자를 원하기 때문에 뿌릴 때도 IState타입을 갖고 있는 구독자에게 뿌린다. CurrentState는 IState 타입이다.

이벤트를 뿌릴 때는 Invoke()을 사용한다.

실행 결과






