클라이언트의 모든 행동은 서버를 거친 후에 수행되도록 설계되어 있음
통신 부하가 발생하는 경우 사용자 경험이 나빠짐
만약 통신렉이 심한 경우 사용자의 공격 입력 후 애니메이션 재생이 늦어지거나, 시각적으로 보여지는 판정 타이밍이 클라이언트와 서버가 일치하지 않을 수 있음
의도적으로 패킷 랙을 발생시킨 후 이의 결과를 확인
[PacketSimulationSettings]
PktLag=500
랙이 발생하는 경우 클라이언트의 반응이 많이 느려지는 문제가 발생
클라이언트->서버 전송시간 + 서버->클라이언트 전송시간 발생
입력 후 서버의 응답이 오기까지 대기하는 상황 발생
클라이언트의 반응성을 개선하고 서버에서는 클라이언트의 요청을 검증을 통해 구현
클라이언트에서 공격 입력 시 애니메이션 재생 및 Server RPC 호출
서버에서 Server RPC 실행 시 애니메이션 재생하여 서버와 클라이언트의 재생 타이밍은 다름
시간 정보를 활용하여 동기화 처리
클라이언트에서 서버로 공격 판정 요청 후 서버에서 검증하여 대미지 처리

https://github.com/dnjfs/ArenaBattle_Network/commit/a51aafccd9014e281f69964fff36e83b735e2033
클라이언트의 공격 애니메이션 즉시 재생
클라이언트에서 공격 시 PlayAttackAnimation() 즉시 실행
서버와 다른 클라이언트는 RPC를 통해 재생됨
bCanAttack을 클라이언트에서도 변경할 수 있게 됨 (추후 시간 정보로 Validate 검증)
AttackHitCheck() 개선
클라이언트에서 실행 시 서버에서 검증하도록 Server RPC 호출, HitResult와 시간 정보를 넘겨주어 서버에서 검증
서버에서 실행 시 바로 처리
AttackHitConfirm()에서 최종 데미지 처리
패킷 최적화
벡터의 정밀도에 따라 FVector_NetQuantize 구분하여 사용
실행될 필요 없는 클라이언트에 대해선 RPC 호출 패스
- FVector_NetQuantize
벡터 정보를 압축하여 전송, 어느정도 오차는 발생할 수 있음