본문 바로가기
Unreal/Manual

Unreal Steam Online Subsystem Steam 연결하기

by Dev_카페인 2024. 3. 14.
반응형

[Unreal/Steam] Online Subsystem Steam 연결하기

 

온라인 서브시스템 Steam API 를 통해 언리얼 엔진(UE) 애플리케이션을 Valve 의 Steam 플랫폼 에 출시하는 것이 가능합니다. Steam 모듈의 주 목적은 Steam 사용자들에게 (매치메이킹이나 리더보드같은) 피처 세트가 포함된 애플리케이션을 쉽게 배포할 수 있도록 하기 위함입니다. 추가적으로, Steam 모듈은 Online Subsystem 으로 노출된 인터페이스를 다수 구현하여, Steamworks Software Development Kit (SDK) 에 제공된 것을 대부분 지원합니다.

사용가능한 Steam Interface 몇 가지는 다음과 같습니다:

  • Matchmaking (매치메이킹, 로비 및 GameServer API)
  • Leaderboard (리더보드)
  • Achievement (업적)
  • Voice (음성)
  • UserCloud (유저 클라우드)
  • SharedCloud (공유 클라우드)
  • External UI (외부 UI)

 

Unreal Engine Subsystem : 온라인 플랫폼 서비스의 기능에 액세스하는 방법을 제공합니다. 따라서 온라인 플랫폼마다 새로 코딩할 필요없이 각 플랫폼의 매치 메이킹 API 하나의 코드로 사용할 수 있게 도와줍니다.

 

먼저 Steam SDK에 접근하는 방법은 두가지로 나뉘는 것 같습니다.

1. 언리얼 엔진 공식문서를 따라 Steamworks SDK 최신 버전을 다운로드 하는 방법

2. 언리얼 엔진에서 플러그인을 추가하는 방법

 

1번 같은 경우는 언리얼 엔진 공식 문서가 업데이트 되지 않은 것 같아서 어려움이 따릅니다.

5.3버전에서는 아래와 같이 "OnlineSubsystemSteamPrivatePCH.h" 파일을 찾을 수 없었습니다.

이름이 비슷한 파일에서도 define 정의를 찾을 수 없어서 꽤나 애먹었습니다.

#define STEAM_SDK_ROOT_PATH TEXT("Binaries/ThirdParty/Steamworks")
#define STEAM_SDK_VER TEXT("Steam[Current Version]")

 

따라서 2번 방법을 사용하여 연결합니다.

1. 에디터에서 편집-플러그인 창을 열고 Online Subsystem Steam을 검색하여 적용합니다.

언리얼 에디터를 재시작해야 변경 사항이 적용됩니다.

 

2. 이후 플러그인에 접근하기 위해 {ProjectName}.Build.cs에서 PublicDependencyModuleNames.AddRange에 "OnlineSubsystemSteam", "OnlineSubsystem”를 추가합니다.

 

3. 에디터와 VS를 종료하고 프로젝트 폴더 > Config > DefaultEngine.ini 에 다음 내용을 추가합니다.

메모장으로 열어서 하단에 추가해도 괜찮습니다.

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
 
[OnlineSubsystem]
DefaultPlatformService=Steam
 
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
bInitServerOnClient=true
 
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

 

애플리케이션을 테스트하려면, SteamDevAppId 를 480으로 하면 됩니다.
모든 개발자에 공유되는 테스트 App ID 입니다.
위의 테스트 App ID 로 Steam Interface 대부분을 테스트할 수는 있지만, 애플리케이션 출시를 위해서는 Steam APP ID 가 필요합니다.
NetDriverDefinitions 는 다음과 같은 프로퍼티와 함께 UE 에서 사용할 수 있는 넷 드라이버를 설명합니다:
DefName 은 넷 드라이버 정의 고유 이름입니다.
DriverClassName 은 주요 넷 드라이버의 클래스 이름입니다.
DriverClassNameFallBack 은 주요 넷 드라이버 클래스의 초기화에 실패한 경우 사용할 예비 넷 드라이버의 클래스 이름입니다.
Online Subsystem Steam 을 사용하도록 하려면,
[OnlineSubsystem]
DefaultPlatformService=Steam를 추가합니다.
UE 에 애플리케이션이 Steam Online Subsystem 을 사용하고싶다 알렸으니,
OnlineSubsystemSteam 모듈 환경설정은 다음 세팅을 추가하면 됩니다:
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
마지막으로, 애플리케이션 연결을 위한 넷 드라이버에 Steam 클래스를 지정해 줘야 합니다:
[/Script/OnlineSubsystemSteam.SteamNetDriver] NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

 

4. {ProjectName}.uproject 파일을 우클릭해서 Generate visual studio project files을 실행합니다.

 

 

5. 프로젝트가 정상적으로 실행되면 성공!

 

실행이 되지 않는다면 프로젝트 폴더에서 Binaries, Saved, Intermediate 폴더를 삭제후 4번을 진행합니다.

그래도 안된다면 ini파일과 build.cs파일의 오탈자가 없는지 확인합니다.

 

 

테스트는 작업중인 캐릭터나 컨트롤러 또는 게임모드 등에서 실행합니다.

 

// .h 파일

// 테스트를 원하는 코드에서 헤더 파일을 추가해줍니다.
#include "Interfaces/OnlineSessionInterface.h"

------------------------------------------------

protected:
	// GetOnlineSession()을 호출합니다.
	virtual void BeginPlay() override;

	// 온라인 세션을 가져옵니다.
	void GetOnlineSession();

private :
	// 세션의 인터페이스를 참조합니다.
	IOnlineSessionPtr OnlineSessionInterface;

 

// .cpp

// 헤더 파일을 추가합니다.
#include "OnlineSubsystem.h"


void MyClass::BeginPlay()
{
	Super::BeginPlay();

	GetOnlineSession();
}

void MyClass::GetOnlineSession()
{
	// OnlineSubsystem에 Access
	IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get();
	if (OnlineSubsystem)
	{
		// 온라인 세션 받아오기
		OnlineSessionInterface = OnlineSubsystem->GetSessionInterface();

		// 로그를 출력해서 확인합니다.
		// *OnlineSubsystem->GetSubsystemName().ToString()
	}
}

 

PIE로 실행시 GetSubsystemName()은 NULL이 됩니다.

또한, steam 플랫폼이 켜져있지 않아도 NULL을 반환합니다.

테스트의 경우 독립형 게임으로 실행합니다.

STEAM이 반환되었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

온라인 서브시스템 Steam

온라인 서브시스템 Steam 에 대한 개요와, Valve 의 Steam 플랫폼에서 배포용 프로젝트 셋업 방법을 알려드립니다.

docs.unrealengine.com

 

언리얼엔진 5 C++ 온라인 서브시스템 스팀 - Access the Online Subsystem

안녕하세요. mane입니다. OnlineSubsystem과 SessionInterface를 가져오기 1. Character.h , Character.cpp를 열어준다. IDE에서 Character.h, Character.cpp 열어준다. 굳이 화면을 2분할로 코드를 나누지 않아도 된다. 에디

online-unreal.tistory.com

 

 

[UE5 - Multiplayer TPS] 언리얼 멀티 플레이어 플러그인 만들기(2) : Online Subsystem Steam을 사용하여 세션

앞선 포스팅에서 LAN 연결을 구현할 때, 직접 IP주소를 입력하여 다른 PC의 게임에 접속했다. 하지만 실제 온라인 환경에서 게임에 접속할 때는 다른 유저의 IP주소를 모른 채로 게임에 접속한다. I

beankong-devlog.tistory.com

 

반응형