PC SDK의 API는 게임엔진 및 게임로직에 방해가 되지 않도록 대부분 비동기로 수행됩니다. API 호출에 대한 결과는 PC SDK 내부의 큐에 적재되며 게임이 API 호출에 대한 결과를 처리하려 할 때 RunCallback 메서드를 호출함으로써 등록한 콜백이 실행됩니다. 보통 RunCallback 메서드의 호출은 코루틴을 이용하여 작성하며 호출 주기는 설정이 가능 합니다.
private IEnumerator RunCallback(float intervalSeconds)
{
WaitForSeconds wfs = new WaitForSeconds(intervalSeconds);
while (true)
{
StovePC.RunCallback();
yield return wfs;
}
}
코루틴은 MonoBehaviour.StartCoroutine
메서드를 통해 시작하며 일반적으로 PC SDK 초기화가 성공하면 시작하고 PC SDK 종료가 성공하면 중지합니다.
PC SDK 종료 성공 후 RunCallback 코루틴의 중지를 위해 멤버 변수를 이용하는 방법이 있습니다.
private Coroutine runcallbackCoroutine;
게임프로젝트에 멤버변수로 선언된 **runcallbackCoroutine
**을 아래 코드와 같이 **StartCoroutine
**함수와 **StopCoroutine
**함수를 사용해 타이머처럼 동작시킬 수 있습니다.
public void ToggleRunCallback_ValueChanged(bool isOn)
{
if (isOn)
{
float intervalSeconds = 1f;
runcallbackCoroutine = StartCoroutine(RunCallback(intervalSeconds));
WriteLog("RunCallback Start");
}
else
{
if (runcallbackCoroutine != null)
{
StopCoroutine(runcallbackCoroutine);
runcallbackCoroutine = null;
WriteLog("RunCallback Stop");
}
}
}
PC SDK를 초기화하기 위해서는, 먼저 **StovePCConfig
**와 StovePCCallback
구조체에 값을 채운 뒤, StovePC.Initialize
메서드를 호출합니다. 아래 코드를 참고하여 멤버변수를 이용하여 StovePCConfig
구조체의 각 필드 값을 채웁니다. 해당 멤버변수는 유니티 에디터의 인스펙터를 통해 값을 설정합니다.
[SerializeField]
private string env;
[SerializeField]
private string appKey;
[SerializeField]
private string appSecret;
[SerializeField]
private string gameId;
[SerializeField]
private StovePCLogLevel logLevel;
[SerializeField]
string logPath;
StovePCConfig config = new StovePCConfig
{
Env = env,
AppKey = appKey,
AppSecret = appSecret,
GameId = gameId,
LogLevel = logLevel,
LogPath = logPath
};
<aside> 💡 "YOUR_APP_KEY", "YOUR_SECRET_KEY", "YOUR_GAME_ID"는 스토브 스튜디오에서 발급 받은 키값으로 데이터로 변경해야 됩니다.
스토브 런처에 로그인 하지 않은 상태로 StovePC.Initialize
메서드를 호출하면 에러가 발생하니 사전에 스토브 런처를 실행하고 로그인합니다.
</aside>
<aside> 💡 주의사항
PC SDK 로그경로는 절대적경로로 설정해야 합니다. ex) C:\Program Files\{Your Game Folder}\Logs 마지막에 "\"는 추가하지 않습니다. PCSDK 에서 "StovePCSDK.log" 파일명을 자동으로 추가합니다.
만약 "" 빈문자열로 경로를 설정하게 되면 PC SDK는 자동적으로 게임실행파일 폴더 또는 PC SDK DLL 이 위치한 폴더의 경로로 로그가 생성됩니다.
게임과 PC SDK간의 연동은 C# 델리게이트(Delegate)을 사용합니다. 게임에서는 아래 StovePCCallback
클래스의 콜백에 연결할 델리게이트 메서드를 정의해야 합니다.
</aside>
public class StovePCCallback
{
// StovePCSDK 에서 에러발생시 호출되는 콜백
public StovePCErrorDelegate OnError;
// PC SDK 초기화가 완료됐을 때 호출되는 콜백
public StovePCInitializationCompleteDelegate OnInitializationComplete;
// GetToken 처리가 완료됐을 때 호출되는 콜백
public StovePCTokenDelegate OnToken;
// GetUser 처리가 완료됐을 때 호출되는 콜백
public StovePCUserDelegate OnUser;
// GetOwnership 처리가 완료됐을 때 호출되는 콜백
public StovePCOwnershipDelegate OnOwnership;
}
여기서 주의할 점이 있는데 StovePCCallback
객체는 PC SDK가 종료될 때까지 보존되어야 합니다. 그 이유는 StovePCCallback
객체가 가비지 컬렉팅이 되면 PC SDK 내부에서는 콜백을 호출 할 수 없기 때문입니다.
이 점을 충족시키기 위해 StovePCCallback
클래스를 게임프로젝트 클래스의 멤버변수로 선언해서 가비지 컬렉팅이 되지 않도록 하여 해결할 수 있습니다.
private StovePCCallback callback;
// StovePCCallback 클래스 instance 생성
this.callback = new StovePCCallback
{
OnError = new StovePCErrorDelegate(this.OnError),
OnInitializationComplete = new StovePCInitializationCompleteDelegate(this.OnInitializationComplete),
OnToken = new StovePCTokenDelegate(this.OnToken),
OnUser = new StovePCUserDelegate(this.OnUser),
OnOwnership = new StovePCOwnershipDelegate(this.OnOwnership)
};
필수적으로 연동해야 하는 OnError
, OnInitializationComplete
, OnOwnership
콜백함수 외의 나머지 콜백함수는 필요 시에만 연동을 하면 됩니다. 예를 들어, 소유권(Ownership) 기능만 사용하는 경우, 아래와 같이 델리게이트 메소드로 연결하면 됩니다.
/*
소유권(Ownership) 기능만 사용하는 경우는,
필수 구현 콜백인 OnError, OnInitializationComplete 외에
OnOwnership 콜백만 추가로 구현해서 연결합니다.
*/
this.callback = new StovePCCallback
{
OnError = new StovePCErrorDelegate(this.OnError),
OnInitializationComplete = new StovePCInitializationCompleteDelegate(this.OnInitializationComplete),
OnOwnership = new StovePCOwnershipDelegate(this.OnOwnership)
};