# PC SDK Nativeチュートリアル
Cocos2d-xベースのゲームにSTOVEPCDSDK2.0を適用する方法を学ぶ調べるチュートリアルです。
このチュートリアルを進む前に、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
以上のみサポートしており、EpicGamesLauncher
とUNREALエディタ
の事前設置が必要です。
# チュートリアル用のHelloStoveプロジェクトをダウンロード
下記のリンクからチュートリアル用のHelloStoveプロジェクトをダウンロードして解凍します。
HelloStoveプロジェクト
はUNREAL Stove SDKプラグイン
が連動していない状態です。 「UNREAL StoveSDKプラグイン」という連動型のイベントを行います。
# プロジェクトの環境構築
- PC SDKダウンロードページから、最新バージョンの
Native(C/C++)
配布ファイル(以後StovePCSDK
で記載)をダウンロードします。ファイルを解凍した後、コピーしてHelloStove_Native
フォルダーの中に貼り付けます。
・ブループリント(UNREAL Blueprint)はまだ公式的に支援しないが、必要時に、store.support@smilegate.comに技術支援を受けてお願致します。
# 1) アンリアルPluginフォルダーを構成する
HelloStoveプロジェクトのStovePCSDK_UNREALフォルダの中にSTOVE PC SDKのStovePCSDK_UNREAL_x.x.x.zip
ファイル圧縮を解除すれば見えるPlugins
フォルダをHelloStoveプロジェクトにコピーして下段の図のようにHelloStove_Unreal
をビルドすることができる状態で構成します。
HelloStove.uproject
をダブルクリックすると、UNREALリビルドをするか選択ウィンドウが出てきて(UNREALバージョンによってエンジンバージョンの選択ウィンドウが先に表示されることがあります)、ここで「はい(Y)」を選択すると、そのフォルダにBinaries、Intermediate、Savedなどの付属フォルダが作成されます。 付随的なフォルダ作成後、最終的にUNREALエディタが自動実行されます。
# 2) VisualStudioソリューションの作成
アンリアルビルドが正常に終わったらアンリアルエンジンを使い HelloStove.sln
を作成します。
HelloStove.uproject
をマウス右クリックし、Visual Studioソリューションを作成できます。
# 3) Visual Studioソリューションで StovePCSDKPlugin
を構成する
ビジュアルスタジオまで作成が終わったら、 HelloStove_Unreal
ソリューションで Plugin
を連動するため、下記のように作業を進めておく必要があります。
# a.
StoveSDK_Unreal
ビルドモジュールを構成
HelloStove_Unreal
から Plugin
モジュールを認識するため、 HelloStove.uproject
と HelloStove.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"
]
}
]
}
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
を、それぞれ下のコードのようにPublicDependencyModuleNames
とPrivateDependencyModuleNames
モジュールに追加(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
}
}
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
...
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
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
差し替えを完了した後、 StoveSDKEmptyObect.h
をプロジェクトから削除したり、そのまま置いてもビルドの起動には問題ありません。
# c.
UMyGameInstance
からUMyStoveSDKObect
メンバー変数を設定
HelloStove
の UMyGameInstance
に /*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;*/
};
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();*/
}
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;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"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");
}
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);
}
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;
}
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;
}
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));
}
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;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
トークンとは? 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));
}
2
3
4
5
6
7
8
# ビルド及び実行
HelloStoveプロジェクトをビルド
後に実行します。 UNREALエディタが実行されたら、ツールバーのプレイ
ボタンを押してデモを実行し、画面に表示されるそれぞれのボタンを順番に押しながら正常に動作するか確認します。
おめでとうございます! PC SDK Unrealのチュートリアルを完了しました。