

위와 같은 명령체계가 되어야 한다.
Multicast는 GameState,
RunOnServer를 통해서 값을 전달해서 서버의 값을 번경하면 Replicate를 통해서 클라의 값을 변경하는 구조로 가야한다.
UI는 Client에만 동작되어야 하기 때문에 RunOnClientOnly로 UI를 생성하고
UI의 값을 변경하는 것이 좋다.
단 리슨서버에서는 Server와 Client 동시에 역할을 수행하기 때문에
RunOnServer를 통해 값을 처리하되 RunOnClientOnly를 통해 UI에 값을 전달해야한다.

UI가 생성되는 회수를 카운트 한 것이다
UI에서 Controller로 신호를 보낸 것이며 이는 GameMode에 카운트된다.
이렇게 처리한 이유는 실행순서의 따라서 PlayerState의 값이 UI에 반영이 되지 않기 때문이다.
그게 싫다면 Tick에 처리를 해야하는데 Tick은 성능 저하를 일으키기 때문에 일부러 넣지 않았다.
모든 요청은 컨트롤러를 통해 처리 되게 만들어놨다.



모든 전체 시간은 Controller와 UI와 통신하지만
모든 값이 Controller에서 UI와 통신하지는 않는다.
전체 값을 공유해야 하는 상황은 GameState에서 처리했고, 그렇지 않은 값은 개별로 요청과 처리를 하게 만들었다.

Answer의 Count를 감소시킨다. 시간초과를 하거나, 입력을 했을경우 공통으로 사용되어야 하기 때문에 이렇게 구성되었다.

WinLose를 판별한다 GameMode에서 실행되며 승리와 패배시 UI를 표시하기 위한 로직이다.
서버에서 값을 사용하기 위해서 RunOnServer에서 실행되지만 Client함수를 사용하여 UI를 클라이언트에 전달한다.

결과에 대한 로직이다.

호스트의 ID를 결정하는 로직이다.
게임모드의 역할은 턴을 바꾸어주는 역할과, ID를 부여하는 역할, 승패 판별등의 역할을 하게 되었다.