
LogBlueprintUserMessages: [BP_TestGameMode_C_0] Server: Call BeginPlay , ObjectName : BP_TestGameMode_C_0
LogBlueprintUserMessages: [BP_TestGameState_C_0] Server: Call BeginPlay , ObjectName : BP_TestGameState_C_0
LogBlueprintUserMessages: [BP_TestController_C_0] Server: Call BeginPlay , ObjectName : BP_TestController_C_0
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Server: Call BeginPlay , ObjectName : BP_TestPlayerState_C_0
LogBlueprintUserMessages: [WBP_ChatWindow_C_0] Server: Call BeginPlay , ObjectName : WBP_ChatWindow_C_0
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Server: Call BeginPlay , ObjectName : BP_TestPlayerState_C_1
LogBlueprintUserMessages: [BP_TestController_C_1] Server: Call BeginPlay , ObjectName : BP_TestController_C_1
LogBlueprintUserMessages: [BP_TestController_C_0] Client 1: Call BeginPlay , ObjectName : BP_TestController0
LogBlueprintUserMessages: [BP_TestGameState_C_0] Client 1: Call BeginPlay , ObjectName : BP_TestGameState0
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: Call BeginPlay , ObjectName : BP_TestPlayerState0
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: Call BeginPlay , ObjectName : BP_TestPlayerState1
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Server: Call BeginPlay , ObjectName : BP_TestPlayerState_C_2
LogBlueprintUserMessages: [BP_TestController_C_2] Server: Call BeginPlay , ObjectName : BP_TestController_C_2
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: Call BeginPlay , ObjectName : BP_TestPlayerState2
LogBlueprintUserMessages: [WBP_ChatWindow_C_0] Client 1: Call BeginPlay , ObjectName : WBP_ChatWindow_C_0
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: Call BeginPlay , ObjectName : BP_TestController_C_0
LogBlueprintUserMessages: [BP_TestGameState_C_0] Client 2: Call BeginPlay , ObjectName : BP_TestGameState_C_0
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: Call BeginPlay , ObjectName : BP_TestPlayerState_C_0
LogBlueprintUserMessages: [WBP_ChatWindow_C_0] Client 2: Call BeginPlay , ObjectName : WBP_ChatWindow_C_0
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: Call BeginPlay , ObjectName : BP_TestPlayerState_C_1
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: Call BeginPlay , ObjectName : BP_TestPlayerState_C_2
Server에서 모드가 먼저 실행되고
GameState->Controller->PlayerState->가 실행된 이후의
클라이언트가 들어오면
클라이언트의 Controller->GameState->PlayerState가 생성된다.
RepNotify에서는 Server의 이벤트를 실행할 수 없다.
오직 클라이언트의 값의 변화만 함수가 실행되게 되어있는데
클라이언트의 값이 서버로 전달하기 위해서는


위와같은 구조가 되어야 한다.
SendUI는 NotReplication이다
그게 아니라면 Controller에서 값의 변화를 index없는 PlayerState를 가져와서 처리를 해주어야한다.
RunOnServer로 하면 변화가 없고, RunOwningClient로 하면 클라만 동작하게 된다.
RepNotify함수에서는 서버접근이 불가능하고 Client만 처리가 되기 때문에 RunOwningClient는 잘 동작된다. 따라서 Multicast도 RepNotify에서는 동작이 불가능하다.



TestInt를 만들어서 변화를 테스트하는 것이다.
BeginPlay에서 실행하기 때문에 서버 클라 OnRep에선 동작할 것이다
더불어 키를 눌렀을때 서버 클라 를 모니터링해보자.
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Server: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Server: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Server: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Client 1: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Client 1: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 3
다음과 같은 로그를 얻을 수 있었고 BeginPlay에서 값을 입력했기 때문에 서버, 클라이언트 모두 OnRep이 동작해서 값이 변경되는 모습을 확인할 수 있다.

서버에서만 값을 넣는다면 어떤 값이 나오는지 확인해보자
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Server: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Server: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Server: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Client 1: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 3
서버의 값이 들어가면 복제되는 모습을 확인할 수 있었다.
클라에만 값을 집어넣는다면 어떤 결과가 나올까 확인해보자.

LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: OnRepTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ClientTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_0] Client 1: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 3
클라일때만 값이 들어가면 클라이언트에서는 값이 들어가있고 서버에서는 값이 들어가지 않는 모습을 확인할 수 있다.
RPC에서는 서버가 클라역활도 하지만 클라가 HasAuthority에서는 서버로 판단하기 때문에 값이 들어가지 않는 모습이다.

값을 넣어서 테스트를 해보자
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: OnRepTestInt : 1
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: OnRepTestInt : 1
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ClientTestInt : 1
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ServerTestInt : 1
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: OnRepTestInt : 2
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: OnRepTestInt : 2
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ClientTestInt : 2
LogBlueprintUserMessages: [BP_TestController_C_0] Server: ServerTestInt : 2
LogBlueprintUserMessages: [BP_TestController_C_0] Client 1: ClientTestInt : 5
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_1] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 1
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 2
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 0
LogBlueprintUserMessages: [BP_TestController_C_0] Client 2: ClientTestInt : 3
LogBlueprintUserMessages: [BP_TestController_C_2] Server: ServerTestInt : 0
초기값을 없앤 후 다음과 같은 로그를 얻었다
서버에서는 클라에서 증가시켜도 서버값과 동기화 되지만
클라는 클라값과 서버값이 동기화 되지 않았다
서버->클라로 데이터가 이동되기 때문에
클라의 값을 동기화 시킬때는 RunOnServer를 통해 값을 옮겨주어야 한다.