언어:
페이지 정보
엔진 버전:
언리얼 엔진

온라인 서브시스템 Steam

언리얼 엔진

기여자: Valve

온라인 서브시스템 Steam API 를 통해 언리얼 엔진 4 (UE4) 애플리케이션을 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)

현재 사용가능한 Steam Interface 전체 목록은 Online Subsystem Steam API Reference 문서를 참고하세요.

Valve 요구사항 충족

Steam Subsystem 은 Valve Steamworks 를 통한 추가 셋업이 필요합니다. Valve 에 연락 및 Steamworks SDK Documentation 을 참고하여 애플리케이션이 Valve 의 요구사항에 맞는지 확인한 후 UE4 로 Steam 작업을 하시기 바랍니다.

Steamworks 다운로드

애플리케이션이 Valve 의 요구사항에 맞는다면, 계속해서 Steamworks SDK 최신 버전을 다운로드합니다. SDK 압축을 풀어 /YourUnrealEnginePath/Engine/Source/ThirdParty/Steamworks/Steam[Current Version]/sdk 위치로 복사해야 합니다.

프로젝트의 Steamworks SDK 를 업데이트하면, 프로젝트의 Steamworks 경로에서 [Current Version] 부분도 업데이트해 줘야 합니다:
/YourUnrealEnginePath/Engine/Source/ThirdParty/Steamworks/Steam[Current Version]/sdk
프로젝트 디렉터리에 위치한 Steamworks.build.cs 파일 역시 업데이트해 줘야 할 것입니다.
SteamworksCSFile.png
이 예제에서 [Current Version] 포맷은 v139 입니다.

UE4 컴파일

소스에서 UE4 를 컴파일 하는 방법은 다음과 같습니다:

  1. ("..\..\Plugins\Online\OnlineSubsystemSteam\Source\Private\" 에 위치한) "OnlineSubsystemSteamPrivatePCH.h" 를 엽니다. 여기서 Steamworks SDK 루트 위치를 정의하는 다음과 같은 코드 줄을 찾을 수 있습니다:

    define STEAM_SDK_ROOT_PATH TEXT("Binaries/ThirdParty/Steamworks")

  2. 이 줄을 다음과 같이 변경하면 됩니다:

    define STEAM_SDK_VER TEXT("Steam[Current Version]")

Steamworks SDK 셋업

미리 컴파일된 엔진 버전에 대해 Steam 을 사용하기 위해서는, Valve 의 SDK 에서 동적으로 링크된 라이브러리(*.dll) 파일 몇 개를 올바른 폴더에 복사해 주기만 하면 됩니다. 소스에 대해 엔진을 리컴파일하려는 경우, SDK 역시 제 위치에 있어야 합니다. 이제, SDK 의 /redistributable_bin/ 디렉터리에서 관련된 재배포 파일을 다음 위치로 복사하면 됩니다:

Choose Your Operating System

Windows

Mac OS

Linux

64 비트 라이브러리 중 몇몇은 Steam 클라이언트 디렉터리에서 찾을 수 있습니다 (이 글 작성 시점에서 Valve 는 SDK 에 모든 라이브러리르 포함하지 않은 상태입니다).

/YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/Win64

  • steam_api64.dll

  • steamclient64.dll

  • tier0_s64.dll

  • vstdlib_s64.dll

/YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/Win32

  • steam_api.dll

  • steamclient.dll

  • tier0_s.dll

  • vstdlib_s.dll

/YourUnrealEnginePath/EngineOrGameFolder/Binaries/Mac/YourGame.app/Contents/MacOS

  • (/redistributable_bin/osx32 의) libsteam_api.dylib - (dynamic library (*.dylib) 는 32 & 64 비트 둘 다 지원합니다.)

Linux 사용자는 실행파일과 함께 다음 파일을 link 하여 ship 해야 합니다.

  • libsteam_api.so

Steam App ID

Steam 온라인 서브시스템을 사용하는 모든 게임은 유효한 애플리케이션 ID 가 있어야 하는데, 애플리케이션의 Steam App ID 를 알지 못하면 Steamworks API 초기화가 되지 않기 때문입니다. Steam 초기화 전, UE4 는 steam_appid.txt 를 생성합니다 (엔진 정상적인 종료 도중 UE4 는 이 파일을 삭제합니다). 한 가지 중요한 점은 steam_appid.txt 가 실행파일과 같은 디렉터리에 있어야 합니다. Steam 에서는 현재 작업 디렉터리에서 그 텍스트 파일을 찾기 때문입니다. 추가적으로, 이 파일을 Steam 이미지에 포함시켜서는 안됩니다.

steam_appid.txt 파일을 열면, SteamDevAppId 항목이 보이는데, 이 칸을 통해 애플리케이션 ID 를 Steam 에 알립니다. 그렇게 하면 Steam 클라이언트를 (반드시 실행중이기는 해야 하지만) 통해 게임을 실행시키지 않아도 됩니다.

애플리케이션을 테스트하려면, SteamDevAppId480 으로 하면 됩니다. 모든 개발자에 공유되는 테스트 App ID 입니다. 위의 테스트 App ID 로 Steam Interface 대부분을 테스트할 수는 있지만, 애플리케이션 출시를 위해서는 Steam APP ID 가 필요합니다.

Shipping 빌드

shipping 빌드에서 엔진은 로그인된 유저가 게임에 제대로 가입되어 있는지 체크한 뒤, 엔진 테스트에서 false 를 반환하면 중단됩니다. 추가적으로 Steam DRM 을 사용하면 (Steamworks SDK 참고) 게임 변경을 한 층 더 방지할 수 있습니다.

애플리케이션 세팅 환경설정

언리얼 프로젝트 브라우저 를 사용하여 새 프로젝트를 만드는 경우, Online Subsystem 세팅은 DefaultEngine.ini 에 있지 않을 것입니다. 하지만 Sample Project 중 하나를 변경해서 쓴다면, Online Subsystem 세팅이 이미 존재할 것입니다.

애플리케이션에 대한 Steamworks SDK (및 Steam App ID 도) 셋업이 완료되었으니, 애플리케이션 세팅 환경설정을 통해 Online Subsystem Steam 을 사용할 준비가 되었습니다.

단계

  1. 우선 애플리케이션의 DefaultEngine.ini 파일을 열고 다음 세팅을 추가합니다:

    [/Script/Engine.GameEngine] +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

    NetDriverDefinitions 는 다음과 같은 프로퍼티와 함께 UE4 에서 사용할 수 있는 넷 드라이버를 설명합니다:

    • DefName 은 넷 드라이버 정의 고유 이름입니다.

    • DriverClassName 은 주요 넷 드라이버의 클래스 이름입니다.

    • DriverClassNameFallBack 은 주요 넷 드라이버 클래스의 초기화에 실패한 경우 사용할 예비 넷 드라이버의 클래스 이름입니다.

  2. UE4 가 Online Subsystem Steam 을 사용하도록 하려면, 다음 세팅을 추가합니다:

    [OnlineSubsystem]
    DefaultPlatformService=Steam
  3. UE4 에 애플리케이션이 Steam Online Subsystem 을 사용하고싶다 알렸으니, OnlineSubsystemSteam 모듈 환경설정은 다음 세팅을 추가하면 됩니다:

    [OnlineSubsystemSteam]
    bEnabled=true
    SteamDevAppId=480
  4. 마지막으로, 애플리케이션 연결을 위한 넷 드라이버에 Steam 클래스를 지정해 줘야 합니다:

    [/Script/OnlineSubsystemSteam.SteamNetDriver]
    NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

최종 결과

이 간략 안내를 마친 이후 애플리케이션의 DefaultEngine.ini 파일은 다음 세팅 블록같아 보일 것입니다. 다른 프로젝트에서 Online Subsystem 을 셋업하고 사용한 방법을 살펴보려면, Sample Project 라이브러리를 참고하세요.

완성 세팅

DefaultEngine.ini

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

Steam 온라인 인증

Steam 의 특수 인증 시스템은 플랫폼이 제공하는 고유 서버 관련 기능 몇 가지에 대한 액세스를 제어하는데, 예를 들면 서버 광고와 플레이어 수, 추방 목록 (퍼블리셔와 Anti-Cheat 둘 다) 확인 및 대응, 라이선스 검사 등입니다. 언리얼 엔진 4 는 FOnlineAuthSteam 클래스를 통해 이 기능과의 인터페이스를 제공합니다. 애플리케이션이 Steam 온라인 서브시스템을 사용하도록 구성되면, SteamAuth 패킷 핸들러 컴포넌트를 활성화하는 것으로 그 기능을 활용할 수 있습니다.

SteamAuth 활성화

SteamAuth 를 활성화하려면, "DefaultEngine.ini" 또는 Steam Online Authentication 을 지원하려는 플랫폼에 대한 엔진 .ini (예로 "WindowsEngine.ini", "LinuxEngine.ini", "MacEngine.ini") 파일에 다음과 같이 추가합니다.

[PacketHandlerComponents]
+Components=OnlineSubsystemSteam.SteamAuthComponentModuleInterface

활성화하면, Steam Online Subsystem 인터페이스 (SteamOSS) 함수 GetAuthInterface 를 사용하여 SteamAuth 함수 기능에 액세스할 수 있습니다.

SteamAuth 는 애플리케이션이 참가한 모든 플레이어에 대해 (Steam 서비스의) 인증 프로세스를 실행하도록 합니다. 기본적으로 SteamAuth 는 이 검사를 통과하지 못한 플레이어를 추방하지만, 그 동작을 오버라이드할 수 있습니다.

SteamAuth 델리게이트

SteamAuth 시스템에서 개발자가 오버라이드할 수 있는 델리게이트는 두 가지, OverrideFailureDelegateOnAuthenticationResultDelegate 입니다.

플레이어가 Steam 인증 없이 서버에 참가 시도하거나, 그 플레이어가 세션 도중 Steam 인증을 잃으면 그 플레이어의 FUniqueNetId 와 함께 OverrideFailureDelegate 를 호출합니다. 기본적으로, SteamAuth 는 그 플레이어를 게임에서 추방합니다. 하지만 이 델리게이트가 바인딩된 경우 기본 동작은 일시 중단이며, 그 동작을 그대로 유지하려면 개발자가 플레이어를 수동으로 추방하면 됩니다.

OnAuthenticationResultDelegate 는 Steam 의 인증 서비스에서의 반응을 처리하여, 플레이어의 FUniqueNetId 와 인증 시도 성공 여부를 나타내는 부울 값을 제공합니다.

추가 참고사항

모듈 셋업

반드시 Unreal Engine Steam 모듈을 프로젝트 일부로 포함시켜야 합니다 (자세한 도움말은 UnrealBuildTool 타깃 파일 문서를 참고하세요). 구체적으로는, mygame.build.cs 생성자에 다음 줄을 추가해 주는 정도면 게임에 Steam 모듈을 포함하여 빌드하도록 하는 데 충분할 것입니다.

DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");

Steam Overlay on Mac

Steam Overlay on Mac 은 Steam 클라이언트를 사용하여 게임을 실행시켜야 합니다. 그러기 위해서는, Steam 의 "Game" 메뉴에서 "Add a Non-Steam Game to My Library" 옵션을 사용하여 라이브러리에 게임을 추가해야 합니다.