멀티플레이 슈팅 게임 프로젝트를 진행하면서 플레이어가 공격을 했을때 서버와 클라이언트간의 동기화에 대하여 정리
서버
- 공격실행 Fire()
- 공격검사 CanFire()
- 무기의 타입 검사
- (Server) 서버 Fire() 요청
- (NetMulticast) 모든 로컬 클라이언트에 Fire() 호출 (동기화)
- 권한 확인 HasAuthority()
- Fire() 로직 실행
클라이언트
- 공격 실행 Fire()
- 공격 검사 CanFire()
- 무기의 타입 검사
- Fire() 로직 실행
- (Server) 서버 Fire() 요청
- (NetMulticast) 모든 로컬 클라이언트에 Fire() 호출
- 권한 확인 !IsLocallyControlled() && HasAuthority()
- Fire() 로직 실행 (동기화)
위의로직은 클라이언트가 공격즉시 딜레이없이 공격하지만 약간 늦은 서버와의 동기화로 약간의 딜레이가 있다.
하지만 서버와 클라이언트가 공격즉시 동기화없이 공격만 한다면 플레이어의 핑의 차이에 따라 반응에 매우 큰 차이가 생기게 된다. 때문에 약간의 딜레이를 감안하고 확실한 동기화를 실행.
상세한코드 생략
추가. 매개변수로 NetQuantize를 사용하였을경우 데이터의 압축이 있으므로 미세한 오차가 있을 수 있다.
'공부 > Unreal Engine 5' 카테고리의 다른 글
[언리얼5] 언리얼 네트워크 시뮬레이션 관련 참고 자료 (0) | 2024.04.07 |
---|---|
[언리얼5] 프로퍼티 동기화(C++ & BP) (0) | 2024.04.05 |
[언리얼5] 멀티플레이 개인프로젝트 무기교체 및 상태변경 (0) | 2024.04.01 |
[언리얼5] 멀티플레이 개인프로젝트 작업정리 (0) | 2024.03.30 |
[참고자료] 믹사모 & 언리얼 스켈레탈 구조 참고 (0) | 2024.03.25 |
댓글