GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

【新サービス】GS2-Gacha の公開と GS2-Showcase のエンハンスのお知らせ

みなさん、こんにちは。GS2の丹羽です。

GS2-Gacha を公開

本日は新しいサービス GS2-Gacha の公開をお知らせします。
GS2-Gacha は名前の通りガチャの実装をサポートするためのサービスです。

GS2-Gacha の特徴

抽選確率の管理

レアリティ毎の抽選確率を設定し、そのレアリティ内でリソース毎の抽選確率を設定出来ます。 これによって、レアリティ毎の排出確率を調整する手間が省け、運用がスムーズになります。
また、抽選確率は重みベースの確率設定が可能で、登録したりソースの抽選確率の合計が100%になるよう調整するような手間もありません。
これはたとえば、リソースAを1に、リソースBを4に設定すると、リソースAの排出率が20%。リソースBの排出率が80%として処理されることを意味します。

GS2に登録した抽選確率をクライアントに提供する機能も存在します。 これによって、実際の抽選確率とドキュメントの抽選確率に齟齬が発生するような運用上のミスを最小限に抑えることが可能です。
GS2-Gacha においては、ガチャと排出確率テーブルは別途管理されており、異なるガチャで排出確率テーブルを使い回すことが出来ます。
これによって、単発ガチャと10連ガチャで同じ排出確率テーブルを共有することが可能です。

10連ガチャでSR以上確定のような実装も可能

10連ガチャのような複数回抽選するガチャにおいて、抽選回数毎に異なる排出確率テーブルを設定出来ます。 これによって、10連ガチャでSR以上確定。のような設定が可能です。

GS2-Showcase との連携

GS2-Showcase と連携することで、ガチャの公開期間や抽選回数の制限を設けることが出来ます。

GS2-Showcase のアップデート

実装方法も非常に簡単です。その話をする前に GS2-Showcase のエンハンスの話をします。

商品の購入通貨に GS2-ConsumableItem を追加

これまで GS2-Showcase の対価には ストア決済 / GS2-Money / GS2-Gold が指定出来ました。今回のエンハンスによって GS2-ConsumableItem に対応しました。
GS2-ConsumableItem に対応したことで、ガチャチケットのような機能を実装出来るようになります。

購入対象商品に GS2-Gacha を追加

もう一つのエンハンスは、購入対象に GS2-Gacha が追加されたことです。
これによって、GS2-Showcase にガチャを陳列することが出来るようになり、ガチャの抽選処理まで GS2-Showcase が発行するスタンプシートで処理出来るようになりました。
この機能を使用する場合は、GS2-Gacha の採用にあたって新しく実装をする必要は無く、GS2-Showcase に GS2-Gacha の商品を陳列するだけで対応出来ます!

GS2-Showcase の実装方法については以下のエントリを参考にしてください。
gs2.hatenablog.com

GS2-Gacha の使い方

GS2-Gacha に登録した景品の排出確率を取得するサンプルは以下です。

レアリティ毎の排出確率を取得

    yield return gs2.Gacha.GetGachaProbability(
        result => {
            if(result.Error != null) throw result.Error;
            EzGachaProbabilityList probabilities = result.Result;
            foreach (var item : probabilities)
            {
                Debug.Log("レアリティ名: " + item.Name);
                Debug.Log("排出確率: " + item.Rate);        // 0.0f〜1.0f
            }
        },
        session,            // GS2 ログインセッション
        GachaPoolName,      // GS2-Gacha で作成したガチャプール名
        GachaName,          // GS2-Gacha で作成したガチャ名
        1                   // 何回目の抽選における排出確率を取得するか
    );

リソース毎の排出確率を取得

    yield return gs2.Gacha.GetGachaProbabilityDetail(
        result => {
            if(result.Error != null) throw result.Error;
            EzGachaProbabilityDetailList probabilities = result.Result;
            foreach (var item : probabilities)
            {
                Debug.Log("レアリティ名: " + item.RarityName);
                Debug.Log("リソースID: " + item.ResourceId);
                Debug.Log("排出確率: " + item.Rate);        // 0.0f〜1.0f
            }
        },
        session,            // GS2 ログインセッション
        GachaPoolName,      // GS2-Gacha で作成したガチャプール名
        GachaName,          // GS2-Gacha で作成したガチャ名
        1                   // 何回目の抽選における排出確率を取得するか
    );

ここからは GS2-Gacha を採用するけれど、GS2-Showcase を使用しない場合の実装例を示します。
特別な理由が無ければGS2としては GS2-Showcase 経由での利用を推奨します。

ガチャ一覧の取得

    yield return gs2.Gacha.ListGachas(
        result => {
            if(result.Error != null) throw r.Error;
            // ガチャリストの取得に成功
            EzGachaList gachas = result.Result;
            foreach (var item : gachas)
            {
                Debug.Log("ガチャの名前: " + item.Name);
                Debug.Log("メタデータ: " + item.Meta);
                Debug.Log("抽選回数: " + item.DrawCount);
            }
        },
        session,            // GS2 ログインセッション
        GachaPoolName       // GS2-Gacha で作成したガチャプール名
    );

ガチャの取得

    yield return gs2.Gacha.GetGacha(
        result => {
            if(result.Error != null) throw r.Error;
            // ガチャの取得に成功
            EzGacha gacha = result.Result;
            Debug.Log("ガチャの名前: " + gacha.Name);
            Debug.Log("メタデータ: " + gacha.Meta);
            Debug.Log("抽選回数: " + gacha.DrawCount);
        },
        session,            // GS2 ログインセッション
        GachaPoolName,      // GS2-Gacha で作成したガチャプール名
        GachaName           // GS2-Gacha で作成したガチャ名
    );

ガチャを抽選する

    yield return gs2.Gacha.DoGacha(
        result => {
            if(result.Error != null) throw result.Error;
            EzPrizeList prizes = result.Result;
            foreach (var item : prizes)
            {
                Debug.Log("排出されたリソースID: " + item.ResourceId);
            }
        },
        session,            // GS2 ログインセッション
        GachaPoolName,      // GS2-Gacha で作成したガチャプール名
        GachaName           // GS2-Gacha で作成したガチャ名
    );

GS2-Gacha の利用料金

最後に料金についてですが、GS2-Gacha は完全IO課金となっており、

API呼び出し 1,000回あたり3円 に加え、以下の操作をしたときに追加の費用が発生します。

ガチャ一覧/ガチャ情報の取得 1円/1,000回
抽選処理 3円/1,000回
ガチャマスタのエクスポート 1円/回

それでは、また。

(C) Game Server Services, Inc.