[ UE5 OnPossess in Client ]
간혹 게임이 처음 시작될 때, Controller가 Pawn을 소유한 직후, 그러니까 Controller와 Pawn이 둘 다 유효한 가장 처음 시점이 필요할 때가 있다.
OnPossess(APawn* InPawn)라고 간편한 함수가 직접적으로 존재하지만, 이는 서버에서만 호출된다.
클라이언트, 또는 클라이언트와 서버 둘 다 간편하게 Init 할 수있는 함수가 없을까?
[ AController::SetPawn(APawn* InPawn) ]
이 함수는 서버, 클라이언트로 부터 전부 호출된다.
그리고 virtual로 선언되어 있어 잘 사용하면 서버, 클라이언트 양측 케이스를 한 번에 핸들링가능하다는 뜻이다.
기본적으로 서버에서는 OnPossess(), 클라이언트에서는 OnRep_Pawn()에서 호출된다고 이해하면 된다.
한 가지 유의해야 할 것은, 이 두 곳에서만 호출되는게 아니라 여러군데서 호출된다. 말그대로 Controller, PlayerController 내에서 Pawn을 설정할 때마다 호출되는 함수이기 때문이다.
예를 들면 UnPossess 될 때도 InPawn이 NULL로 들어와서 호출되고, Restart 등등.. 실제로 로그를 찍어보면 게임 시작시 LocalController 조건을 걸어도 3~4번씩 호출된다.
그래서 사용할려면 Init하려는 변수가 nullptr일 때만 호출하게 한다거나 실행 조건을 거는 것을 권장한다.
'UE5 > Network' 카테고리의 다른 글
[UE5] Replication without Compromise (0) | 2024.10.10 |
---|---|
[UE5] Animation Update in Server, Server side Rewind (0) | 2024.10.06 |
Conditional Property Replication에 관한 짧은 분석 (0) | 2024.09.15 |
[UE5] Replication Graph Deep Dive (0) | 2024.08.29 |
Multiplayer in UE : How to Understand Network Replication (0) | 2024.08.29 |