언리얼 네트워크 개요

언리얼 엔진으로 온라인 게임 제작은 데디케이트 서버를 사용하게 된다.

💡
온라인게임은 여러 플레이어들이 가상의 공간에서 함께 플레이하는 것을 의미한다. 다른 용어로 MMORPG로 불림

서버와 클라이언트가 바라보는 가상 월드

서버는 가상 월드라는 레벨을 생성하여 각 오브젝트마다 ID 부여해 맵에 배치하는 작업을 한다.

서버

  • 가상 월드 레벨 생성
  • 각 오브젝트 ID 부여
  • 레벨에 오브젝트 배치
  • CPU, 메모리, 파일 I/O, 네트워크 부하가 주로 발생함

클라이언트는 화면을 렌더링하고 서버에 접속하여 서버가 갖고 있는 클라이언트 정보로 가상 레벨에 스폰시켜 함께 플레이하는 것으로 만들어준다.

클라이언트

  • 화면 렌더링
  • 서버에 접속. 가상 월드에 캐릭터 스폰
  • 스폰된 캐릭터는 클라이언트가 직접 조종함
  • CPU, GPU 부하가 주로 발생함

서버 및 클라이언트 전통적인 역할 분담

먼저 플레이어가 타격해 몬스터의 HP를 깍는 로직을 구현한다고 생각해보자.
단, 캐릭터는 이미 스폰되어 있는 상태

멀티게임에서의 흐름은 다음과 같다.

몬스터를 타격하여 HP 소모시키기

  1. 캐릭터가 몬스터에게 타격 스킬을 사용
  2. 타격 당한 몬스터 HP 소모함

서버 및 클라이언트 각자의 기능 개발

클라이언트

  • 사용자 입력을 받음. A 스킬 사용
  • A 스킬로 상대방 몬스터에게 지정
  • 캐릭터는 A 스킬로 몬스터를 타격하는 연출을 보여줌
  • A 스킬과 몬스터를 타격했다는 정보를 서버에게 전달

서버

  • 클라에게서 A 스킬로 몬스터를 타격했다는 정보를 받음
  • 서버는 몬스터 HP 값을 A 스킬의 데미지 값만큼 소모시키는 연산함
  • 서버는 몬스터 HP 정보를 클라이언트에게 전달함

클라이언트

  • 서버로부터 몬스터 HP를 정보를 수신받음
  • 화면 UI에 상대방 몬스터를 렌더링하여 소모시키는 연출함

이렇듯 간단한 기능이라도 온라인 게임은 복잡한 네트워크 통신으로 이루어져 있고 서버와 클라이언트의 역할이 분리되어 있다.

클라이언트는 UI 제작, 연출 및 렌더링 기술을 요구되며,
서버는 네트워크와 데이터베이스 및 멀티스레드에 특화되어 있어야한다.

또한, 콘텐츠는 한쪽에서 개발이 완료되어도 바로 테스트를 진행할 수 없다.
양쪽에서 모두 개발이 완료되어야 테스트 단계로 시작된다.


언리얼 엔진의 온라인 게임

언리얼 엔진은 독특한 네트워크 기술을 사용한다. 이 기술로 서버와 클라 각각의 소스를 합쳐서 만들지 않고 한 명분의 소스를 생성해도 빌드의 설정만 바꾸면 네트워크가 구성된다.

전통적인 네트워크 통신 개발에 사용하는 합치는 과정을 생략하고, 생산성이 높아져 온라인 게임 개발 기간을 단축시켰다.

언리얼 엔진에서 사용하는 네트워크 기능 두 가지가 있다.

언리얼 네트워크 기능

  • Replication
  • RPC

Replication

레플리케이션은 서버가 클라이언트에게 데이터를 브로드캐스팅한다.

오브젝트(서버는 액터라 부른다.)를 생성하면 레플리케이션 브로드캐스팅에 의해 클라이언트에게도 복제되어 서버와 클라이언트 각각 오브젝트가 생성한다.

레플리케이션 서버가 클라로 전파하므로 단독으로 콘텐츠를 생성할 수 없으므로 RPC를 사용한다.


RPC (Remote Procedure Call)

원격 함수를 실행한다는 의미이다. 클라이언트 서버로 함수를 실행하라고 전달한다.

예를들어, 클라이언트는 캐릭터의 스킬을 호출하고 패킷을 보낸다.
수신한 서버는 함수를 분석해 실행한다.