전체 글 (114)

05
19

썸네일

⚠️아랫분의 강좌에서 공부해서 정리한 글입니다. ↓

https://github.com/GameDevEducation/DevToolkit_BootstrappedScenes/tree/master/Assets/Scripts

https://www.youtube.com/watch?v=hcUX-VdUnb8 

 

 

Bootstrap 씬은 말 그대로 부팅할 때 리소스나 데이터 로드하는 씬입니다.

이걸로 씬 전환해도 바로바로 필요한 인벤토리 아이템이라던지 돈 데이터 가져올 수 있습니다.

 

 


기본적인 Scene 세팅하기

 

우선 씬은 총 3개로 Main Menu, Main Level, BootstrapScene이 될 것입니다.

BootstrapScene은 놔두고 먼저 씬 전환할 메인메뉴랑 메인 레벨 씬을 만들어 줍니다.

 

Main Level 씬에는 그냥 메인으로 돌아가는 버튼 하나만 구현하시면 됩니다.

Main Level 씬

Main Menu 씬에는 그냥 메인으로 돌아가는 버튼 하나만 구현하시면 됩니다.

Main Menu 씬

 

두씬 모두 씬 전환 하는 버튼에 아래 스크립트를 연결했습니다. ↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneLoadHelper : MonoBehaviour
{
    public void LoadScene(string name)
    {
        SceneManager.LoadScene(name, LoadSceneMode.Single);
    }
}

 


Bootstrap Scene 씬을 만들기

우선 Bootstrap Scene을 만든 뒤, Ctrl + shift + B를 눌러 빌드 창을 열고 BootstrapScene을 추가합니다.

 

그리고 BootstrapScene에 BootstrappedData 스크립트를 만들어 오브젝트에 붙여둡니다.

 

BootstrappedData 스크립트 ↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public static class PerformBootstrap
{
    const string SceneName = "Bootstrapped Scene";

    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    public static void Execute()
    {
        // traverse the currently loaded scenes
        for (int sceneIndex = 0; sceneIndex < SceneManager.sceneCount; ++sceneIndex)
        {
            var candidate = SceneManager.GetSceneAt(sceneIndex);

            // early out if already loaded
            if (candidate.name == SceneName)
                return;
        }

        Debug.Log("Loading bootstrap scene: " + SceneName);

        // additively load the bootstrap scene
        SceneManager.LoadScene(SceneName, LoadSceneMode.Additive);
    }
}

public class BootstrappedData : MonoBehaviour
{
    public static BootstrappedData Instance { get; private set; } = null;

    void Awake()
    {
        // check if an instance already exists
        if (Instance != null)
        {
            Debug.LogError("Found another BootstrappedData on " + gameObject.name);
            Destroy(gameObject);
            return;
        }

        Debug.Log("Bootstrap initialised!");
        Instance = this;

        // prevent the data from being unloaded
        DontDestroyOnLoad(gameObject);
    }

    public void Test()
    {
        Debug.Log("Bootstrap is working!");
    }
}

스크립트에서 RuntimeInitializeOnLoadMethod 부분을 눈여겨봐야합니다.

RuntimeInitializeOnLoadMethod은 게임 시작시 자동으로 시작됩니다.

Monobehaviour가 없어도 되고, static 메서드(함수)에서만 적용이 된다고 합니다.

더 자세한 RuntimeInitializeOnLoadMethod ↓

https://mentum.tistory.com/680

 

⚠️ SceneName 변수 부분이 바로 전환할 씬 이름이기 때문에 이 부분을 정확하게 써야합니다.

 


LazyBootstrap Scene 씬을 만들어서 비교해보기

 

Lazy 방식은 말그대로 게으르기 때문에 필요할 때만 초기화를 생성합니다.

초기화할 리소스가 많아서 시간이 오래 걸리는 경우에 적합합니다.

 

LazyBootstrappedData 스크립트 ↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LazyBootstrappedData
{
    private static LazyBootstrappedData _Instance = null;
    public static LazyBootstrappedData Instance
    {
        get
        {
            // create the instance if not present
            if (_Instance == null)
                _Instance = new LazyBootstrappedData();

            return _Instance;
        }
    }
    private LazyBootstrappedData()
    {
        Debug.Log("Created LazyBootstrappedData");
        // perform loading of data here
    }
    public void Test()
    {
        Debug.Log("LazyBootstrapper is working!");
    }
}

보다시피 싱글톤 패턴 비슷하게 생겨서 인스턴스가 필요한 시점에 생성됩니다.

이를 통해 초기화 작업이 필요한 경우에만 인스턴스가 생성되고,

인스턴스의 재사용을 통해 성능을 향상시킬 수 있습니다.

 

그리고 Monobehaviour도 상속 안하고 오브젝트 없어도 잘 작동합니다.

 


테스트

 

지금까지의 BootstrappedData와 LazyBootstrappedData 스크립트 모두 Test() 메서드 있습니다.

그렇기 때문에 아래 코드를 메뉴씬과 레벨 씬에 오브젝트를 하나 만들어 붙여줘서 테스트해봅시다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BootstrapTest : MonoBehaviour
{
    void Start()
    {
        BootstrappedData.Instance.Test();
        LazyBootstrappedData.Instance.Test();
    }
}

처음 실행 할 때
껏다 다시 시작할 때


보다시피 Lazy로 만든건 처음에만 없으면 생기고 Play 모드 끄고 다시 시작해보면,

LazyBootstrappedData가 인스턴스 있기 때문에 재활용해서 다시 생성안합니다.

 

COMMENT
 
05
19

⚠️이 글은 API 문서를 보면서 공부한 내용 정리한겁니다. ↓

https://kb.heathen.group/assets/steamworks/unity-engine/debugging-tools

 

썸네일


디버깅 활성화 하는 방법

 

프로젝트에서 사용하고 계신 Steam Settings를 찾아준 뒤,

사진 처럼 Enable Debug Messages 버튼을 눌러주면 됩니다.

 

Heathen의 도구를 켜면 가장 흔한 오류 지점인 초기화와 관련된 자세한 정보가 추가로 작성됩니다.

테스트를 완료하지 않았고 출시 전 버전일 경우 이 기능을 켜야 합니다.

 


스팀웍스 인스펙터 Steamworks Inspector

 

Heathen에서 프로젝트에 대해 구성된 모든 Steam API Artifacts의 상태와 값을 볼 수 있습니다.

바로 검사기 UI 인스펙터 Steamworks Inspector에서 상태와 값을 제공합니다.
인스펙터를 볼려면 아까 위의 Steam Settings SO에서 Open Debug Window를 눌러주면 됩니다.

아니면 유니티 왼쪽 상단 Window> Steamworks Inspector 메뉴를 열기만 하면 됩니다.


인스펙터의 데이터는 시뮬레이션이 실행되는 동안에만 채워집니다.

 

실행 모습 ↓


위의 사진처럼 인스펙터 Home에 보이는 각 항목을 살펴보자면

Initialization Status

이것은 Steam API의 상태를 나타내며 다음 값 중 하나를 가집니다.

 

● Idle
이는 API가 실행되지 않았거나 초기화를 시도하지 않았음을 의미합니다. 

상태는 시뮬레이션이 실행되고 있지 않을 때마다 이렇게 표시됩니다.

즉, 이것이 전혀 작동하지 않으려면 Play를 눌러야 합니다.


Initializing
이것은 API가 초기화를 시도하고 있음을 의미합니다. 

이는 일반적으로 매우 빠르게 지나가기 때문에 못 볼 수도 있습니다.


Initialized
이는 API가 초기화되었으며 보고된 값이 API에서 보고된 값임을 의미합니다.

 

Error or Failed
이는 API 초기화에 실패했음을 의미합니다.

이유에 대한 자세한 내용은 Unity 에디터 콘솔 로그를 확인하세요.

 

Listed App ID

활성 Steam 설정 개체에 나타나는 앱 ID입니다. 나열된 다른 ID와 일치해야 합니다.

 

Reported App ID

이것은 Steam API가 요청했을 때 우리에게 다시 보고한 앱 ID입니다. 

Steam가 알고 싶은건 이 앱 ID가 당신 본인이 맞는지입니다.

 

Steam_AppId.txt

이것은 현재 steam_appid.txt 파일에 기록된 앱 ID입니다.

 

 


 

이번엔 두번 째 탭인 Stats 탭을 봅시다.

Inspecting Stats

통계 탭을 사용하여 등록된 모든 통계의 값을 보고 Set 버튼으로 값을 업데이트할 수 있습니다.

 


 

세번째 탭인 Achievements

Inspecting Achievements

업적 탭을 사용하여 등록된 모든 업적을 보고 잠금 해제/초기화할 수 있습니다.

Reset하면 Unlocked된 업적이 다시 False 상태가 됩니다.

 


 

네번째 탭인 Leaderboards

Inspecting Leaderboards

 

순위표의 탭을 사용하여 등록된 모든 순위표에서 점수와 순위를 볼 수 있습니다. 

순위표는 Steam API의 가장 단순한 부분이지만 더 문제 발생하기 쉬운 부분 중 하나이기도 합니다.

 

가장 흔한 문제 예시 ↓

1. 정렬 순서가 잘못 설정되었습니다.

2. 리더보드를 "신뢰할 수 있는 것만"으로 설정했습니다.

3. Steam 개발자 포털에서 변경하고 게시하지 않았습니다.

 

때때로 순위표가 "중단"되는 것을 볼 수 있습니다.

일반적으로 보드의 값을 변경하거나 삭제 하는 경우,

이름은 같지만 설정이 다른 새 보드를 만들 때 발생하는 문제입니다.

대부분의 경우 새 고유 API 이름으로 새 보드를 만드는 것이 가장 쉽고 좋습니다.

 

오작동하는 보드를 수리해야 하는 경우에는,

Heathen이 볼 수 없고 영향을 미칠 수 없는 백엔드 기능이므로 Valve 지원팀에 문의해야 합니다.

 


 

다섯 번째 탭인 Leaderboardstext-align: start;"> 

Inspecting Downloadable Content

 

text-align: start;">위 사진에선 App Id가 너무 길어서 잘린 모습. text-align: start;">

text-align: start;">DLC 탭에서 모든 DLC의 구독 상태를 볼 수 있습니다.

 


 

여섯 번째 탭인 Inspecting Inventory

 

인벤토리 탭에는 게임에 등록된 모든 아이템이 표시되며 각 아이템을 지우고 부여할 수 있습니다.

 


 

일곱 번 째 Inspecting Lobbies

 

로비 안들어 갈 때 모습
로비에 들어간 모습

로비 탭은 감지된 각 로비에 대한 하위 페이지를 채우고 구성원 목록과 로비의 MetaData를 표시합니다.

COMMENT
 
05
16

⚠️이 글은 API 문서를 보면서 공부한 내용 정리한겁니다.

 

https://kb.heathen.group/assets/steamworks/unity-engine/components/steamworks-behaviour

 

썸네일

공부하실 때 유니티로 Steamworks Behavior 열어서 API문서와 비교하면 더 좋습니다.


1. Steamworks Behavior란?

 

Steamworks Behavior는 Steam API를 초기화하고 Unity Inspector에 공통 이벤트를 노출합니다.

버전 2.30.12부터 Steamworks Behavior는 더 이상 콜백 루프를 실행하지 않습니다.

구성 요소 스크립트를 사용하지 않고 Steam API를 초기화하고 실행할 수 있도록 만들었습니다.

즉, 사용할 때 Bootstrap Scene에서 Steamworks Behavior를 사용하면 큰 이점을 얻을 수 있습니다.

 

⚠️Bootstrap Scene이 뭐임? ↓

더보기

Bootstrap Scene은 엔진 초기화, 리소스 로딩, 게임 상태 설정 등과 같은 전반적인 준비 작업을 처리합니다. 

이 씬은 보통 게임이나 앱이 시작될 때 가장 먼저 로드되며, 초기화된 후에는 메인 씬이나 다른 씬으로 전환됩니다.

 

보통 게임 킬 때 인트로 화면(Splash 화면)이 Bootstrap Scene 역할을 담당합니다.

다만 게임 빨리 켜지는걸 원하는 사용자에게는 티안나게 작업을 처리해야합니다. 

 

유니티 Bootstrap 씬 구현

 

유니티 Bootstrap 씬 구현

⚠️아랫분의 강좌에서 공부해서 정리한 글입니다. ↓ https://github.com/GameDevEducation/DevToolkit_BootstrappedScenes/tree/master/Assets/Scripts https://www.youtube.com/watch?v=hcUX-VdUnb8 Bootstrap 씬은 말 그대로 부팅할 때

kimyir.tistory.com

위의 글에서 Bootstrap Scene을 만든 뒤, 에러가 난다면 종료하는 처리해주면된다,

 

아래는 코드 예제다. ↓

public class Bootstrapper : MonoBehaviour
{
  public ErrorController errorController;
  public LoadingScreenController loadingScreen;

  void Start()
  {
    GameSettings.MainCamera = Camera.Main;
    GameSettings.ErrorController = errorController;
    GameSettings.LoadingScreen = loadingScreen;
    // ... whever ever else you have
  }

  void Update()
  {
    if(SteamSettings.HasInitalizationError)
    {
        errorController.ReportError("An error occured while initalizing Steam API, " 
        + "this is a required system and so the game must close. "
        + "If this persists please contact technical support."
        + "\n\nError Message: "
        + SteamSettings.InitalizationErrorMessage);
        Application.Quit();
    }
    else if (SteamSettings.Initialized)
    {
        //All is well so load the title scene
        StartCoroutine(LoadTitle());
    }
  }

  IEnumerator LoadTitle()
  {
    //This should load the title scene async and update UI to reflect status
    //This should handle any error in loading the title scene, 
    //report it to the user if it happens and close the app nicely
  }
}

 


2. 어떻게 쓰는건데?

 

우선 게임에서 로드할 제일 첫 번째 Scene의 GameObject에 Steamworks Behavior 스크립트를 붙혀야합니다. 

이 GameObject는 Steam API 통합을 작동하는 동안 절대 파괴되지 않는 것이 중요합니다. 

 

때문에 로딩을 더 길게 만드는게 좋아서 아예 로딩씬(Loading Scene)을 만드는게 좋습니다.

로딩으로 시간을 끌면 Bootstrap Scene을 완전히 다 로드한 후 다음 씬을 로드할 수 있습니다.

그리고 다음 씬에서는 Bootstrap Scene을 언로드하지 않고 유지합니다.

Bootstrap Scene을 유지함으로써 게임 전반에서 필요한 설정을 계속 유지할 수 있으며,

게임의 성능을 최적화할 수 있습니다.

 

간단하게 말해서 Bootstrap Scene을 언로드하지 않는 것이 좋습니다. 

만약 그래도 삭제될까 무섭다 하시면 DontDestroyOnLoad 접근방식을 이용하면됩니다.

어쨋든 Steamworks Behaviour을 정의한 Scene을 중복 로드하지 말고 삭제 안되게 유지하세요. 

 

Steamworks Behaviour은 UnityEvents에 따라 Steam API 통합을 초기화, 작동 및 종료하기 위해 존재합니다.

한 가지 예외가 있는데 API 초기화를 지연해야 하는 상황에서 Steam 게임 서버를 운영하는 경우입니다.

이 경우 개발자가 Steam 게임 서버를 자동으로 초기화하지 않도록 Steam 설정을 구성할 수 있습니다.

만약 수동으로 초기화 프로세스를 시작하려면 SteamworksBehaviour.InitializeGameServer를 호출해야 합니다.

 

근데 자동으로 초기화하는게 일반적입니다.

수동으로 초기화 실행 예시 ↓

steamworksBeahviour.InitalizeGameServer();

 


3. Events 사용법

 

스팀 초기화 Event

public UnityEvent evtSteamInitialized = new UnityEvent();

한번 Steamworks Behaviour를 유니티에서 스크립트 열어서 코드를 봅시다.

코드를 보면 Steam API가 완전히 초기화되고 모든 아티팩트를 사용할 준비가 되면 호출됩니다.

 

이 이벤트에는 매개변수가 없으며 이 이벤트에 대한 핸들러는 다음과 같습니다.

public void HandleEvent()
{
    //할꺼 여기다가
}

문서 설명이 부실한데 유니티에서 직접 코드를 보니 그냥 일반적인 UnityEvent의 헨들러와 똑같다.

원하는거 AddListener(헨들러 함수()) 이런식으로 넣어주면 된다는 말이다.

 


4. Evt Steam 초기화 오류

 

┌스팀 초기화 오류 발생시 Event

public UnityStringEvent evtSteamInitializationError = new UnityStringEvent();

Steam API가 초기화에 실패하면 호출됩니다. 

이 이벤트에는 초기화에 실패한 이유를 나타내는 메시지인 문자열 유형의 매개변수 1개가 있습니다. 

 

이 이벤트에 대한 핸들러는 다음과 같습니다.

public void HandleEvent(string errorMessage)
{
    //함수 내용
}

코드를 보니 초기화 실패 하면 위의 헨들러같은걸 실행해서 Debug.LogError(errorMessage);로 디버깅한다.

따라서 헨들러 만들 때 string 매개변수가 무조건 있다.

 


5. 이벤트 로비 초대 인수 감지됨

 

public LobbyDataEvent evtLobbyInviteArgumentDetected = new LobbyDataEvent();

로비 ID가 헨들러 인수에 전달되었음을 시스템이 감지한 경우 초기화가 완료된 후 호출됩니다. 

사용자가 로비 초대를 수락했지만 현재 게임을 플레이하고 있지 않은 경우에 발생합니다. 

여기서 Steam은 command line의 로비 ID로 게임을 시작합니다.

 

이 이벤트에는 command line 인수에 전달된 로비인 Lobby 유형의 인수가 1개 있으며 다음과 같은 핸들러가 있습니다.

public void HandleEvent(Lobby lobby)
{
    //DO WORK
}

 

 

Lobby 문서 ↓

https://kb.heathen.group/assets/steamworks/data-layer/lobby-data

 


6. 필드 속성과 함수(메서드)

 

Steamworks Behaviour에 보면 이런 필드 속성이 있습니다.

public SteamSettings settings;

이건 API를 초기화할 때 사용해야 하는 SteamSettings입니다.

SteamSettings는 Scriptable Object로 되어있어 에디터에서 수정해서 넣어주면됩니다.

 

SteamSettings 문서 ↓

https://kb.heathen.group/assets/steamworks/unity-engine/scriptable-objects/steam-settings

 

 

Steamworks Behaviour에 보면 요런 메서드가 스크립트에 있습니다.

public static void CreateIfMissing(SteamSettings settings, bool doNotDestroy = false)

필요할 때 안전하게 Steamworks Behavior를 생성하는 데 사용할 수 있는 정적 메서드입니다. 

이렇게 하는 것은 권장되지 않습니다. 개발 시 Steamworks 동작이 설정되는 Bootstrap Scene을 사용해야 합니다.

 

"늦은 초기화" 접근 방식을 선택하거나 단순히 사용해야 하는 경우 이 방법을 사용하여 

Steamworks 동작을 안전하게 생성하고 선택적으로 파괴 금지로 표시할 수 있습니다. 

Steamworks 동작이 이미 존재하는 경우 아무 것도 생성하지 않습니다.

COMMENT
 
05
16

⚠️이 글은 API 문서를 보면서 공부한 내용 정리한겁니다.

https://kb.heathen.group/assets/steamworks/unity-engine/quick-start-guide/gameobject-initialization

 

썸네일

 


1. 소개

 

우리가 선택한 GameObject에 간단한 컴포넌트 스크립트를 붙여 Steam API를 초기화합니다. 
그런다음 Steamworks Behavior 또는 Steamworks Creator를 사용하여 초기화를 처리할 수 있습니다. 
그러나 두 가지 방법 모두 먼저 Steam Settings object를 만들고 구성해야 합니다.

 
우리의 Steam Settings object를 하나 정의하고 구성을 한 뒤에는, 

Steamworks Behavior 또는 Steamworks Creator에 둘 중 원하는 곳에 적용할 수 있습니다.

 


Steamworks Behaviour

 

Steamworks Behaviour 문서 ↓

https://kb.heathen.group/assets/steamworks/unity-engine/components/steamworks-behaviour

or

스팀웍스 글

 

 

Steamworks Behaviour는 게임 시작 시 Steam 설정 개체를 초기화하는 데 사용되며,

Initialized와 같은 몇 가지 시스템 수준 이벤트에 대한 액세스를 제공합니다.

 

한 게임에는 Steamworks Behavior가 1개만 있어야 합니다.

 


Steamworks Creator

 

Steamworks Creator 문서 ↓

https://kb.heathen.group/assets/steamworks/unity-engine/components/steamworks-creator

 

 

이것은 Steam API가 이미 초기화되었는지 여부를 확인하는 간단한 스크립트 동작입니다. 

그렇지 않은 경우 새 Steamworks Behaviour을 생성하고 원한다면 DontDestroyOnLoad 가능합니다. 

필요한 경우에만 작동하므로 Steamworks Creator를 게임의 모든 Scene에 안전하게 배치할 수 있습니다.

Scene 아키텍처에 대한 옛날 방식을 사용하고 Bootstrap 방법을 사용하지 않는 개발자를 위한 것입니다.

어차피 Bootstrap 방식을 쓰신다면 이건 상관없을 듯 합니다.

 


Steam Settings

 

Steam Settings 문서 ↓

https://kb.heathen.group/assets/steamworks/unity-engine/scriptable-objects/steam-settings

 

Steam Settings은 Scriptable objects입니다.

Steam Settings은 Steam API를 초기화 하는 역할을 합니다.

사용방법은 Steam Settings 개체를 만들고 스크립트에서 참조해 준 뒤,

Initialize() 메서드를 호출하여 API를 초기화해야 합니다.

Scriptable Objects이기 때문에 개체 만들 때 프로젝트 탭에 우클릭 하셔서 만드실 수 있습니다.

Create > Steamworks > Settings

생성하면 보시는 것과 같이 Application Id가 있습니다.

이 칸에는 뭐라도 설정해주셔야합니다.

 

Application Id

자신의 ID가 없으면 업적, 통계 또는 기타 인공물을 만들 수 없고 배포도 안됩니다.

Valve는 신청 수수료를 지불하면 앱 ID를 발급합니다.

아직 자신의 ID가 없는 경우 App ID 480을 테스트 ID로 사용할 수 있습니다.

Heathen의 샘플과 데모는 모두 App ID 480을 사용합니다.

 

Artifacts

클릭하여 확대

Application Id 밑에 Artifacts 탭이 있습니다.

 

Steam Settings Object는 입력 필드, 통계, 순위표, 업적, DLC 및 인벤토리 항목과 같은

모든 Steam "Artifacts"를 참조하는 데 사용할 수 있습니다.

이것들은 대부분 Steam 개발자 사이트에서 정의한 다음 "Import" 버튼을 눌러 프로젝트로 가져올 수 있습니다.

 

Import 버튼이 작동하려면 Unity 에디터가 "Play" 모드에 있어야 합니다. 

 

Import로 가져올 수 있는 것들 ↓

  • 업적
  • 다운로드 가능한 콘텐츠
  • 인벤토리 항목  

 

* 메모 Valve는 가져올 수 있는 인벤토리 항목에 대한 정보를 제한합니다.

예를 들어 번들 콘텐츠는 가져오지 않습니다.

이는 Valve의 의도적인 제한 사항이며 해결할 수 없습니다.

일반적으로 항목의 항목 ID만 필요하므로 대부분의 사용 사례에서 문제가 되지 않습니다.

 

위의 Artifacts까지 설정한 Steam Settings는 스크립트에서 쓸 때 초기화하셔야합니다.

using HeathenEngineering.SteamworksIntegration;

public class SomeScriptOfYours : MonoBehaviour
{
    [SerializeField]
    private SteamSettings settings;

    void Start()
    {
        //Initialize()만 해주면 사용 가능
        settings.Initialize();
    }
}

근데 예제를 살펴보니 Start() 아니더라도 OnEnable()에서 초기화해주셔도 됩니다.

 


Steam 게임 서버(Steam Game Server) 구성 Configuration

 

Steam Game Server 문서 ↓

https://kb.heathen.group/company/steam/steamworks/multiplayer/game-server-browser

 

Steam 게임 서버 구성을 사용하면 Steam에서 볼 수 있는 게임 서버의 세부 정보를 구성할 수 있습니다. 

이것은 "Steam 게임 서버(Steam Game Server)"로 초기화하고 로그온할 서버 빌드에만 해당됩니다.

 

"자동 로그온 (Auto LogOn)" 기능을 false로 설정했다면,

로그온 준비 되었을 때 API.App.Server.LogOn() 메서드를 통해 서버에 대한 LogOn을 호출해야 합니다.

 

이는 선택한 HLAPI에서 "StartServer"를 호출하고 서버를 구성하여 준비한 후와 같이 

서버를 준비할 때까지 서버가 Steam 게임 서버 브라우저에 등록되지 않도록 하려는 경우에 

가장 일반적으로 수행됩니다. 연결을 위해.

 

구성 Configuration 문서 ↓

https://kb.heathen.group/assets/steamworks/objects/steam-game-server-configuration

COMMENT