본문 바로가기

프로그래밍/Unreal

[UE4] Dedicated Server

standalone dedicated server


아주 세부적으로 위키에 정리되어 있다.

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



엔진 소스 빌드

일반 배포 바이너리는 빌드 타겟에 제약이 있어 소스를 받아 빌드해야 한다.


https://github.com/EpicGames/UnrealEngine


private repository 이므로, 언리얼 사이트에서 연결 후에 접속~


필요한 버전의 소스를 다운로드 한다.

\> Setup.bat 

필요요소 다운로드 하고, version-selector 에 등록(레지스트리 등록)


\> GenerateProjectFiles.bat

프로젝트 파일 생성 : vs2017 버전은 \> GenerateProjectFiles.bat -2017



솔루션 파일을 열고 Development Editor 타겟으로 빌드 한다. 

빌드 할때도 오래걸리고, 처음 실행할때도 오래걸리고~

용량도 어마어마함.





기존 프로젝트의 수정

ProjectName.uproject 를 오른쪽 마우스클릭해 Switch unreal engine version.. 을 선택해 엔진버전을 Source build 버전으로 변경해 준다.

기존 타겟파일을 복사해서 서버모듈 타겟을 생성한다.

./Source/ProjectNameServer.Target.cs

소스를 열어 파일명과 클래스명을 일치 시켜 주고, 타겟타입을 서버로 설정한다.

Type = TargetType.Server;


ProjectName.uproject 에서 Generate Visual Studio Project Files...


클라이언트용 바이너리 빌드 : Development Editor

서버용 바이너리 빌드 : Development Server

서버로 빌드하게 되면 ProjectNameServer.exe 파일이 생성됨.








서버 실행

프로젝트 설정에서 서버 기본 맵을 서버에서 시작할 맵과 동일하게 선택한다.

(DefaultEngine.ini 의 [/Script/EngineSettings.GameMapsSettings] 항목 참조)


패키징을 위한 맵 목록을 선택하고, 패키징한다.

패키징된 폴더의 바이너리 폴더에 빌드된 서버 실행파일을 복사한다.

./WindowsNoEditor/ProjectName/Binaries/Win64/



서버 파일에 바로가기를 만들어 로그 옵션을 넣어준다.

Target: "project-path\Binaries\Win64\ProjectName.exe" -log


서버 바로가기를 실행~



클라이언트들은 Open Level 노드에 ip 넣어서 접속하면 된다.




세션 (온라인 서브 시스템)

https://answers.unrealengine.com/questions/260999/creating-a-session-on-dedicated-server-launch.html



AGameSession 을 상속받은 커스텀 세션 객체를 생성한다.

virtual void RegisterServer() 함수가 선언되어 있는데, 이 함수를 오버라이드한다.




#include "Online.h"



UClass AMyGameSession : public AGameSession

{

GENERATED_BODY()


public:

void RegisterServer();

}


void AMyGameSession::RegisterServer()

{

UWorld* World = GetWorld();

IOnlineSessionPtr SessionInt = Online::GetSessionInterface(World);


FOnlineSessionSettings Settings;

Settings.NumPublicConnections = 3;

Settings.bShouldAdvertise = true;

Settings.bAllowJoinInProgress = true;

Settings.bIsLANMatch = true;

Settings.bUsesPresence = true;

Settings.bAllowJoinViaPresence = true;


SessionInt->CreateSession(0, GameSessionName, Settings);

}






'프로그래밍 > Unreal' 카테고리의 다른 글

[UE4] 이미지 파일 동적으로 로드하기  (0) 2018.07.05
[UE4] 언리얼 엔진 빌드  (1) 2018.06.01
[UE4] Using Static Library  (0) 2018.03.16
[UE4] VR 컨트롤러 IK  (0) 2018.01.24
[UE4] 관람자 화면  (0) 2018.01.04
[UE4] 동적 텍스처  (0) 2017.12.18
[UE4] 디버그 로그 출력  (0) 2017.11.13
[UE4] 유리 매터리얼  (0) 2017.10.15
[UE4] 레벨 스트리밍  (0) 2017.10.15
[UE4] UI 관련 내용  (0) 2017.09.26