언리얼 데디케이티드 서버 빌드하기

타입·2024년 7월 26일

언리얼 엔진 공부

목록 보기
4/5

서버 빌드 전 준비

데디케이티드 서버 빌드를 하기 위해선 에픽게임즈 클라이언트로 받은 엔진으로는 빌드를 할 수 없습니다.
준비해야 할 것이 많은데 차근차근 해보겠습니다.

에픽게임즈 깃허브 인증

사이트에 들어가면 나오는 순서대로 에픽게임즈 계정에 깃허브를 연동하면 언리얼 엔진 오픈소스에 접근이 가능해집니다.

소스 코드 다운로드

https://github.com/EpicGames/UnrealEngine

인증 완료 후 위 주소로 들어가면 아래 사진처럼 언리얼 엔진의 오픈소스에 접근이 가능해집니다.

  • release 브랜치가 반겨줄텐데 이 release 버전과 에픽게임즈에서 배포하는 공식 출시 버전이라고 합니다.
    저는 이 버전을 이용해서 진행하려고 합니다.

ue5-main 브랜치

실시간으로 커밋이 반영되는 ue5-main 브랜치도 있는데 만약 release 버전에 적용되지 않은 버전을 쓴다든지 최신 버전이 필요한 경우 사용할 수 있을 것입니다.
당연히 불안정한 버전이므로 버그가 있을 수가 있다고 하네요.

  • 코드 클론
    소스트리를 이용하여 코드를 내려받는 중입니다.
    엔진 크기가 커 꽤나 오랜 시간이 걸리므로 인내심을 가지고 기다립니다.
    전 1시간 정도 걸렸네요;
  • 다 받아지면 디폴트로 세팅된 release 브랜치를 타겟으로 체크아웃이 되어있습니다.
    Setup.bat 배치파일을 실행하여 엔진 바이너리 파일까지 다운로드 받으면 빌드 준비가 완료된 상태입니다.
    이것도 30분 정도 걸리드라고요

소스 코드로 엔진 빌드

  • GenerateProjectFiles.bat 배치파일을 실행하면 커맨드 창이 뜨며 빌드를 시작합니다.

  • 금방 빌드가 완료되고 UE5.sln 솔루션 파일과 \Engine\Intermediate 폴더 등 빌드 결과가 나타납니다.
    UE5.sln 솔루션 파일을 실행하고 UE5를 시작 프로젝트로 설정 후 빌드를 시작합니다.
    디버깅 시작 바로가기 버튼인 [F5]로 빌드가 완료되면 자동으로 디버깅 모드로 프로그램을 실행시켜 줍니다.
    코드가 많아서 그런지 1시간 반이나 걸리네요 ㅠ

  • 오랜 인내의 시간을 거쳐 프로그램이 실행되어 아래 사진과 같이 브라우저가 뜨면 성공입니다.
    성공한 걸 봤으니 이제 창은 닫아주면 됩니다.

데디케이티드 서버 빌드

서버 디폴트 맵 설정

빌드를 진행하기 전 우선 에디터에서 데디케이티드 서버에서 사용할 기본 맵을 지정해 주어야 합니다.
'편집 - 프로젝트 세팅 - 맵&모드'의 서버 기본 맵을 설정하면 됩니다.

저는 삼인칭 템플릿의 기본 맵인 ThirdPersonMap으로 지정하였습니다.

에디터에서 서버 콘텐츠 쿠킹 이전에만 하면 되는건지 확인 필요

이제 다시 본론으로 돌아와 서버 빌드를 해보겠습니다.

제목에 연결된 링크에 들어가면 아래 사진에서 설명해준 과정을 따르면 됩니다.

프로젝트의 언리얼 버전 설정

  • 프로젝트 빌드 파일 제거
    이전에 이미 언리얼 에디터를 실행하며 프로젝트를 빌드 한 적이 있다면 프로젝트 폴더에서 우선 빌드로 생긴 파일들을 제거해야 합니다.
    대표적으로 아래 다섯 폴더와 하나의 솔루션 파일을 제거하면 됩니다.
    • .vs
    • Binaries
    • DerivedDataCache
    • Intermediate
    • Saved
    • 프로젝트 sln 파일

그러면 폴더는 아래 사진처럼 막 클론한 것처럼 깔끔해집니다.

Server.Target Client.Target파일 생성하기

서버 빌드를 위해선 (프로젝트명)Server.Target.cs 파일이 필요합니다.
이 파일을 만들기 위해 LyraServer.Target.cs를 참고하라 하지만,
(프로젝트명).Target.cs 파일 내용을 복사하여 클래스 이름에 Server를 추가하고 TargetType을 Game에서 Server로만 바꿔주면 됩니다.

// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

public class ISeeMeServerTarget : TargetRules
{
    public ISeeMeServerTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Server;
        DefaultBuildSettings = BuildSettingsVersion.V5;
        IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_4;
        ExtraModuleNames.Add("ISeeMe");
    }
}

마찬가지로 (프로젝트명)Client.Target.cs 파일도 Server를 Client로만 변경해서 만들어줍니다.

(삽질)
프로젝트 파일을 만든 이후에 타겟 파일을 만들어 솔루션에 추가했더니 빌드가 진행되어도 파일이 안나왔습니다.
그래서 프로젝트 파일을 만들기 이전에 타겟 파일을 만들고 Server 빌드를 하니 파일이 정상적으로 생성됐습니다.
근데 Server 빌드를 먼저 하지 않고 Editor 빌드를 먼저 하니 TargetInfo.json에 타겟 파일이 알아서 추가되더라고요..

UE4 참고

  • uproject 파일을 우클릭하여 Switch Unreal Engine Version을 클릭하여 저희가 받은 오픈소스 코드가 담긴 폴더를 선택합니다.
  • OK 버튼을 누르면 바로 Generate Visual Studio project files를 선택한 것처럼 프로젝트 파일을 만들어줍니다.

프로젝트 빌드

서버 빌드

  • 이제 프로젝트의 sln 파일을 실행하여 비주얼 스튜디오를 켜면 이전엔 보이지 않았던 Server와 Client가 드디어 보입니다!
    솔루션 구성을 Development Server로 변경하고 빌드를 진행합니다.
    • 솔루션 구성은 구성 관리자 창에서도 변경 가능합니다.
      해당 창은 솔루션을 우클릭하여 열거나 '빌드 - 구성 관리자' 탭에서 열 수 있습니다.

  • 30분 안되는 시간이 지나고 빌드에 성공하면 \Binaries\Win64 폴더에 (프로젝트명)Server.exe 파일이 생성될 것입니다.

신나서 실행했더니 아래와 같은 에러가 나오는데 아직 쿠킹된 데이터가 없어서 그렇습니다.

서버 콘텐츠 쿠킹

  • 솔루션 구성을 다시 Development Editor로 변경하고 에디터를 실행합니다.
    데이터를 쿠킹하기 위하여 플랫폼 버튼 클릭 후 비주얼 스튜디오에서 빌드했던 Development Server와 맞게 세팅해줍니다.
    • 바이너리 구성: Development
    • 빌드 타깃: (프로젝트명)Server

위와 같이 세팅하고 콘텐츠 쿠킹을 선택합니다.

에디터 우측 하단에 쿠킹 중이라는 작은 패널이 뜨고 조금만 기다리면 서버는 금방 쿠킹이 완료됩니다.

쿠킹이 완료되면 \Saved\Cooked\WindowsServer 폴더가 생성되는 것을 확인할 수 있습니다.

클라이언트 빌드 및 쿠킹

클라이언트도 서버와 동일하게 빌드와 쿠킹을 진행하면 되는데 저는 다른 방법으로 진행해보았습니다.

  • 언리얼 에디터에서 빌드하기
    • 바이너리 구성: Development
    • 빌드 타깃: Client
      서버 콘텐츠를 쿠킹했던 것처럼 빌드 세팅을 해주고 '프로젝트 패키지'를 실행하면 비주얼 스튜디오에서 하는 Development Client 빌드와 콘텐츠 쿠킹을 함께 진행합니다.
      참고로 패키징 시 경로를 지정해주는데 패키지가 완료되면 빌드로 나오는 실행파일과 쿠킹 파일을 패키징하여 해당 경로에 저장해줍니다.

프로젝트 패키지로 빌드와 쿠킹, 심지어 배포용 패키징까지 한 번에 되는건데 각 단계를 별도로 해야하는게 아니라면 이 방법도 편해보이네요.

클라이언트라 그런지 쿠킹하는데에도 시간이 꽤 걸렸습니다. (54분 23초)

  • 빌드 및 쿠킹 결과
    • 마찬가지로 빌드의 결과로 \Binaries\Win64 폴더에 (프로젝트명)Client.exe 실행 파일이 생성되고,
    • 쿠킹의 결과로 \Saved\Cooked\WindowsClient 폴더 또한 생성됩니다. (WindowsServer 폴더도 확인)

서버와 클라이언트 실행하기

exe 파일을 실행할 때 인자를 담아 보내기 위해 3가지 방법을 소개하며 파일을 실행해보겠습니다.

서버 실행

데디케이티드 서버를 실행하면 백그라운드에서 실행되므로 실행중인지 알기 어렵습니다.
-log 인자를 넘겨 로깅창과 함께 실행되도록 합니다.

  1. cmd에서 실행
    [Win + R]키로 cmd를 실행하여 디렉토리를 옮겨도 되지만,
    현재 파일 탐색기의 주소창에 cmd를 입력하면 현재 디렉토리를 기준으로 cmd가 바로 실행됩니다.

    공식 문서와 같이 exe 파일 이름 뒤에 -log를 입력하여 실행합니다.

그러면 로깅창이 나타나며 무수한 로그를 써내려갑니다.
로그를 보아하니 서버 기본 맵인 ThirdPersonMap 맵이 정상적으로 로딩된 걸 볼 수 있네요.

  1. 파일 탐색기에서 실행
    굳이 cmd 창을 열지 않고 exe 파일을 실행하고 싶다면 파일 탐색기의 주소창에 파일 이름과 파라미터를 입력하면 바로 실행됩니다.

클라이언트 실행

클라이언트에선 서버에 연결하기 위해 IP주소와 포트번호를 인자로 넘겨주어야합니다.
로컬 서버로 실행하였기에 로컬 IP주소인 127.0.0.1과 7777 포트를 넘겨줍니다.

  1. 바로가기로 실행
    클라이언트의 경우 여러 창을 띄우는 게 가능하여 매번 인자를 넘겨주기 불편합니다.
    이때 exe 파일의 바로가기를 만들어 대상에 미리 채워져 있는 경로 뒤에 인자를 추가해주면 바로 가기를 실행하며 입력해둔 인자를 넘겨주므로 편리하게 실행할 수 있습니다.

실행 결과

이렇게 하나의 데디케이티드 서버에 두 클라이언트가 연결되어 있는 모습까지 확인하며 포스트를 마무리합니다.

profile
주니어 언리얼 프로그래머

0개의 댓글