[Unreal] 25.언리얼 멀티플레이

본 문서는 어소트락 언리얼엔진 게임프로그래머 양성과정의 강의를 토대로 필기한 내용입니다

UE 멀티 플레이어 시스템

멀티 플레이어 게임은 동일한 게임의 여러 인스턴스가 동시에 실행되는 것을 목표로 한다

  1. 동일한 시스템의 다른 프로세스
  2. 동일한 로컬 네트워크의 다른 컴퓨터
  3. 인터넷을 통해 서로 다른 위치에 존재하는 플레이어
  • 언리얼 엔진의 네트워크 모델에서 플레이어는 서버 연결 상태를 유지하고, 서버는 월드를 신뢰할수 있는 상태로 유지
  • 서버에서 변경 사항이 발생하면 해당 변경 사항은 리플리케이션(Replication) 이라는 프로세스의 일부로 필요에 따라 클라이언트에 전파된다
    • 리플리케이션 시스템은 게임 코드와 통합되어 멀티 플레이어 게임을 쉽게 개발하도록 해줌
    • 통신을 통해 토켓을 따로 열거나 패킷을 보내지 않아도 되며, 데이터 직렬화(Serealization) / 인코딩(Encoding) / 바이트 순서 / 타임스탬프 / 재정렬 및 라우팅(Routing) 등을 처리하지 않고, 단순히 해당 프로퍼티를 복제하기를 요구하면 복제되는 시스템

넷 모드

월드의 속성으로 네 가지의 모드(StandAlone / Dedicated Server / Listen Server / Client)가 존재하며, 세 가지 질문 통해 모드를 나눌 수 있다

월드의 NetMode는 게임 인스턴스가 시작된 방식에 따라 달라진다

  • Playable
    • 게임을 플레이할 수 있는가?
    • 게임 인스턴스에 LocalPlayer가 존재하고, 해당 플레이어의 입력을 처리하고, 월드를 뷰포트로 렌더링하고 있는가?
  • Autority?
    • 우리는 서버인가?
    • 게임 인스턴스에 GameMode 액터가 포함된 World의 정식 사본이 있는가?
  • Open To Clients?
    • (우리가 서버라면) 원격 연결 시도를 위해 열려있는가?
    • 다른 플레이어가 클라이언트로 참여해 게임을 플레이 할 수 있는가?

    240825_NetMode01

Standalone

게임 인스턴스가 로컬로 맵을 로드한 경우, 게임 월드의 넷 모드는 Standalone이 된다.

240825_NetMode_SA

  • 단일 게임 인스턴스는 서버이자 클라이언트이지만, 단일 플레이어 구성에서 실행되기 때문에 다른 클라이언트가 연결할 수 없다
  • URL은 맵 이름 혹은 경로

Dedicated Server

로컬 플레이어와 뷰포트가 없는 게임 인스턴스. 플레이어가 클라이언트로 연결할 수 있는 서버 전용 콘솔 응용 프로그램으로서 작동

240825_NetMode_DS

  • 사운드, 그래픽, 사용자 입력 등 플레이어 관련 기능을 제거하여 효율적인 실행이 가능한 서버

깃허브에서 데디케이트 서버를 다운 받아서 사용 할 수 있다

깃허브 내 언리얼 엔진 계정연결 링크

  • 사용 방법
    • 설치
      • 깃허브 UE 계정 연동 및 코드 다운로드
      • Setup.bat 으로 셋업
      • GenerateProjectFiles.bat 으로 솔루션 생성
      • 엔진 풀코드 전체 빌드 ctrl + shift + B
      • UnrealEditor.exe로 실행 (서버 기능도 포함한 언리얼 에디터)
    • 데디케이트 버전으로의 변환
      • switch Unreal Engine version
      • [프로젝트].Target.cs 버전을 동기화 해준후
      • [프로젝트].ServerTarget.cs 서버 타겟에 대한 세팅 후 빌드

Listen Server

유저 중에 한명이 서버가 되는 구조

240825_NetMode_LS

  • 맵을 로컬로 로드하지만 경로에 ?Listen 옵션을 추가하여 로드한 경우 Standalone과 동일하지만 다른 클라이언트가 참여할 수도 있다
  • URL 은 맵 경로?Listen

Client

게임 인스턴스가 원격 서버로 연결된 경우

240825_NetMode_C

  • 게임은 로컬 플레이어가 플레이 할 수 있지만, 서버 요청에 따라 월드가 업데이트 된다
  • 서버가 아닌 유일한 모드로 서버측의 로직이 실행되지 않음
  • URL은 IP 주소

언리얼 엔진의 네트워킹 시나리오

240825_NW01

  • 싱글 플레이어
    • 하나의 게임 인스턴스가 있고, 해당 월드는 Standalone 모드에서 실행 됨
  • 멀티 플레이어
    • 각각 고유한 게임 인스턴스들이 있고, 고유한 World 복사본이 있는 여러 프로세스가 있다
    • 이러한 프로세스 중 하나는 Listen Server 또는 Dedicated Server

리플리케이션

서버와 클라이언트 사이에서 데이터와 명령을 주고 받는 프로세스

액터 업데이트 방식은 크게 두 가지

  1. 프로퍼티 업데이트
  2. RPC(Remote Procedure Call)

언리얼 주요 클래스 생성

  • GameMode : 서버에만 생성
  • PlayerController : 서버, 클라이언트 생성
  • PlayerPawn : 서버, 클라이언트 생성 //
  • PlayerState : 서버, 클라이언트 생성 //
  • PlayerAnimInstance : 서버, 클라이언트 생성
  • GameState : 서버, 클라이언트 생성

출처


© 2023 Jinsoo Lee. All rights reserved.

Powered by Hydejack v9.1.6