# PC SDK Nativeチュートリアル

Cocos2d-xベースのゲームにSTOVEPCDSDK2.0を適用する方法を学ぶ調べるチュートリアルです。

confirm このチュートリアルを進む前に、STOVE Launcher (opens new window)をインストールしてSDK開発環境を準備するを参照して、App key、App secret、Game Idを事前に発行する必要があります。 Hello StoveプロジェクトはVisual Studio 2015 Update 3で制作されました。
HelloStoveプロジェクトのアンリアルStoveSDKプラグインは、UNREALエンジン4.21.2以上のみサポートしており、EpicGamesLauncherUNREALエディタの事前設置が必要です。

# チュートリアル用のHelloStoveプロジェクトをダウンロード

下記のリンクからチュートリアル用のHelloStoveプロジェクトをダウンロードして解凍します。

HelloStoveプロジェクトUNREAL Stove SDKプラグインが連動していない状態です。 「UNREAL StoveSDKプラグイン」という連動型のイベントを行います。

# プロジェクトの環境構築

  • PC SDKダウンロードページから、最新バージョンのNative(C/C++) 配布ファイル(以後 StovePCSDKで記載)をダウンロードします。ファイルを解凍した後、コピーしてHelloStove_Nativeフォルダーの中に貼り付けます。

confirm・ブループリント(UNREAL Blueprint)はまだ公式的に支援しないが、必要時に、store.support@smilegate.comに技術支援を受けてお願致します。

# 1) アンリアルPluginフォルダーを構成する

HelloStoveプロジェクトのStovePCSDK_UNREALフォルダの中にSTOVE PC SDKのStovePCSDK_UNREAL_x.x.x.zipファイル圧縮を解除すれば見えるPluginsフォルダをHelloStoveプロジェクトにコピーして下段の図のようにHelloStove_Unrealをビルドすることができる状態で構成します。

Figure1

HelloStove.uprojectをダブルクリックすると、UNREALリビルドをするか選択ウィンドウが出てきて(UNREALバージョンによってエンジンバージョンの選択ウィンドウが先に表示されることがあります)、ここで「はい(Y)」を選択すると、そのフォルダにBinaries、Intermediate、Savedなどの付属フォルダが作成されます。 付随的なフォルダ作成後、最終的にUNREALエディタが自動実行されます。

Figure6

Figure6.2

Figure6.3

# 2) VisualStudioソリューションの作成

アンリアルビルドが正常に終わったらアンリアルエンジンを使い HelloStove.slnを作成します。 HelloStove.uprojectをマウス右クリックし、Visual Studioソリューションを作成できます。

Figure2

# 3) Visual Studioソリューションで StovePCSDKPlugin を構成する

ビジュアルスタジオまで作成が終わったら、 HelloStove_Unreal ソリューションで Pluginを連動するため、下記のように作業を進めておく必要があります。

# a. StoveSDK_Unreal ビルドモジュールを構成

HelloStove_Unrealから Plugin モジュールを認識するため、 HelloStove.uprojectHelloStove.Build.cs ファイルにモジュール名依存性を追加します。

HelloStove.slnファイルをダブルクリックしてVisual Studioを実行してソリューションエクスプローラで、HelloStove.uprojectファイルを開いてPluginの名称であるStoveSDKPluginを"AdditionalDependencies"項目の中に以下のコードと一緒に追加します。

  • HelloStove.uproject
{
	"FileVersion": 3,
	"EngineAssociation": "4.21",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "HelloStove",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
                "UMG",
                "Engine",
                "CoreUObject",
                "StoveSDKPlugin"
			]
		}
	]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

HelloStove.uprojectでは Pluginの名称である StoveSDKPluginを追加します。 HelloStove.Build.csでは、PluginをUNREALエンジンにインポートするためにStoveSDKPluginを、それぞれ下のコードのようにPublicDependencyModuleNamesPrivateDependencyModuleNamesモジュールに追加(AddRange)します。

  • HelloStove.Build.cs

using UnrealBuildTool;

public class HelloStove : ModuleRules
{
	public HelloStove(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Projects", "StoveSDKPlugin" });


        PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Projects", "StoveSDKPlugin" });

		// Uncomment if you are using Slate UI
		// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

		// Uncomment if you are using online features
		// PrivateDependencyModuleNames.Add("OnlineSubsystem");

		// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# b. UMyStoveSDKObject の親クラスを変更

上のステップを通じてPluginのビルドモジュール従属性が追加されたなら、ストーブSDK関数を使用するために派生クラスであるUMyStoveSDKobjectの親クラスを従来のUStoveSDKemptyObjectクラスから新規「UStoveSDKObect」クラスに変更します。

親のクラス変更前にUMyStoveSDKobjectクラスはスケルトンクラスのUStoveSDKemptyObjectを継承していますが、どのような機能も動作しません。 Pluginのすべての機能を使用するためには、ヘッダーファイルStoveSDKobject.hを含み(include)、「UStoveSDKobect」クラスを新たに相続するように変更する必要があります。

#pragma once

#include "CoreMinimal.h"
#include "StoveSDKEmptyObject.h"
#include "MyStoveSDKObject.generated.h"

DECLARE_DELEGATE_OneParam(FDele_Delegate_Log, FString);



UCLASS()
class HELLOSTOVE_API UMyStoveSDKObject : public UStoveSDKEmptyObject
{
    GENERATED_BODY()
protected:
    // Called when the game starts or when spawned
   ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • After
#pragma once

#include "CoreMinimal.h"
#include "StoveSDKObject.h"
#include "MyStoveSDKObject.generated.h"

DECLARE_DELEGATE_OneParam(FDele_Delegate_Log, FString);


UCLASS()
class HELLOSTOVE_API UMyStoveSDKObject : public UStoveSDKObject
{
    GENERATED_BODY()
protected:
    // Called when the game starts or when spawned

    ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

差し替えを完了した後、 StoveSDKEmptyObect.hをプロジェクトから削除したり、そのまま置いてもビルドの起動には問題ありません。

# c. UMyGameInstanceから UMyStoveSDKObect メンバー変数を設定

HelloStoveUMyGameInstance/*remark delete*/ と表示されている以下のコードの注釈を削除します。

  • UMyGameInstance.h
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
/*remark delete*/
/*#include "MyStoveSDKObject.h"*/
#include "MyGameInstance.generated.h"

UCLASS()
class HELLOSTOVE_API UMyGameInstance : public UGameInstance
{
	GENERATED_BODY()
public:
	UMyGameInstance()
	{
		/*remark delete*/
		/*_stoveSDKObject = NewObject<UMyStoveSDKObject>();*/
	}

private:
	/*remark delete*/
    /*UPROPERTY()
    UMyStoveSDKObject* _stoveSDKObject;*/
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# d. MyUserWidgetのボタンイベントを連結

HelloStoveには StoveSDK API 呼び出しをテストするためのボタンが準備されています。 Pluginを連動し、ボタンイベントと繋げるためには UMyHelloStoveWidgetクラスの /*remark delete*/ と表示された以下のコードの注釈を削除します。

  • UMyHelloStoveWidget.cpp
    /*remark delete*/
	/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
	stoveSDKObject->_OnDeleLog.BindUObject(this, &UMyHelloStoveWidget::OnEventLog);*/

void UMyHelloStoveWidget::OnClickInit()
{
	/*remark delete*/
	/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
	stoveSDKObject->StoveSDKInit(FStoveConfig{});*/
}

void UMyHelloStoveWidget::OnClickToken()
{
	/*remark delete*/
	/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
	stoveSDKObject->StoveSDKGetToken();*/
}

void UMyHelloStoveWidget::OnClickUser()
{
	/*remark delete*/
	/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
	stoveSDKObject->StoveSDKGetUser();*/
}

void UMyHelloStoveWidget::OnClickUnInit()
{
	/*remark delete*/
	/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
	stoveSDKObject->StoveSDKUnInit();*/
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# SDK 初期化

SDKを初期化するためには FStovePCConfig 構造体にStoveSDKの環境値を設定し、
下記の例題コードを UMyStoveSDKObject::StoveSDKInit関数に作成します。

注意事項

YOUR_APP_KEY, YOUR_SECRET_KEY, YOUR_GAME_ID は事前に発行されたデータに変更します。 ストーブランチャーにログインしていない状態で UMyStoveSDKObject::StoveSDKInit 関数を呼び出すとエラーが発生します。

  • MyStoveSDKObject.cpp
FStoveResult UMyStoveSDKObject::StoveSDKInit(const FStoveConfig& Config)
{
    /*ここに 'チュートリアル' コードを追加します。*/
    /*この関数の、引数で受け取ったfConfigは無視します。*/

  //config
    FStoveConfig ReplaceConfig{ 
        "LIVE", 
        "YOUR_APP_KEY", 
        "YOUR_SECRET_KEY", 
        "YOUR_GAME_ID", 
        STOVE_PC_LOG_LEVEL_DEBUG, 
        "" };  // logpath
    FStoveResult ErrorResult = Super::StoveSDKInit(ReplaceConfig);
    if (ErrorResult.Result == STOVE_PC_NO_ERROR)
    {        
        OnLog("[Success] StovePC_Init");    
    }
    else
    {
        OnLog("[Error] StovePC_Init, Result %d", ErrorResult.Result);        
    }
    return ErrorResult;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

confirm "YOUR_APP_KEY"、"YOUR_SECRET_KEY"、"YOUR_GAME_ID"はSTOVE Studio (opens new window)から事前に発行されたデータに変更する必要があります。 STOVE Studioに入店申請したSTOVEアカウントでSTOVEランチャーにログインせずに「StovePC_Init」関数が呼び出されると、150エラーコード(sgup初期化失敗)が発生します。

UMyStoveSDKObject::StoveSDKInit関数の戻り値がSTOVE_PC_NO_ERRORつまり、'成功'ならUMyStoveSDKObjectのスーパークラス(Super class)であるUStoveSDKObject::StoveSDKInit関数で_isOnCallback値にtrueを入力してUStoveSDKObject::Tick関数をタイマーのように利用することになります。

UMyStoveSDKObject::StoveSDKInit関数が正常に完了したかを確認するため、コールバックUMyStoveSDKObject::OnInitComplete関数に下記のようにOnLogを追加します。

MyStoveSDKObject.cpp

void UMyStoveSDKObject::OnInitComplete()
{
    /*ここに「チュートリアル」コードを追加します。*/

    OnLog("[Success] IninComplte");
}

1
2
3
4
5
6
7

UMyStoveSDKObject::StoveSDKInit関数、または他のPluginの関数呼び出しが失敗する場合、コールバックUMyStoveSDKObject::OnError関数を通じてエラーコードを確認することができます。エラーコードを確認するためには以下のようにUMyStoveSDKObject::OnError関数の因子に入ってくるFStoveError構造体を通じてエラー情報を得ることができます。

MyStoveSDKObject.cpp

void UMyStoveSDKObject::OnError(FStoveError Error)
{
    /*ここに「チュートリアル」コードを追加します。*/

    OnLog("[Error]");
    OnLog("FuncType: %d", Error.FunctionType);
    OnLog("Result: %d", Error.ErrorResult.Result);
    OnLog("ExternalError: %d", Error.ExternalError);
}
1
2
3
4
5
6
7
8
9

# SDK 終了

Pluginのすべての使用が終わった後にリソースを整理するため、下コードと一緒にUMyStoveSDKObject::StoveSDKUnInit関数にスーパーグラスのSuper::StoveSDKUnInit関数を呼び出してPluginリソースを解除することができます。

MyStoveSDKObject.cpp

FStoveResult UMyStoveSDKObject::StoveSDKUnInit()
{
    /*ここに「チュートリアル」コードを追加します。*/

    //SDK終了
    FStoveResult ErrorResult = Super::StoveSDKUnInit();
    if (ErrorResult.Result == STOVE_PC_NO_ERROR)
    {        
        OnLog("[Success] StovePC_UnInit");    
    }
    else
    {
        OnLog("[Error] StovePC_UnInit, Result %d", ErrorResult.Result);        
    }
     
    return ErrorResult;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# ユーザー情報を取得

STOVEランチャーにログインしたユーザー情報を取得するためには、以下の呼び出しコードをUMyStoveSDKobject::StoveSDKGetUser関数からスーパークラスの「Super::StoveSDKGetUser」関数を呼び出し、ユーザー情報を要請します。 Super::StoveSDKGetUser関数が呼び出されると、コールバックOnUser関数でユーザー情報を伝達します。

MyStoveSDKObject.cpp

FStoveResult UMyStoveSDKObject::StoveSDKGetUser()
{
    /*ここに「チュートリアル」コードを追加します。*/

    FStoveResult ErrorResult = Super::StoveSDKGetUser();
    if (ErrorResult.Result == STOVE_PC_NO_ERROR)
    {
        OnLog("[Success] StovePC_GetUser");        
    }
    else
    {
        OnLog("[Error] StovePC_GetUser, ErrorResult %d", ErrorResult.Result);
    }
    return ErrorResult;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

UMyStoveSDKobject::StoveSDKGetUser関数が正常に呼び出された時のコールバックOnUserの因子であるFStoveUser構造体を通じてユーザー情報を獲得します。 ユーザー情報の獲得方法は、以下のコードからご確認いただけます。

MyStoveSDKObject.cpp

void UMyStoveSDKObject::OnUser(FStoveUser User)
{
    /*ここに「チュートリアル」コードを追加します。*/

    OnLog("[User]");
    OnLog("MemberNo : %u", User.MemberNo);
    OnLog("Nickname : %s", *(User.Nickname));
    OnLog("GameUserId: %s", *(User.GameUserId));
}
1
2
3
4
5
6
7
8
9

# トークン情報を取得

STOVEランチャーの使用者のトークン情報を得るためにはUMyStoveSDKObject::StoveSDKGetToken関数にスーパークラスのSuper::StoveSDKGetToken関数を呼び出しして獲得します。StoveSDKGetToken関数呼び出し後にコールバックOnToken関数の因子にトークン情報を確認することができます。

MyStoveSDKObject.cpp

FStoveResult UMyStoveSDKObject::StoveSDKGetToken()
{
    /*ここに「チュートリアル」コードを追加します。*/

    FStoveResult ErrorResult = Super::StoveSDKGetToken();
    if (ErrorResult.Result == StovePCResult::STOVE_PC_NO_ERROR)
    {        
        OnLog("[Success] StovePC_GetToken");
    }
    else
    {
        OnLog("[Error] StovePC_GetToken, Result %d", ErrorResult.Result);       
    }
 
    return ErrorResult;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

confirm トークンとは? STOVEランチャーにログインしたユーザーのアクセストークン(Access Token)で、ゲームサーバーはこのアクセストークンをSTOVE認証サーバーに渡してログインしたユーザーの検証を行うことができます。 アクセストークンの詳細な説明は、STOVEインディチームにお問い合わせ (opens new window)で技術サポートを受けることができます。

Stove SDK Get Tokenの関数が正常に呼び出されると、コールバックOn Tokenの関数の因子FStove Tokenでトークン情報を確認できます。

MyStoveSDKObject.cpp

void UMyStoveSDKObject::OnToken(FStoveToken Token)
{
    /*ここに「チュートリアル」コードを追加します。*/

    OnLog("[Token]");
    OnLog("Token : %s", *(Token.AccessToken));
}

1
2
3
4
5
6
7
8

# ビルド及び実行

HelloStoveプロジェクトをビルド後に実行します。 UNREALエディタが実行されたら、ツールバーのプレイボタンを押してデモを実行し、画面に表示されるそれぞれのボタンを順番に押しながら正常に動作するか確認します。

Figure5

おめでとうございます! PC SDK Unrealのチュートリアルを完了しました。

Last Updated: 2023/11/22 13:25:27