GS2-Stamina

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

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

GS2マネージメントコンソールの GS2-Stamina から新しくスタミナプールを作成します。

スタミナプールは複数のアカウントのスタミナ値をまとめて管理する単位です。

../../../_images/step-00018.png

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

../../../_images/step-00028.png

スタミナプールの名前をつけます。

サービスクラスは想定されるアクセス数に応じたサイズを選択します。

回復速度 にはスタミナ値が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 () {

    }
}