ゲーム開発

Unity Gaming Services とは?匿名ログインと Cloud Save を試してみた

unity-gaming-services

2021年10月、Unity で公式に提供するサービス「Unity Gaming Services」が公開されました。

これまで、バックエンドの開発をする場合は PlayFab などの他サービスを利用する必要がありました。

しかし、Unity Gaming Services がリリースされたことで、ログインやゲーム内通貨などの機能を Unity のサービス内で完結することもできます。

本記事では、Unity Gaming Services の概要と、実際に使ってみた内容を紹介しています。

それでは早速見ていきましょう。

Unity Gaming Services とは

unity-gaming-services

概要

Unity Gaming Services とは、ゲームの開発からリリース後の運用までに必要な機能を、ひとつのサービスにまとめたものです。

発展途上なので、厳密には「ひとつのサービスにまとめようとしている」という表現が正しいかもしれません。

機能としては以下のものがあり、小さく「BETA」と書かれている機能が新しく追加されたものです。

unity-gaming-services

一番よく使うのは「バックエンド」のところですかね。

ログイン機能やゲーム内通貨は必須ですし、プレイヤーごとのデータ保存もクラウド上にできるのは嬉しいですね。

Cloud Code は Azure Functions のような FaaS(Function as a Service)で、サーバーレスに関数を呼び出すことができます。

ただし、JavaScript での実装になるのが難点です。

Economy では、ゲーム内通貨だけでなくアイテムやインベントリの機能もついています。

料金

「無料」で開始でき、枠が足りない人は「従量課金制」で使用することになり、ベータ版の間は無料です。

一部を抜粋して以下に載せておきます。

unity-gaming-services

どれも試す分には十分な枠が用意されていますね。

仮に従量課金制の枠になったとしても、かなり良心的な値段に思います。

Unity Gaming Services を使ってみる

実際に Unity Gaming Services を使ってみたので、使い方を載せておこうと思います。

今回使ってみたのは、匿名ログインと Cloud Save です。

プロジェクトをダッシュボードにリンクする手順などは省略しています。うまくいかない場合は、Cloud Save の公式ドキュメントも合わせて参照してください。

サービスの有効化

Unity ダッシュボードにログインして、[Explore Services] のメニューから、[Set up] を選択します。

unity-gaming-services

[Join now] のボタンがあるので、クリックしましょう。

unity-gaming-services

Unity のバージョンは 2020.3 より後にしてね、などいろいろ書いてある画面になります。

利用規約に同意して、[Join now]を選択します。

unity-gaming-services

[Continue Setup] を選択すると、SDK ダウンロードの画面に自動で遷移します。

unity-gaming-services

SDK のセットアップ

[Project]->[SDK Download] にある [Create Code Snipet] を押しましょう。

今回必要なのは Authentication と Cloud Save なので、他のものは必要ありませんが全選択としておきました。

unity-gaming-services

すると、スニペットをコピーする画面が出てきます。

unity-gaming-services

書いてある内容は以下のとおりです。

  • 内容をコピーしてね
  • Packages/manifest.json の dependencies の中にペーストしてね
  • 最後にカンマを付けるといいかもね

manifest.json は Unity Editor 上には表示されなかったので、エクスプローラーから見つけて修正しました。

unity-gaming-services

以下のように、dependencies の中にペーストして保存してください。

{
  "dependencies": {
    -- ここに元々いろいろと書いてあるが省略 --

    "com.unity.multiplayer.tools": "1.0.0-pre.2",
    "com.unity.netcode.adapter.utp": "1.0.0-pre.2",
    "com.unity.remote-config": "3.0.0-pre.3",
    "com.unity.services.analytics": "2.0.7-pre.7",
    "com.unity.services.authentication": "1.0.0-pre.4",
    "com.unity.services.ccd.management": "1.0.0-pre.2",
    "com.unity.services.cloudcode": "1.0.0-pre.6",
    "com.unity.services.cloudsave": "1.0.0-pre.3",
    "com.unity.services.economy": "1.0.0-pre.6",
    "com.unity.services.lobby": "1.0.0-pre.6",
    "com.unity.services.relay": "1.0.1-pre.3"
  }
}

これで環境の準備は完了です。

匿名ログインと Cloud Save の実装

実際にプログラムを書いていきます。

今回は、USGManager.cs というファイルを作成しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Services.Core;
using Unity.Services.Authentication;
using Unity.Services.CloudSave;
using System.Threading.Tasks;

public class UGSManager : MonoBehaviour
{
    async void Start()
    {
        // 初期化
        await UnityServices.InitializeAsync();
        Debug.Log(UnityServices.State);

        // イベントの紐付け
        SetupEvents();

        // 匿名ログイン
        await SignInAnonymouslyAsync();

        // Cloud Save
        await SaveSomeData();
    }

    void SetupEvents()
    {
        // サインイン成功イベント
        AuthenticationService.Instance.SignedIn += () =>
        {
            Debug.Log($"PlayerID: {AuthenticationService.Instance.PlayerId}");
            Debug.Log($"Access Token: {AuthenticationService.Instance.AccessToken}");
        };

        // サインイン失敗イベント
        AuthenticationService.Instance.SignInFailed += (err) =>
        {
            Debug.LogError(err);
        };

        // サインアウトイベント
        AuthenticationService.Instance.SignedOut += () =>
        {
            Debug.Log("Player signed out.");
        };
    }

    async Task SignInAnonymouslyAsync()
    {
        try
        {
            await AuthenticationService.Instance.SignInAnonymouslyAsync();
            Debug.Log("Sign in anonymously succeeded!");
        }
        catch (AuthenticationException ex)
        {
            // Compare error code to AuthenticationErrorCodes
            // Notify the player with the proper error message
            Debug.LogException(ex);
        }
        catch (RequestFailedException ex)
        {
            // Compare error code to CommonErrorCodes
            // Notify the player with the proper error message
            Debug.LogException(ex);
        }
    }

    public async Task SaveSomeData()
    {
        var data = new Dictionary<string, object> { { "key", "someValue" } };
        await SaveData.ForceSaveAsync(data);
    }
    public async Task LoadSomeData()
    {
        Dictionary<string, string> savedData = await SaveData.LoadAsync(new HashSet<string> { "key" });

        Debug.Log("Done: " + savedData["key"]);
    }
    public async Task DeleteSomeData()
    {
        await SaveData.ForceDeleteAsync("key");
    }

}

 

はじめに初期化のお作法があり、そのあとにログインします。

ログインに成功したか失敗したかは、イベントの紐付けをしておけば拾うことができます。

ログイン後は、プレイヤーに紐づくデータをクラウド上に保存するようにしてみました。

実行して、以下のログが出れば OK です。

unity-gaming-services

ダッシュボードからの結果確認

Unity ダッシュボードから処理した結果を確認してみましょう。

匿名ログインしたプレイヤーの一覧を見るメニューは見当たりませんでしたので、Cloud Save の内容を見ていきます。

[LiveOps]->[Cloud Save]->[About & Support] より、Enable のボタンから有効化します。

unity-gaming-services

すると Find Player のメニューが使えるようになりますので、先ほど実行ログに出た ID で検索すれば、保存されたデータの確認ができます。

unity-gaming-services

触ってみた感じだとダッシュボード上では参照のみで、更新するにはプログラムからする必要があるみたいです。

Unity Gaming Services のメリット・デメリット

実際に Unity Gaming Services を使ってみて感じた、メリットとデメリットを記載しておきます。

Unity Gaming Services のメリット・デメリット

メリット

  •  Unity Technologies が公式で出しているので安心感がある
  • ドキュメントがわかりやすいので、実装しやすい
  • 他のサービスと連携が最低限になり、管理が楽になる

デメリット

  • 発展途上であり、機能が不十分
  • 管理画面が日本語化されていない

やはり Unity Technologies が公式で出していて、他サービスの連携が最低限になることがメリットだと感じました。

一方で新しいサービスのため、バックエンド開発を楽にする機能としては必要最低限です。

ランキング機能もありませんし、管理画面で Cloud Save で作成したデータの更新もできません。

また、一度でもログインしたことのあるプレイヤーの一覧を参照する機能もないようです。

デメリットの部分は今後改善を期待しましょう。

最後に

Unity Gaming Services の概要と、匿名ログインと Cloud Save を試してみた結果について紹介してきました。

管理画面の UI はオシャレでいい感じですが、もう少し機能が充実していて欲しいなというのが正直な感想です。

Microsoft が提供している PlayFab は、Unity Gaming Services の機能に加えてランキング機能など、機能も豊富にあります。

ぜひ PlayFab も使ってみて、機能を比較してみてください。

PlayFab の書籍も好評発売中!
playfab-book

PlayFab のことをもっと皆さんに知ってもらいたくて、合計500ページ以上にもなる書籍を5冊に分けて執筆しました。

私の知識をすべて詰め込んでいるので、ゲーム開発をさらに加速させたい方はぜひご覧ください。

COMMENT

メールアドレスが公開されることはありません。