Unreal C++ · networking

클라이언트 입력: 요청이고, 서버 상태가 기준

멀티플레이에서는 클라이언트가 화면을 그리더라도 위치, 데미지, 아이템 같은 권한이 필요한 상태는 서버가 검증하고 확정합니다.

Input 클라이언트가 조작을 수집
Server RPC 서버에 요청을 전달
Authority 서버가 규칙과 값 검증
Replication 확정 상태를 클라이언트에 반영
client lane 입력과 예측은 클라이언트가 빠르게 보여준다

버튼, 이동 입력, 조준 같은 즉각 반응은 화면에서 먼저 표현하지만 결과의 진실은 확정하지 않는다.

server authority 서버가 규칙, 소유권, 값을 검증한다

Server RPC는 요청일 뿐이고, 서버는 소유권과 게임 규칙을 통과한 변경만 상태로 확정한다.

replicated state 확정 상태만 다시 클라이언트에 복제된다

bReplicates, Replicated 변수, OnRep 콜백이 서버 상태를 각 클라이언트 화면에 맞춘다.

1
request 소유한 액터로 Server RPC를 보낸다

클라이언트는 바꿔 달라고 요청하고, 직접 정답 값을 쓰지 않는다.

2
validate 권한이 없거나 말이 안 되는 값은 서버에서 버린다

데미지, 아이템 획득, 위치 보정은 서버 검증을 통과해야 한다.

3
sync 통과한 결과만 복제와 보간으로 화면에 맞춘다

예측과 서버 결과가 다르면 클라이언트는 부드럽게 보정한다.

Server truth holder

확정 기준

규칙, 데미지, 아이템, 위치 보정처럼 게임 결과를 바꾸는 값을 최종 확정한다.

확인 포인트

서버 함수에서 값 검증과 상태 변경이 함께 있는지 본다.

Client input surface

담당 범위

입력을 모으고 서버 상태를 화면, 사운드, UI 피드백으로 표현한다.

위험 신호

클라이언트 단독으로 점수나 인벤토리를 확정하면 동기화와 보안이 흔들린다.

Ownership rpc gate

호출 조건

자신이 소유한 액터를 통해 보낸 Server RPC만 정상 요청으로 본다.

디버그 순서

호출이 묵살되면 소유권, NetMode, RPC 선언, 액터 복제 여부를 순서대로 확인한다.

Prediction feel layer

사용 이유

서버 응답을 기다리는 동안 이동감이 끊기지 않도록 임시 결과를 보여준다.

수정 방식

서버 결과와 다르면 튕김을 숨기기 위해 보간이나 보정으로 맞춘다.

서버 권위 설계

권한이 필요한 상태 변경은 클라이언트에서 확정하지 말고 서버 RPC와 서버 검증을 거쳐 처리합니다.

디버그 기준

동기화가 안 되면 bReplicates, 소유권, RPC 방향, Replicated 변수 등록 여부를 순서대로 확인합니다.