GS2-SDK‎ > ‎GS2 SDK for Unity‎ > ‎

GS2-Stamina

スタミナ値の管理を GS2 SDK for Unity から利用する手順を解説します。

スタミナプールを作成する

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



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


スタミナプールの名前をつけます。
サービスクラスは想定されるアクセス数に応じたサイズを選択します。

回復速度 にはスタミナ値が1回復するまでの時間を秒単位で指定します。

これで、GS2マネージメントコンソールでおこなう準備は完了です。

スタミナ管理を実装する

ここからは Unity での実装になります。
まずはログイン処理を実装する必要があります。ログインして Gs2.GameSession を取得するまでの手順は GS2-Auth をご参照ください。
ここからはログインが完了している前提で説明を進めます。

現在のスタミナ値を取得

  1. gs2.Stamina.Get (
  2.     result => {
  3.         if(result.Error != null) throw result.Error;
  4.         // スタミナ値の取得に成功
  5.         Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
  6.     },
  7.     session, // GS2 ログインセッション
  8.     STAMINA_POOL_NAME, // GS2-Stamina で作成したスタミナプール名
  9.     50); // 現在のスタミナの最大値

gs2.Stamina.Get() で現在のスタミナ値を取得できます。
引数には現在のスタミナの最大値を指定する必要があります。
これによって、レベルアップ時にいちいちGS2-Stamina にスタミナの最大値の変化を伝える必要がなくなります。

実装サンプル

  1. public class GameLogic : MonoBehaviour {
  2.     
  3.     private const string CLIENT_ID = "your client id";
  4.     private const string CLIENT_SECRET = "your client secret";
  5.     private const string STAMINA_POOL_NAME = "stamina-0001";
  6.     Gs2.Client gs2;
  7.     Gs2.GameSession session;
  8.     void Start () {
  9.         // GS2 Client を初期化
  10.         gs2 = new Gs2.Client (new Gs2.Profile ()
  11.             .ClientId (CLIENT_ID)
  12.             .ClientSecret (CLIENT_SECRET));
  13.         
  14.         StartCoroutine (Login ());
  15.     }
  16.     IEnumerator Login() {
  17.         // GS2-Account を利用して認証します
  18.         string GAME_NAME = "game-0001";
  19.         string KEY_NAME = "account";
  20.         string USER_ID = "user";
  21.         string PASSWORD = "password";
  22.         string authenticationToken = null;
  23.         yield return gs2.Account.Authentication (
  24.             result => {
  25.                 if(result.Error != null) throw result.Error;
  26.                 authenticationToken = result.Result;
  27.             },
  28.             GAME_NAME,
  29.             KEY_NAME,
  30.             USER_ID,
  31.             PASSWORD);
  32.         // GS2-Account の認証情報を利用して GS2 にログインします
  33.         yield return gs2.Auth.Login (
  34.             result => {
  35.                 if(result.Error != null) throw result.Error;
  36.                 session = result.Result;
  37.             },
  38.             USER_ID,
  39.             KEY_NAME,
  40.             authenticationToken);
  41.         StartCoroutine (GetStamina ());
  42.     }
  43.     IEnumerator GetStamina() {
  44.         // 現在のスタミナ値を取得する
  45.         yield return gs2.Stamina.Get (
  46.             result => {
  47.                 if(result.Error != null) throw result.Error;
  48.                 // スタミナ値の取得に成功
  49.                 Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
  50.             },
  51.             session,            // GS2 ログインセッション
  52.             STAMINA_POOL_NAME,    // GS2-Stamina で作成したスタミナプール名
  53.             50);                // 現在のスタミナの最大値
  54.     }
  55.     void Update () {
  56.     }
  57. }

スタミナ値を消費

  1. gs2.Stamina.Consume (
  2.     result => {
  3.         if(result.Error != null) throw result.Error;
  4.         // スタミナ値の消費に成功
  5.         Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
  6.     },
  7.     session, // GS2 ログインセッション
  8.     STAMINA_POOL_NAME, // GS2-Ranking で作成したスタミナプール
  9.     50, // 現在のスタミナの最大値
  10.     5); // 消費するスタミナ量

gs2.Stamina.Consume() でスタミナ値の消費を行います。
スタミナ値が不足している場合や、複数のデバイスから同時にスタミナを消費した場合には result.Error に例外が返りますので、適切にハンドリングしてください。

実装サンプル

  1. public class GameLogic : MonoBehaviour {
  2.     
  3.     private const string CLIENT_ID = "your client id";
  4.     private const string CLIENT_SECRET = "your client secret";
  5.     private const string STAMINA_POOL_NAME = "stamina-0001";
  6.     Gs2.Client gs2;
  7.     Gs2.GameSession session;
  8.     void Start () {
  9.         // GS2 Client を初期化
  10.         gs2 = new Gs2.Client (new Gs2.Profile ()
  11.             .ClientId (CLIENT_ID)
  12.             .ClientSecret (CLIENT_SECRET));
  13.         
  14.         StartCoroutine (Login ());
  15.     }
  16.     IEnumerator Login() {
  17.         // GS2-Account を利用して認証します
  18.         string GAME_NAME = "game-0001";
  19.         string KEY_NAME = "account";
  20.         string USER_ID = "user";
  21.         string PASSWORD = "password";
  22.         string authenticationToken = null;
  23.         yield return gs2.Account.Authentication (
  24.             result => {
  25.                 if(result.Error != null) throw result.Error;
  26.                 authenticationToken = result.Result;
  27.             },
  28.             GAME_NAME,
  29.             KEY_NAME,
  30.             USER_ID,
  31.             PASSWORD);
  32.         // GS2-Account の認証情報を利用して GS2 にログインします
  33.         yield return gs2.Auth.Login (
  34.             result => {
  35.                 if(result.Error != null) throw result.Error;
  36.                 session = result.Result;
  37.             },
  38.             USER_ID,
  39.             KEY_NAME,
  40.             authenticationToken);
  41.         StartCoroutine (ConsumeStamina ());
  42.     }
  43.         
  44.     IEnumerator ConsumeStamina() {
  45.         // スタミナ値を消費する
  46.         yield return gs2.Stamina.Consume (
  47.             result => {
  48.                 if(result.Error != null) throw result.Error;
  49.                 // スタミナ値の消費に成功
  50.                 Debug.Log("現在のスタミナ値: " + result.Result.Stamina);
  51.             },
  52.             session,             // GS2 ログインセッション
  53.             STAMINA_POOL_NAME,    // GS2-Ranking で作成したスタミナプール
  54.             50, // 現在のスタミナの最大値
  55.             5);                   // 消費するスタミナ量
  56.     }
  57.     void Update () {
  58.     }
  59. }
Comments