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

Online Subsystem Steam

언리얼 엔진

Online Subsystem 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 Online Subsystem 을 사용하는 모든 게임은 유효한 어플리케이션 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 파일을 엽니다.

  2. 다음 세팅을 추가합니다:

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

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

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

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

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

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

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

    [OnlineSubsystemSteam]
    bEnabled=true
    SteamDevAppId=480
  5. 마지막으로, 어플리케이션 연결을 위한 넷 드라이버에 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"

추가 참고사항

모듈 셋업

반드시 Unreal Engine Steam 모듈을 프로젝트 일부로 포함시켜야 합니다 (자세한 도움말은 언리얼 빌드 시스템 타깃 파일 문서를 참고하세요). 구체적으로는, 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" 옵션을 사용하여 라이브러리에 게임을 추가해야 합니다.