멀티플레이를 위해서는 게임간의 통신이 필요하다. 효율적인 통신을 위해 서버가 필요하다. 서버와 클라이언트간의 양방향 통신을 해야한다.
플레이어가 게임중 무기를 발사하려고 할때 클라이언트 서버간의 상호작용을 검토해보자.
총알을 쏜 행위는 내 컴퓨터 뿐이 아니라 같이 플레이하고 있는 다른 클라이언트에서도 보여줘야하고 이는 서버를 통해 이루어진다. 다음그림은 대략적인 개념이다. 실제 총알처리도 네트워크 처리되어야 한다.
서버 이해하기
- 클라이언트는 게임에 필요한 모든 리소스를 가지고 있다.
- 서버는 클라이언트가 가지고 있는 리소스의 메타데이터를 제어한다. 그렇게 함으로서 통신량을 줄일수 있다.
- 공유 월드 인스턴스의 생성및 관리
- 클라이언트의 참가및 퇴장 요청처리
- 모든 클라이언트가 알아야하는 액터의 생성
- 중요한 게임플레이 로직의 실행
- 변수 리플리케이션 처리
- 클라이언트의 RPC처리
서버의 종류
데디케이트 서버 vs 리슨서버
데디케이트 서버는 말 그대로 앱이 서버만 담당하게 빌드된것으로 가볍게 하기 위해 그래픽요소는 처리하지 않고 콘솔창만으로 운영만 할수 있다.
리슨서버는 서버역할과 클라이언트 역할을 동시에 수행한다. 편하긴하지만 데디케이트 서버보다 무겁기 때문에 클라이언트의 수가 제한된다. 실제 해보면 몇명할수 없다.
클라이언트 이해하기
서버로부터의 변수 리플리케이션 적용 : 모든 액터의 권한을 가진 서버에서 리플리케이션 변수의 값이 변경되면 클라이언트도 변경된 값을 적용해야한다.
서버의 RPC처리 클라이언트는 서버에서 전송한 RPC를 처리한다.
시뮬레이션시 움직임 예측 : 클라이언트가 액터를 시뮬레이션할 때 액터의 속도를 기반으로 액터의 위치를 로컬에서 예측해야 한다.
클라이언트만 알아야 하는 액터 생성 : 클라이언트에만 존재하는 액터는 거의 없으나 프리뷰액터나 설정 UMG같은것이 있을 수 있다.
멀티플레이 시작하기
에디터 플레이버튼 옆 삼점을 클릭해서 아래 Net Mode를 Play As Listen Server를 설정하고 Number of Players를 1이상 설정하자.
Advanced Settings 에서 서버 뷰포트의 해상도는 설정할수 있다. 클라이언트는 더 내려가면 멀티플레이어 뷰포트크기에서 설정할 수 있다.
프로젝트 피키징하기
엔진 에디터를 사용하지 않는 순수 스탠드얼론 버전으로 만드는 것이 좋다. 패키지버전은 더 빠르고 더 가볍다.
1. Platforms > 창 > 패키지프로젝트 메뉴로 이동한다. 저장할 폴더를 선택하고 완료될때 까지 기다린다.
2. 패키지 빌드를 저장할 폴더로 이동해 Windows폴더를 연다.
3. TestMulplyer.exe 파일에서 마우스 오른쪽 버튼을 클릭하고 바로가기 만들기를 선택한다.
4. 새 바로가기의 이름을 Run Server 로 변경한다.
5. 마우스 우