본문 바로가기
공부/Unreal Engine 5

[언리얼5] 멀티플레이 동기화(서버&클라)메모

by MY블로그 2024. 4. 2.

멀티플레이 슈팅 게임 프로젝트를 진행하면서 플레이어가 공격을 했을때 서버와 클라이언트간의 동기화에 대하여 정리

 

서버

  • 공격실행 Fire()
  • 공격검사 CanFire()
  • 무기의 타입 검사
  • (Server) 서버 Fire() 요청
  • (NetMulticast) 모든 로컬 클라이언트에 Fire() 호출 (동기화)
  • 권한 확인 HasAuthority()
  • Fire() 로직 실행

클라이언트

  • 공격 실행 Fire()
  • 공격 검사 CanFire()
  • 무기의 타입 검사
  • Fire() 로직 실행
  • (Server) 서버 Fire() 요청
  • (NetMulticast) 모든 로컬 클라이언트에 Fire() 호출
  • 권한 확인 !IsLocallyControlled() && HasAuthority()
  • Fire() 로직 실행 (동기화)

위의로직은 클라이언트가 공격즉시 딜레이없이 공격하지만 약간 늦은 서버와의 동기화로 약간의 딜레이가 있다.

하지만 서버와 클라이언트가 공격즉시 동기화없이 공격만 한다면 플레이어의 핑의 차이에 따라 반응에 매우 큰 차이가 생기게 된다. 때문에 약간의 딜레이를 감안하고 확실한 동기화를 실행.

 

 

상세한코드 생략

 

추가. 매개변수로 NetQuantize를 사용하였을경우 데이터의 압축이 있으므로 미세한 오차가 있을 수 있다.

 

댓글