ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UE5] 네트워크 멀티플레이어
    UE5 2024. 12. 10. 00:53

    언리얼 네트워크 멀티플레이어 프레임워크

    • 멀티플레이어 세션에서는 게임 상태 정보가 인터넷 연결을 통해 여러 대의 컴퓨터 간에 전달
    • 플레이어들 간에 동기화(정보 공유) 과정이 꽤나 복잡함
      • 언제 어느타이밍에 어떻게 이루어지는 것을 아는 것이 중요!
    • 언리얼 엔진은 클라이언트-서버 모델을 사용
    • 한 대의 컴퓨터는 서버, 나머지는 클라이언트로 서버에 연결
    • 서버는 연결된 각 클라이언트와 게임 상태정보를 공유하고 서로 통신할 수 있는 수단을 제공

    서버-클라이언트 모델

    • 클라이언트에서는 자신이 소유한 폰을 제어하고 서버에 신호를 보내주는 역할만 함
    • 나머지는 서버의 컨텐츠가 클라이언트에 복제 되어 재생이 되는 형태
    • 시각적으로 보여지는 화면 자체를 클라이언트로 복제하는 것이 아님
      • 서버는 게임 데이터에 대한 정보를 복제해서 데이터로 하여금 서버의 컨텐츠를 똑같이 클라이언트에 복제하는 형태로 통신이 진행
      • 이는 클라이언트에서는 서버에서 일어나는 일의 근사치를 시뮬레이션한다는 것
      • 시간 차, 전송할 수 있는 데이터의 양의 한계로 인해 완벽하게 서버와 클라이언트가 일치하는 것은 불가능
    Local Gameplay Network Gameplay
    플레이어 1이 무기 발사를 위한 입력을 누릅니다.
    • 플레이어 1의 폰(Pawn)이 현재 장착된 무기를 발사합니다.
    • 플레이어 1의 무기는 발사체를 생성하고, 해당 사운드와 비주얼 효과를 재생합니다.
    플레이어 1이 로컬 머신에서 무기 발사를 위한 입력을 누릅니다.
    • 플레이어 1의 로컬 폰이 서버에 있는 자신과 연결된 폰에 무기를 발사하라는 명령을 전달합니다.
    • 서버에 있는 플레이어 1의 무기가 발사체를 생성합니다.
    • 서버는 연결된 각 클라이언트에게 플레이어 1의 발사체를 생성하도록 지시합니다.
    • 서버에 있는 플레이어 1의 무기가 각 클라이언트에게 발사 사운드와 비주얼 효과를 재생하도록 지시합니다.
    플레이어 1의 발사체가 무기에서 앞으로 나아갑니다. 서버에 있는 플레이어 1의 발사체가 무기에서 앞으로 나아갑니다.
    • 서버는 발사체의 움직임을 각 클라이언트에게 복제하도록 지시하여, 클라이언트에서도 플레이어 1의 발사체가 동일하게 움직이도록 합니다.
    플레이어 1의 발사체가 플레이어 2의 폰과 충돌합니다.
    • 충돌로 인해 발사체가 파괴되고, 플레이어 2의 폰이 피해를 입으며, 해당 사운드와 비주얼 효과를 재생하는 함수가 실행됩니다.
    • 플레이어 2는 피해를 입은 반응으로 화면 효과를 재생합니다.
    서버에 있는 플레이어 1의 발사체가 플레이어 2의 폰과 충돌합니다.
    • 충돌로 인해 서버에 있는 플레이어 1의 발사체가 파괴됩니다.
    • 서버는 각 클라이언트에게 플레이어 1의 발사체를 파괴하라는 명령을 자동으로 전달합니다.
    • 충돌로 인해 모든 클라이언트에서 충돌 사운드와 비주얼 효과를 재생하도록 지시하는 함수가 실행됩니다.
    • 서버에 있는 플레이어 2의 폰이 발사체 충돌로 피해를 입습니다.
    • 서버에 있는 플레이어 2의 폰은 피해를 입은 반응으로 화면 효과를 재생하도록 플레이어 2의 클라이언트에 지시합니다.
    • 판정은 멀티플레이어 게임에서 검증이 필요한 매우 중요한 기능이기 때문에 클라이언트가 아닌 서버에서 한다.
    • 네트워크 게임에서 서버, 플레이어1, 플레이어2의 월드는 각각 다른 월드이기에 각각의 사본이 존재한다.
    • 서버는 모든 정보를 전송하는 것이 아니라 필수 요소들만 전송한다. 주요 과제는 모든 플레이어에게 일관된 경험을 제공하는 동시에 네트워크 대역폭을 최대한 적게 사용하기 위해 필요한 정보만을 복제하여 전송하는 것이다.

     

    멀티플레이어 게임의 구성(클라이언트-서버 모델)

    클라이언트-서버 모델

    • 클라이언트-서버 모델에서 클라이언트는 아무런 역할이 없음
    • 서버에서 전달해주는 커넥션을 통해서 컨텐츠를 복제해서 화면에 띄워주는 역할만 수행
    • 서버로부터 복제된 안에 담긴 허상 컨텐츠를 프록시라고 함 (대리자 / 허상 컨텐츠)
    • 즉 프록시는 데이터 중계나 대리 역할을 수행하는 객체
    웹에서의 프록시 서버(proxy server)와는 중간에서 데이터나 요청을 대리 수행한다는 점에서 유사한 역할을 하지만, 프록시 서버는 클라이언트와 서버 사이에서 네트워크 요청 중계를 담당하는 독립된 서버이고, 언리얼엔진에서의 프록시는 서버와 클라이언트 사이에서 객체 상태 동기화를 담당하는 객체이다.

     

Designed by Tistory.