본문 바로가기

볼봇의 코딩 생활/언리얼한 엔진

[UE4] 데디케이트 서버(Dedicate Server) 구축 - Windows 편

 

굉장히 오랜만에 글을 쓰는 듯 하다.

이번에는 며칠간 문서를 보면서 공부해본 데디케이트 서버 구축에 대해 정리해보겠다.

 

데디케이트 서버를 구축하기 위해서는, 당연히 멀티플레이가 가능하도록 설계된 게임이 있어야 한다.

아직 게임이 없다면 미리 언리얼에서 제공하는 ThirdPersonExample 를 미리 생성 해 두자.

 

필자는 방금 완성한 따끈따끈한 간단한 채팅 게임이 있어 이를 사용하려고 한다.

 

UE4 소스코드 빌드하기

런쳐에서 받은 언리얼 엔진은 몇몇 기능들이 빠져있다.

실제로 , 데디케이트 서버를 빌드하기 위한 기능도 빠져있다. 그러므로 우리는 언리얼 엔진 코드를 다운로드 받아

직접 빌드 해야 한다.

 

소스코드 빌드 부분은, 필자보다 문서에 훨씬 더 잘 설명하고 있고, 실제로 진행해보니 큰 장애가 없었으므로 링크로 대체하고 필자는 가볍게 집고 넘어가도록 하겠다.

 

1. 소스코드 다운로드

https://api.unrealengine.com/KOR/GettingStarted/DownloadingUnrealEngine/index.html

 

언리얼 엔진 소스 코드 내려받기

소스 코드 저장소에 접속하여 언리얼 엔진 최신 빌드를 다운로드하는 법에 대한 단계별 안내입니다.

api.unrealengine.com

 

2. 소스코드 빌드

https://api.unrealengine.com/KOR/Programming/Development/BuildingUnrealEngine/index.html

 

소스에서 언리얼 엔진 빌드하기

소스에서 언리얼 엔진 컴파일하기 입니다.

api.unrealengine.com

위 링크에서, 본인 깃허브 계정이 언리얼 엔진 소스코드에 접근 할 수 있도록 신청을 하고 (자동이다)

레포지토리에 접근 해야 한다.

 

 

 

다운로드 한다.

본인 프로젝트에 맞는 버전을 다운로드 하자, 런처에 없는 최신 버전도 여기서 다운 받아볼 수 있지만

우리가 원하는것은 아니다.

 

 

필자 경험상 15분 정도 걸리더라. 파일 정말 많습니다.

 

Setup.bat / GenerateProjectFiles.bat 을 실행합니다.

차 한잔 하고 오자. 꽤 오래 걸린다.

 

늘 언리얼엔진으로 개발해보면서 느낀건데, 많은 인내심을 필요로 하는것 같다.

뒤끝 서버 for UE4 만들어서 서비스 하면 잘 될듯...

 

참고로, 소스코드 빌드를 마치면 용량이 60기가 정도 줄어있는 기적을 볼 수 있다.

그렇지만 SSD 에서 작업하자. 하드에서 작업하면 절망적으로 느릴것이다 =_=;;

 

 

 

다 됬다.

인내를 가지고 기다리면, sln 파일을 당신을 반길것이다.

기쁜 마음으로 더블 클릭 하자. 참고로, 위에 남겨둔 링크에서는 vs 2015 를 요구하고 있는데

해당 엔진에 맞는 비주얼 스튜디오를 설치해서 사용 해야 한다.

 

필자는 4.21 버전이므로, vs 2017 을 설치해서 사용하고 있다.

 

 

시작프로젝트 설정을 잊지마세요!.

비주얼스튜디오를 열면 우측에 많은것들이 보일것이다.

언리얼 엔진은 모듈 덩어리로 이루어진 것인데, 그 모듈들인듯 하다.

 

UE4 프로젝트를 선택하여 시작 프로젝트로 설정 한다.

그렇지 않으면 엔진이 실행이 안된다 ^^..

 

 

 

필자는 누르고 캡쳐해서 비활성화 된 것.

실행 해보자. 다시 인내의 시간이 반길것이다.

필자 팁을 살짝 전해주자면 빌드 걸어두고 모니터와 스피커를 끄고 내일 아침에 일어나서 하자.

밤새 빌드가 잘 되어 있을 것 이다. ^^7

 

 

 

약 1~2시간 정도 걸리는듯.

위와 같이 익숙한 화면이 반기면 성공 이다.

 

=_= ;;;;

조망간 512기가짜리 SSD 를 하나 마련해야겠다.

 

 

 

프로젝트 설정

데디케이트 서버로 패키징을 하기 전에, 프로젝트 셋팅을 확실히 해두고 진행 해야 한다.

빌드도 굉장히 오래 걸리는데 셋팅 잘못해서 다시 빌드하는 불상사는 막도록 하자!

 

별로 복잡하지 않으니 집중해서 셋팅해봅시다.

 

 

본인프로젝트/Source/

폴더에 들어가보면, *.Target.cs 파일들을 볼 수 있다.

아무거나 복제 하여 아래와 같은 형식으로 파일 이름을 바꾼다.

 

[프로젝트 명]Server.Target.cs

 

복제한 파일을 열어 코드를 수정 하도록 한다.

기준은 4.21 이며, 엔진 버전마다 코드가 다르다. 필자가 제시한 코드는 언리얼 위키에 의하면

4.18 이상에서만 작동 하는듯 하다. 그 이하 버전은 아래 링크를 참고하기 바란다.

 

https://wiki.unrealengine.com/Dedicated_Server_Guide_(Windows_%26_Linux)

 

Dedicated Server Guide (Windows & Linux) - Epic Wiki

Engine Version: 4.14, 4.15, 4.16, 4.17, 4.18 NOTE - Apologies for the video quality of the tutorials. They were recorded in 1080p and decent quality but for some reason after uploading to you tube they became horribly blurred. I will redo them ASAP. Thanks

wiki.unrealengine.com

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

[SupportedPlatforms(UnrealPlatformClass.Server)]
public class [프로젝트명]ServerTarget : TargetRules   // Change this line as shown previously
{
       public [프로젝트명]ServerTarget(TargetInfo Target) : base(Target)  // Change this line as shown previously
       {
        Type = TargetType.Server;
        ExtraModuleNames.Add("[프로젝트명]");    // Change this line as shown previously
       }
}

 

[참고] Source 폴더가 없는데요?? (더보기 클릭)

...더보기

블루프린트로만 이루어진 프로젝트는 Source 폴더가 없다.

위 작업을 진행하기 전에 프로젝트를 먼저 열고 빈 클래스 하나를 추가하자.

VS 설치는 기본.

 

서버 빌드를 위한 타겟파일을 방금 만들었다.

 

이번에는 프로젝트 내부 설정을 진행하겠다.

평상시와 같이 프로젝트를 열고, 프로젝트 셋팅으로 이동 한다.

 

 

 

네모 박스를 그린 3가지 맵에 대한 설정을 해야 한다.

(위에 두개는 안해도 무방하지만...)

 

마지막 Server Default Map 부분이 중요 한데, 데디케이트 서버를 열고, 클라이언트가 접속 했을 때 처음 보는

맵을 의미 한다.

필자가 만든 동아리용 프로젝트는 작고 간단한것이라 로비와 같은 맵이 없지만 대규모 프로젝트를 진행중이라면 대체적으로 저곳에 로비 맵 등 이 들어갈 것 이다.

Entry 말고 정확한 맵을 선택해주자.

 

경험상, 실수로 안해준 상태로 서버를 켜니까 접속도 안됩니다...

 

 

 

 

패키징 -> List of maps to include in a packed build 부분으로 이동 한다.

프로젝트에 있는 맵들 (.umap 파일) 을 전부 선택해서 배열에 추가 시킨다.

 

 

 

이제 설정을 모두 마쳤으로 저장을 하고 (자동저장이지만) 에디터를 끈다.

 

 

데디케이트 서버 빌드 하기

 

Switch Unreal Engine Version...

 

본인 프로젝트 폴더로 이동하여 .uproject 파일을 대고 우클릭 -> Switch Unreal Engine Version 을 클릭 한다.

 

 

 

 

소스코드를 통한 빌드가 잘 됬다면 목록에 Source build at [경로] 와 같은 아이템이 보여야 한다.

없다면 위로 올라가 다시 소스코드를 빌드하도록 하자.

 

소스코드 빌드를 위해 네모 상자를 친 아이템을 선택하고 OK 를 누른다.

 

오래 안걸리니 잠시 기다린 후 .sln 파일을 더블 클릭하여 비주얼스튜디오를 열도록 한다.

 

 

 

 

좌측을 보면 여러가지 빌드 옵션이 있고, 우측에는 많은 프로젝트들이 있다.

여기 까지 오면 성공 이다.

 

참고로, 아래 솔루션 파일 구문 분석~ 부분이 끝나지 않은 상태로 빌드를 진행해도 무방한듯 하다.

찝찝하신분들은 끝날때 까지 기다리도록 하고, 필자처럼 성격 급한 사람들은 그냥 진행해보자.

(참고로 언리얼 위키에서는 끝날때 까지 기다리라고 한다.)

 

 

 

 

빌드 옵션을 Devlopment Editor 로 선택 한다.

 

 

 

 

본인 프로젝트를 우클릭 -> 빌드를 클릭한다.

 

 

[참고] fatal error C1852 - 올바른 프리 컴파일 해더가 아닙니다. (더보기 클릭)

...더보기

포스팅을 하면서 발생한 오류라 접은글로 짧게 남겨 본다.

 

프리 컴파일 오류가 발생하면, 결론만 말하면 우클릭 -> 다시 빌드를 클릭 하면 컴파일이 된다.

원인을 아시는분은 댓글로 제보 부탁 드립니다...

여튼.. 다시 빌드를 누르면 정상적으로 컴파일이 진행되는것을 볼 수 있지만.

....정-말로 느리다. 다시 빌드를 누른 시점부터 이미 오늘 데디케이트 서버를 구축하는것은

포기 하는것이 좋을 정도. (두시간 정도 빌드를 해봤는데 1/3 진행 됨)

 

빌드 시작하면 컴퓨터 느려지니 겜도 못함.

 

 

 

 

 

빌드가 마무리 되면...

 

Development Server 를 빌드 옵션으로 선택 한다.

 

 

 

뭐야 또해?..

빌드를 누른다.

 

 

기다림의 연속

 또 한참 걸리니 점심을 해결하고 티타임을 잠시 가진 후에 낮잠을 한숨 자고 오면 빌드가 다 되어있을 것 이다.

 

 

 

빌드를 마쳤으면, 이제 언리얼 엔진을 다시 실행 시킨다.

 

 

 

솔루션 파일에서 로컬 윈도우 디버거 버튼을 눌러 엔진을 실행 할 수도 있지만,

가끔 가다 보면 게임 버전이 맞지 않아 서버 접속이 안된다는 오류가 터질때가 있다.

 

여튼, 프로젝트를 열고 이제 패키징을 할 차례 이다.

 

기다림이 보인다.

누르기 전에, PIE 에서 한번 더 테스트를 해보고 확실히 패키징을 해도 문제가 없다라고 판단이 되면

그때 누르도록 하자. 패키징을 마치고 서버에 올렸을 때는 버그가 있어 코드를 고치려면

방금 했던 빌드 작업들을 전부 다시 해줘야 한다. ^^;;

 

기다린다.

 

(오늘 아침 7시부터 지금까지 빌드질만 했다고...)

 

 

윈도우 패키징까지 마무리 했다.

드디어 데디케이트 서버 구축을 거의 마친것이다.

행복한 소식은 이제부터 길고 고통스러운 빌드 작업은 없다. (접속 안되거나 오류나면 GG)

 

서버를 구축해보자!

 

 

 

서버 켜기

힘들었다.

WindowsNoEditor 폴더가 있음을 확인 한다. (만약 다른 폴더에 했다면 다른곳에)

 

아래 경로로 이동하여 파일 하나를 복사한다.

[프로젝트코드]/Binaries/Win64/[프로젝트명]Server.exe

 

 

필자의 파일

마지막으로 해당 파일을 아래 경로에 붙여넣는다. (만약 패키징 경로가 다르다면 해당 하는 경로에 넣는다.)

[프로젝트 경로]/WindowsNoEditor/[프로젝트명]/Binaries/Win64

 

 

붙여넣기를 하면 폴더에는 이렇게 두개의 파일 (클라이언트용, 서버용) 이 존재 하게 된다.

 

 

 

 

 

[프로젝트명]Server.exe 파일을 대고 바로가기를 만든다.

이 바로가기로 서버를 실행 할 것 이다.

 

 

 

 

해당 바로가기의 속성을 편집하여, 위 사진 처럼 -log 인수를 추가한다.

이 인수가 없으면 서버는 실행되지만 로그가 표시되지 않아 어떤 오류가 발생하는지, 실행은 되고 있는지

알 도리가 없다.

 

적용후 바로가기를 더블 클릭 한다.

 

 

 

 

드디어 서버가 실행됬다.

 

위 사진처럼 port 7777 에서 열린것을 확인하면 서버 구축은 성공 한 것이다.

축하드립니다!

 

 

 

테스트

마지막까지 테스트는 잊지 말아야 한다.

클라이언트 파일을 실행해서 접속까지 해보겠다.

 

방금 버그를 발견했다. 스킨이 안바뀐다.

 

연결성공! 채팅 시스템까지 잘 작동한다. (플레이어 이름이 None 인것은 필자의 게임 버그 이다 =_=)

 

이로써 데디케이트 서버 구축을 마치겠다.

 

다음 포스팅에서는 데디케이트 서버를 리눅스 (Centos 6.5) 에서 돌려보도록 하겠다.