Unity Gaming ServicesのCloud Code

Unity Gaming Services (UGS)には、クラウド上で実行されるサーバーサイドのコードを作成、管理するCloud Codeというサービスがあります。

Cloud Codeを用いることで、デバイス上ではなくUGSのサーバー上で処理を実行できるため、

データの一貫性を保ったり不正を防ぐのに役に立ちます。

Cloud Codeは、Remote ConfigCloud SaveLeaderboardsなど、他のUGS機能と連動できます。

Cloud Codeを使用するための準備

UnityEditor上で Package Manager を開き、以下の手順で Cloud Code をインストールします。

  1. 左側の雲のアイコンを選択します。
  2. UGSのパッケージ一覧からCloud Codeを選択します。
  3. Installをクリックします。

インストールが完了すると、Project SettingsServices内に

Cloud Codeが追加されます。

Go to Dashboard」を押すと、ブラウザで Unity CloudCloud Code 管理画面を開けます。

Cloud Codeで出来ること

  • 不正(チート)対策

    クライアント側に処理があると改竄される場合があります。

    クラウド上にロジックがあることで改竄は難しくなります。

    ゲーム内通貨を操作する処理はサーバーサイドにあると安全性が増します。

  • 集中的な処理の管理

    よくあるガチャのような機能、

    複数のユーザーに影響する様な機能、

    などはクラウド側で実装しクライアント側へは結果を返すだけ、といった実装が出来ます。

  • 他のUGSサービスとの連携

    ゲーム内通貨を扱ったり、CloudSaveの内容を調査したり、ランキングを操作したりなどの処理も記述できます。

Cloud Code上のスクリプト

UnityEditor上のスクリプトはC#で記述しますが、

Cloud Code上はC#モジュールを用意するかJavaScriptで記述することになります。

C#モジュールは準備がいるので、今回はJavaScriptで解説したいと思います。

JSスクリプトの追加

Dashboardへアクセスし、Cloud Codeを選択します。

JS スクリプトを選択します。

Create your first script を選択します。

ScriptNameを入力します。

Templateは任意で選択しますが、今回はサンプルとしてRoll a Dice を選択します。

次にNextを押します。

JavaScriptに渡したいパラメータがある場合は、Add Parameterから追加出来ます。

必要に応じて追加してください。

次にAddを押します。

これでJavaScriptの追加は完了です。

追加されたスクリプトを確認する

以下の様なスクリプトが作成されました。

Runボタンを押すと実行することができます。

実行してみると、Responseの部分に結果が表示されます。

このサンプルでは、6面サイコロを振って1が出た、という結果になっています。

問題なければ右上のPublish Versionを押します。

これでスクリプトが公開され、Unity側から呼び出すことができるようになります。

Unity側から呼び出してみる

以下のスクリプトを用意し、ボタンが押された時にSampleスクリプトを呼ぶようにしました。

public class CloudCodeTest : MonoBehaviour
{
    [SerializeField] private Button _runButton;

    public class DiceResult
    {
        public string roll;
        public string sides;
    }
    
    private void Awake()
    {
        _runButton.onClick.AddListener(() => RunCloudCode());
    }

    private void OnDestroy()
    {
        _runButton.onClick.RemoveAllListeners();
    }

    private async Task RunCloudCode()
    {
        var result = await CloudCodeService.Instance.CallEndpointAsync<DiceResult>("Sample");
        
        Debug.Log(result.roll);
        Debug.Log(result.sides);
    }
}

SampleスクリプトはJSON形式で結果を返しているので、DiceResultというクラスを用意し、

CallEndpointAsyncメソッドに指定することで結果を受け取っています。

ダッシュボード上で実行した時と同様に、rollsidesの値を取得できました。

まとめ

今回はCloudCodeについて簡単に解説しました。

CloudCode上にロジックを実装することで改竄や不正を防いだり、他のUGSサービスと連動する処理を実装しやすくなります。

一方で普段C#でスクリプトを書いている場合、急にJavaScriptで記述しないといけなくなると少し敷居が高いかもしれません。

どうしてもC#で記述したい場合はC#モジュールに挑戦してみてください。

今回は簡単なサンプルでしたが、ソーシャルゲームでよくあるガチャやログインボーナスのような機能を

作成することもできるでしょう。

もしやってみようと思ったらこちらの記事が参考になるか分かりませんが、挑戦してみてください。

📣おしらせ!

Unity Asset Storeでサマーセールが開催中です。

🔗関連ページ