GS2-Stamina¶
スタミナ値の管理を GS2 SDK for Unity から利用する手順を解説します。
スタミナプールを作成する¶
GS2マネージメントコンソールの GS2-Stamina から新しくスタミナプールを作成します。
スタミナプールは複数のアカウントのスタミナ値をまとめて管理する単位です。

『スタミナプールの新規作成』をクリックします。

スタミナプールの名前をつけます。
サービスクラスは想定されるアクセス数に応じたサイズを選択します。
回復速度 にはスタミナ値が1回復するまでの時間を秒単位で指定します。
これで、GS2マネージメントコンソールでおこなう準備は完了です。
スタミナ管理を実装する¶
ここからは Unity での実装になります。
まずはログイン処理を実装する必要があります。ログインして Gs2.GameSession を取得するまでの手順は GS2-Auth をご参照ください。
ここからはログインが完了している前提で説明を進めます。
現在のスタミナ値を取得¶
gs2.Stamina.Get (
result => {
if(result.Error != null) throw result.Error;
// スタミナ値の取得に成功
Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
},
session, // GS2 ログインセッション
STAMINA_POOL_NAME, // GS2-Stamina で作成したスタミナプール名
50); // 現在のスタミナの最大値
gs2.Stamina.Get() で現在のスタミナ値を取得できます。
引数には現在のスタミナの最大値を指定する必要があります。
これによって、レベルアップ時にいちいちGS2-Stamina にスタミナの最大値の変化を伝える必要がなくなります。
実装サンプル¶
public class GameLogic : MonoBehaviour {
private const string CLIENT_ID = "your client id";
private const string CLIENT_SECRET = "your client secret";
private const string STAMINA_POOL_NAME = "stamina-0001";
Gs2.Client gs2;
Gs2.GameSession session;
void Start () {
// GS2 Client を初期化
gs2 = new Gs2.Client (new Gs2.Profile ()
.WithClientId (CLIENT_ID)
.WithClientSecret (CLIENT_SECRET));
StartCoroutine (Login ());
}
IEnumerator Login() {
// GS2-Account を利用して認証します
string GAME_NAME = "game-0001";
string KEY_NAME = "account";
string USER_ID = "user";
string PASSWORD = "password";
string authenticationToken = null;
yield return gs2.Account.Authentication (
result => {
if(result.Error != null) throw result.Error;
authenticationToken = result.Result;
},
GAME_NAME,
KEY_NAME,
USER_ID,
PASSWORD);
// GS2-Account の認証情報を利用して GS2 にログインします
yield return gs2.Auth.Login (
result => {
if(result.Error != null) throw result.Error;
session = result.Result;
},
USER_ID,
KEY_NAME,
authenticationToken);
StartCoroutine (GetStamina ());
}
IEnumerator GetStamina() {
// 現在のスタミナ値を取得する
yield return gs2.Stamina.Get (
result => {
if(result.Error != null) throw result.Error;
// スタミナ値の取得に成功
Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
},
session, // GS2 ログインセッション
STAMINA_POOL_NAME, // GS2-Stamina で作成したスタミナプール名
50); // 現在のスタミナの最大値
}
void Update () {
}
}
スタミナ値を消費¶
gs2.Stamina.Consume (
result => {
if(result.Error != null) throw result.Error;
// スタミナ値の消費に成功
Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
},
session, // GS2 ログインセッション
STAMINA_POOL_NAME, // GS2-Ranking で作成したスタミナプール
50, // 現在のスタミナの最大値
5); // 消費するスタミナ量
gs2.Stamina.Consume() でスタミナ値の消費を行います。
スタミナ値が不足している場合や、複数のデバイスから同時にスタミナを消費した場合には result.Error に例外が返りますので、適切にハンドリングしてください。
実装サンプル¶
public class GameLogic : MonoBehaviour {
private const string CLIENT_ID = "your client id";
private const string CLIENT_SECRET = "your client secret";
private const string STAMINA_POOL_NAME = "stamina-0001";
Gs2.Client gs2;
Gs2.GameSession session;
void Start () {
// GS2 Client を初期化
gs2 = new Gs2.Client (new Gs2.Profile ()
.WithClientId (CLIENT_ID)
.WithClientSecret (CLIENT_SECRET));
StartCoroutine (Login ());
}
IEnumerator Login() {
// GS2-Account を利用して認証します
string GAME_NAME = "game-0001";
string KEY_NAME = "account";
string USER_ID = "user";
string PASSWORD = "password";
string authenticationToken = null;
yield return gs2.Account.Authentication (
result => {
if(result.Error != null) throw result.Error;
authenticationToken = result.Result;
},
GAME_NAME,
KEY_NAME,
USER_ID,
PASSWORD);
// GS2-Account の認証情報を利用して GS2 にログインします
yield return gs2.Auth.Login (
result => {
if(result.Error != null) throw result.Error;
session = result.Result;
},
USER_ID,
KEY_NAME,
authenticationToken);
StartCoroutine (ConsumeStamina ());
}
IEnumerator ConsumeStamina() {
// スタミナ値を消費する
yield return gs2.Stamina.Consume (
result => {
if(result.Error != null) throw result.Error;
// スタミナ値の消費に成功
Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
},
session, // GS2 ログインセッション
STAMINA_POOL_NAME, // GS2-Ranking で作成したスタミナプール
50, // 現在のスタミナの最大値
5); // 消費するスタミナ量
}
void Update () {
}
}