공부/Unreal Engine 5
[언리얼5] 멀티플레이 동기화(서버&클라)메모
MY블로그
2024. 4. 2. 15:40
멀티플레이 슈팅 게임 프로젝트를 진행하면서 플레이어가 공격을 했을때 서버와 클라이언트간의 동기화에 대하여 정리
서버
- 공격실행 Fire()
- 공격검사 CanFire()
- 무기의 타입 검사
- (Server) 서버 Fire() 요청
- (NetMulticast) 모든 로컬 클라이언트에 Fire() 호출 (동기화)
- 권한 확인 HasAuthority()
- Fire() 로직 실행
클라이언트
- 공격 실행 Fire()
- 공격 검사 CanFire()
- 무기의 타입 검사
- Fire() 로직 실행
- (Server) 서버 Fire() 요청
- (NetMulticast) 모든 로컬 클라이언트에 Fire() 호출
- 권한 확인 !IsLocallyControlled() && HasAuthority()
- Fire() 로직 실행 (동기화)
위의로직은 클라이언트가 공격즉시 딜레이없이 공격하지만 약간 늦은 서버와의 동기화로 약간의 딜레이가 있다.
하지만 서버와 클라이언트가 공격즉시 동기화없이 공격만 한다면 플레이어의 핑의 차이에 따라 반응에 매우 큰 차이가 생기게 된다. 때문에 약간의 딜레이를 감안하고 확실한 동기화를 실행.
상세한코드 생략
추가. 매개변수로 NetQuantize를 사용하였을경우 데이터의 압축이 있으므로 미세한 오차가 있을 수 있다.