Showing

[Unreal] 언리얼 멀티플레이어 세팅(1) 본문

Unreal

[Unreal] 언리얼 멀티플레이어 세팅(1)

RabbitCode 2023. 11. 1. 20:43

1. Change Number of Player

언리얼에서 2명의 플레이어를 동시에 움직이게 하고 싶다면,

플레이 버튼라인의 점 세개를 클릭, Number of Player를 2로 맞추고 Net Mode를 Play As Listen Server로 바꾼다.

 

 

 

위와 같이 언리얼이 작동하는데 이루어지는 과정은 다음과 같다.

 

1. 맵 로딩 : 에디터에 맵이 로딩된다.

2. 맵은 게임 모드를 특정한다.

3. 맵에 조인하려는 플레이어 컨트롤러를 얻는다.

플레이어1에 대한 플레이어2를 배치할 때 두 개의 플레이어 컨트롤러를 생성하고 맵에 그들을 조인시킨다.

4. 플레이어 컨트롤러가 게임모드에 폰을 스폰하도록 요청한다.

5. 폰이 플레이어 컨트롤러에 연결되고 사용자는 플레이어를 조종할 수 있다.

 

 

 

2. 멀티플레이어 게임의 타입

Sychronoss '함께하는 시간' -> 게임에서 동시에 발생한다는 것을 의미한다.

  synchronous 세션 길이 언리얼 지원 정도
턴제 비동기 가변 Minimal
실시간(리얼타임) 세션  동기화  1시간 미만   Excellent
MMO 동기화  잠재적인 무한 세 Minimal

 

 

3. 세션 기반 게임

일반적으로 '연결'을 만들기 위한 세 단계

1. Discovery 온라인에 있는 다른 사람을 찾고, 게임을 호스팅하고 함께 참여할 수 있는 세션을 찾는다.

2. Connection 세션에 참여하여, 클라이언트에 연결하는 서버

3. Synchronisation 동기화. A가 보고 있는 것이 B플레이어와 동일한 것인지 확인해야 한다.

 

 

4. 클라이언트 서버 모델의 본질

상호 '상태'에 대한 '동의'

 

(1) 서버가 없는 경우 Peer-to-Peer

단점: 속도와 보안

로직: (속도-)모두에게 말할 것을 모두에게 브로드캐스트 한다.

모든 플레이어가 받은 입력에 따라 상태를 업데이트한다.

상태를 올바르게 업데이트 하기 위해서는 상태를 업데이트하고 다음 프레임으로 이동하기 전에(다음 틱 수행 전)

다른 모든 사람의 입력을 받기 위해 기다려야 한다.

메시지가 컴퓨터에 도달하는데 걸리는 시간이 몹시 느린 유저 (네트워크 연결 측면에서 가장 느린 사람) 가 있다면 엄청나게 느린 게임이 될 수 있다.

(보안-) 플레이어 중 한 명이 입력을 사실인 것 처럼 쉽게 속여 전송할 수 있다.

 

(2) 중앙서버 1대에 연결 (Unreal이 사용하는 모델)

로직: (속도-)모두에게 말할 것을 중앙서버 브로드캐스트 한다.

중앙 서버는 상태 개념을 업데이트하고 그 상태의 버전은 신뢰할 수 있는 것이 된다.

이 중앙서버는 기존 상태에서 변경된 사항을 알고 있으니, 모두에게 그것을 브로드캐스트한다.

따라서 로컬 버전, 상태의 로컬 복사본을 업데이트하고 플레이어에게 렌더링할 수 있다.

모두가 서버에 연결된 상태여야 렌더링을 위해 필요한 상태의 변경 사항을 받을 수 있다. 

 

 

5. 언리얼 명령 프롬프트 활용

UnrealEditor 경로를 복사해준다.

"C:\Program Files\Epic Games\UE_5.2\Engine\Binaries\Win64\UnrealEditor.exe" 이경로까지 들어간다.

cmd에 그대로 복사

그 다음 자신의 프로젝트를 찾아서 uproject 파일의 경로를 복사한다.

예시: "C:\Users\ \Documents\Unreal Projects\ThirdPersonMP\ThirdPersonMP.uproject"

놀랍게도 로딩창이 뜨다가 전체 화면으로 게임이 실행될 것이다.(종료는 ALT + F4)

 

-log를 찍으면 로그를 볼 수 있다.

프로젝트에 여러 맵이 있는 경우, 특정 맵을 전달할 수 있다.(로드할 게임을 지정할 수 있다는 뜻)

이 작업을 수행하기 위해서는 특정 유형의 URL을 사용하면 된다.

항상 대문자 G로 시작하는 /Game/ 그 다음 Content 디렉토리 아래로 나오는 디렉토리들을 적는다.

삼인칭 맵을 보고 싶다면 content는 적지 않고 그 폴더명과 아래 map 명을 작성한다. (끝에 .umap 을 추가할 필요는 없다)

 

"C:\Users\ \Documents\Unreal Projects\ThirdPersonMP\Content\ThirdPerson\Maps\ThirdPersonMap"

맵 대신에 IP 주소를 입력할 수도 있다.(그러면 서버에 연결될 것이다)

 

 

6. 전용 서버 시작

자체 미니 네트워크를 만드려면 가장 먼저 해야 할 일은 IP 주소를 찾는 것이다.

-game 대신 -server로 바꾸어준다.

"C:\Program Files\Epic Games\UE_5.2\Engine\Binaries\Win64\UnrealEditor.exe" "C:\Users\SBA\Documents\Unreal Projects\ThirdPersonMP\ThirdPersonMP.uproject" /Game/ThirdPerson/Maps/ThirdPersonMap -game -log
"C:\Program Files\Epic Games\UE_5.2\Engine\Binaries\Win64\UnrealEditor.exe" "C:\Users\SBA\Documents\Unreal Projects\ThirdPersonMP\ThirdPersonMP.uproject" /Game/ThirdPerson/Maps/ThirdPersonMap -server -log

다른 cmd 창이 열리면서 여러가지 문구가 된다.

이어서 기존 cmd 창에서 맵 명을 본인의 아이피로 바꾸고 server을 game으로 바꿔 입력 후 엔터해준다.

"C:\Program Files\Epic Games\UE_5.2\Engine\Binaries\Win64\UnrealEditor.exe" "C:\Users\SBA\Documents\Unreal Projects\ThirdPersonMP\ThirdPersonMP.uproject" 1.233.29.62 -server -log

win tab을 이용해 다른 윈도우창마다 플레이어를 생성시켜보자. 분명 다른 윈도우에서 만들었던 플레이어들이 보일 것이다.