はじめに
2025 Life is Tech Advent Calendar Day19記事を担当させていただきます。Unityメンターの「ゆうゆ」です!
ゲームで進行中の内部通貨的なものやplayerNameなどをクラウド上で管理、保存したいと思ったことはありませんか?
今回UnityGameingServiceのCloudSaveの導入と、使ってみて簡易的なクラウド保存をしてみたいと思います!
UIなどがバージョンによって異なることがあります!
Unity GameingServiceとは?
UnityGameingService(通称UGS)はゲームの開発からリリース後の運用まで、様々なことを一つにまとめたサービスのことです!
例えばソシャゲなどであるユーザー認証やデータ保存など、またオンラインでのマッチング機能など様々なものができます。しかしもちろん無料で全ての機能が使えるわけではありません!有料な部分があったり従量課金制だったりします!
導入方法
UnityCloudに接続
まずはUnityのprojectを作成しましょう!その際に「Connect to Unity Cloud」にチェックを入れましょう。そうすることでUnityCloudにログインしてUGSのサービスを使用することができます。

Cloud用のプロジェクトになっているか確認
UnityHubの画面で下の画像のようにproject名の横のアイコンが雲のアイコンのようになっていればOK!
もしなっていなければ、そのアイコンの部分を押して「Connect project to unitycloud」というのがあるので押せばOK!

次にUnityCloudにログインしましょう!
UnityCloudのプロジェクトのところに先ほど作成したプロジェクトがあるかどうか確認しましょう。
ショートカットの部分からCloudSaveを追加しましょう。

もしもUnityCloudのプロジェクトに作ったプロジェクトが無かったら、UnityProjectを作ったUnityアカウントと同じアカウントでログインしているか確認しましょう!
CloudSaveのセットアップ
初めて開くプロジェクトでを見るとSetUpGuidが表示されます。(親切ですね)
指示通りにSetUpしていきましょう。やることは2つです。
・IDの確認
・PackgeMangerからCloudSaveをimport
IDの確認はUnityCloud側でprojectの部分で自分の作成したプロジェクトをクリックするとIDが確認できます。Unity側ではProhjectSettingのServiceの部分で確認することができます。ここの二つが同じであれば大丈夫です!

これで一旦準備完了!
まずは匿名ログインできるように
まず初めに色々usingで書いてその後に以下の二つを書けばログインできちゃいます!
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
例:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Unity.Services.Authentication;
using Unity.Services.CloudSave;
using Unity.Services.Core;
using UnityEngine;
public class CloudSaveSimple : MonoBehaviour
{
async void Start()
{
await InitAndLoginAsync();
}
public static async Task InitAndLoginAsync()
{
try
{
await UnityServices.InitializeAsync();
if (!AuthenticationService.Instance.IsSignedIn)
{
await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
}
catch (Exception e)
{
Debug.LogException(e);
}
}
}
データを保存してみよう!
データの保存も簡単です。保存するデータの名前(key)とその名前に入れるデータを入力するだけ!
var data = new Dictionary<string, object>{{ "keyName", "name" }}
await CloudSaveService.Instance.Data.Player.SaveAsync(data);
例:playerのレベルと持っているコインの枚数を保存
public static async Task SaveExampleAsync(int level, int coins)
{
var data = new Dictionary<string, object>
{
{ "level", level },
{ "coins", coins }
};
await CloudSaveService.Instance.Data.Player.SaveAsync(data);
}
データをロードしてみよう!
データのロードも簡単です。
var playerData = await CloudSaveService.Instance.Data.Player.LoadAsync(new HashSet<string>{"keyName"});
if (playerData.TryGetValue("keyName", out var keyName))
{
Debug.Log($"keyName: {keyName.Value.GetAs<string>()}");
}
例:先ほど保存したものをロードしてみましょう
public static async Task LoadExampleAsync()
{
var keys = new HashSet<string> { "level", "coins" };
var playerData = await CloudSaveService.Instance.Data.Player.LoadAsync(keys);
if (playerData.TryGetValue("level", out var levelItem))
Debug.Log($"level={levelItem.Value.GetAs<int>()}");
if (playerData.TryGetValue("coins", out var coinsItem))
Debug.Log($"coins={coinsItem.Value.GetAs<int>()}");
}
以上!これでデータをCloudSave側に保存したデータをUnity側で確認することができました!
UnityCloudでのセーブデータの確認
ちゃんとデータがクラウド保存されているか確認してみましょう。まずはUnityCloudから自分のプロジェクト選択してショートカットから「Cloud Save」の「プレイヤーデータ」を見てみましょう。

そうするとなんかぐちゃぐちゃ書いてあるPlayerIDがあると思うのでそこをクリック!
すると以下のように保存されているのが確認できると思います。

(これは以前自分が「Capsule」「Cylinder」「Sphere」というkeyの名前でそれぞれのオブジェクトの座標を保存してみたいものです)
最後に
ここまで記事を読んでいただきありがとうございます。CloudSaveではUnityでCloud上に簡単にデータを保存し管理しておく事ができます。今回紹介させていただいたのはほんの一部で、まだまだ色々な事ができるようです。(まだ自分もためせてない...)また、CloudSaveに限らずUGSやUnityCloudでは様々な事ができるようです。
これらを使いこなせたら一気にゲーム実装の幅が広がり、新しいアイデアも生まれるかも!なんならゲーム開発以外にも使えるかも?!
ぜひ皆さんも一緒に使ってみてUnityでの開発を楽しんでいきましょう!😊