강의 목표
- PvP 게임 예제 소개, 에디터 설정
- 클라이언트-서버 모델의 구성 이해
- 언리얼 엔진의 네트웍 멀티플레이어 프레임웍을 구성하는 주요 개념 학습
- 언리얼 C++ 프로그래밍이 가지는 장점 이해
설정
- 플레이 Net Mode : Play as Listen Server
- 에디터 설정에서 Allow Late Joining를 true로 해주면 add another client 버튼이 생김
- 고급 설정에서 Always On Top를 true로 하면 새 윈도우를 항상 위로 놓고 확인 가능
네트워크 개요
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/networking-overview-for-unreal-engine?application_version=5.1
- 멀티플레이 게임은 시작 단계부터 멀티플레이에 대해 염두해두고 구조를 짜야함
- 멀티 -> 싱글은 호환되지만
- 싱글 -> 멀티는 처음부터 코드를 다시 짤 가능성이 매우 높음
- 네트워크 속도와 안정성으로 인해 발생할 수 있는 기술적 병목 현상 대비 힘듦
- 클라이언트 서버 모델
- 한 대의 컴퓨터가 서버 역할
- 나머지는 클라이언트로 서버에 연결되는 구조
- 판정은 서버를 통해서만 진행
- 클라이언트는 폰을 원격으로 제어해서 신호를 보내주는 역할
- 즉, 서버는 게임 상태 데이터
- 클라이언트는 서버의 콘텐츠 데이터를 복제, 서버의 근사치를 시뮬레이션
클라이언트-서버 모델
- 특별한 역할을 하는 하나의 서버 + 다수의 클라이언트
- 서버 : 실제 게임 서비스를 제공하는 콘텐츠를 담음
- 클라이언트 : 전달받은 콘텐츠를 화면에 띄워주는 역할
- 프록시 : 서버로부터 클라이언트에 복제된 콘텐츠
- 접속 주체 : 접속을 담당하는 액터
프레임웍
- 접속 플로우 : 로그인, 커넥션, 오너십, 역할
- 액터 리플리케이션 : 서버와 클라이언트 간에 동일한 액터가 나타나도록 만드는 기능
- RPC : 네트워크를 활용해서 즉각적으로 서버와 클라이언트 간의 명령을 주고 받아야 함
- 움직임 리플리케이션 : 무브먼트 컴포넌트
- 프로퍼티 리플리케이션 : RPC에 비해 느리지만 주요한 속성을 확실하게 전달 받음
C++로만 가능한 기능
- 필수적으로 사용되는 가상 함수 활용 가능
- 제대로 된 리플리케이션 콜백의 호출 가능
- 리플리케이션 조건의 세밀한 제어 가능
- 네트워크 전송 최적화 : 가벼운 데이터 설계