本日、Nifty Cloud mobile backend(NCMB) のサービス終了がアナウンスされました。
多くのインディーデベロッパーさんを支えてきたサービスで、移行先を検討される方も多くいらっしゃると思います。
GS2 がその移行先として選んでいただくにあたって、必要となるであろう情報をこちらにまとめます。
料金(無料枠)
まず、重要なのは利用料金です。
API
無料で利用可能な範囲についてですが、NCMB は 100万回 ⁄ 月 が無料で利用できます。
GS2 も月2万円の無料枠があり、APIリクエスト 0.02円 が基本となっているため、同じく100万回/月 が無料で利用可能です。
ストレージ
NCMB ではストレージ機能が提供されており、容量制限があります。
しかし、GS2 が提供するストレージ機能である GS2-Datastore には容量制限はありません。
代わりに 「データの保存容量 1GB 10円」の料金が発生し、無料枠の消費で充当が可能です。
データベース
NCMB ではデータベース機能があり、データベースにインデックスを構築して検索速度を向上するのは無料プランでは利用できません。
GS2 では任意のデータベースを作成できない代わりに、ゲームの用途に最適化された30を超えるサービスが提供されており、常に最適化されたインデックスを使用してデータベースにアクセスします。
そのため、サービス利用者は検索速度などを考える必要がなく、同様の料金プランも存在しません。
スクリプト
NCMB ではスクリプト機能があり、無料プランでは「5万回 ⁄ 月」が利用可能です。
GS2 では、通常のAPIリクエストと同様にカウントされます。
追加で「スクリプトの実行時間 1秒 0.005円」の追加料金が発生しますが、こちらも無料枠の消費で充当が可能です。
NCMBにあるような累計時間の制限はありません。
インディー開発者向けプラン
GS2 には NCMB にない料金プランとしてインディー開発者向けの料金プランがあります。
この料金プランは過去12ヶ月の売り上げが 1000万円未満の個人又は法人が利用可能なプランで、一定の条件を満たす限りGS2のあらゆる機能が無料で利用できます。
一定の条件
月の平均リクエスト回数が秒間10回または、一定期間継続して秒間リクエスト回数が100回を超える場合は Individual プランの対象外となります。
という、通常であれば売り上げ1000万円を超える規模の売り上げになっていてもおかしくない規模のアクセスが発生しているにもかかわらず、そのような申告をいただいていないケース向けの制限です。
起動シーケンス もしくは タイトル画面 に GS2 のロゴを掲載する必要があります。 ゲームのリリースの目処がたったタイミングで、チャットよりロゴデータと表示に伴うガイドラインを受け取ってください。
に従ってゲーム内にGS2のロゴを掲載する必要があります。
詳細は以下を参照してください。
利用方法
GS2 は https://gs2.io でサインアップすることで、すぐにサービスを利用開始できます。
サンプル
github.com
こちらにサンプルコードを用意しました。
NCMB を利用して実現していた一般的な内容が含まれているはずです。
実行例
GS2 では環境のセットアップに管理画面からポチポチ登録するだけでなく、定義ファイルのアップロードでも対応できます。
今回は CloudSave プロジェクトの実行までの流れを説明します。
環境のセットアップ
サンプルに template.yaml というファイルがあります。
GS2TemplateFormatVersion: "2019-05-01" Resources: AccountNamespace: Type: GS2::Account::Namespace Properties: Name: CloudSave-Account DatastoreNamespace: Type: GS2::Datastore::Namespace Properties: Name: CloudSave-Datastore
こちらは、GS2-Account と GS2-Datastore のセットアップをする内容が記述されています。
GS2 のマネージメントコンソール(管理画面)にアクセスします。
サイドメニューより「Deploy -> Stacks」を選択します。
「スタックの新規作成」を選択します。
スタックの名前を「CloudSave」として、template.yaml をアップロードします。
スタックの詳細画面で、実行状態が「作成完了」や、イベントリストに「CREATE_COMPLETE」のような表示が行われればセットアップは完了です。
実行
サンプルリポジトリをチェックアウトし、CloudSave.unity を Unity Editor で開きます。
シーン内に存在する GameObject を選択し、インスペクターを確認します。
ClientID / Client Secret にはあらかじめサンプルの動作確認用の値が設定されています。(この値は定期的に変更されるため、動作確認以外の利用は避けてください)
ここを自分のプロジェクトの ClientID / ClientSecret に書き換えましょう。
マネージメントコンソールの Home にプロジェクトで使用できる ClientID / ClientSecret が表示されますので、そちらを設定してください。
実行すると「ABC」という文字列がコンソールに書き出されます。
実装の確認
/* * Copyright 2016 Game Server Services, Inc. or its affiliates. All Rights * Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ #if GS2_ENABLE_UNITASK using System.Collections.Generic; using System.Text; using Cysharp.Threading.Tasks.Linq; using Gs2.Core.Model; using Gs2.Unity.Core; using Gs2.Unity.Util; using UnityEngine; using Cysharp.Threading.Tasks; using UnityEditor; namespace Gs2.Sample.Simple { public class CloudSaveAsync : MonoBehaviour { public string clientId; public string clientSecret; public string accountNamespaceName; public string datastoreNamespaceName; private async UniTask ProcessAsync() { // Initialize GS2 SDK var gs2 = await Gs2Client.CreateAsync( new BasicGs2Credential( clientId, clientSecret ), Region.ApNortheast1 ); // define GS2-Account namespace var gs2Account = gs2.Account.Namespace( this.accountNamespaceName ); // Create an anonymous account var account = await ( await gs2Account.CreateAsync() ).ModelAsync(); // login var gameSession = await gs2.LoginAsync( new Gs2AccountAuthenticator( accountSetting: new AccountSetting { accountNamespaceName = this.accountNamespaceName, } ), account.UserId, account.Password ); // define GS2-Datastore namespace var gs2Datastore = gs2.Datastore.Namespace( this.datastoreNamespaceName ); // define save data var saveData = new byte[] { (byte) 'A', (byte) 'B', (byte) 'C' }; // upload save data await gs2Datastore.Me( gameSession ).UploadAsync( "public", new List<string>(), saveData, "PublicData" ); // download save data var downloadedSaveData = await gs2Datastore.Me( gameSession ).DataObject( "PublicData" ).DownloadAsync(); Debug.Log(Encoding.ASCII.GetString(downloadedSaveData)); } public void Start() { StartCoroutine(ProcessAsync().ToCoroutine()); } } } #endif
実は ABC という文字列は GS2-Datastore に保存し、ダウンロードした内容を表示していました。
データの確認
上記プログラムでは GS2-Account でログインし、GS2-Datastore にデータをアップロードしていました。
マネージメントコンソールでデータを確認してみましょう。
まずは GS2-Account の管理メニューを開くためにサイドメニューから「Account -> Namespaces」を選択します。
CloudSave-Account がこのサンプルでアカウントを保存している領域です。
「bc708ed6-a319-4480-bd64-bd5727afec09」というユーザーIDのプレイヤーが作成されていることがわかります。
次に、GS2-Datastore の管理メニューを開きます「Datastore -> Namespaces」を選択し、「CloudSave-Datastore」を開きます。
ユーザーデータタブの Target User ID に「bc708ed6-a319-4480-bd64-bd5727afec09」を指定すると、このプレイヤーが GS2-Datastore にアップロードしたデータを参照できます。
「PublicData」 という名前のファイルがアップロードされていることがわかります。
3バイトのデータがアップロードされていることがわかります。
最後に
まずはぜひ触ってみてください!