通过 Unity 使用 Cloud Save
本文档包含 Cloud Save SDK 3.0 示例
典型工作流程
您可以从 Unity 中的常规 C# 脚本调用 Cloud Save SDK。要了解有关 Unity 中脚本编写的详细信息,请参阅创建和使用脚本。
- 在 Unity 中创建 C# MonoBehaviour 脚本。查看创建和使用脚本。
- 在脚本中,配置 Unity Authentication 服务。
- 在脚本中,添加对 Cloud Save SDK 的调用。
- 将新制作的脚本附加到游戏对象。请查看创建和使用脚本。
- 选择 **Play(播放)**以运行项目,体验 Cloud Save 的运行效果。
在 MonoBehaviour 脚本中包含以下命名空间,使用 Cloud Save 客户端。
using Unity.Services.CloudSave;
包含的 CloudSaveSample
脚本演示了授权、服务初始化、Cloud Save 客户端的使用以及重要的 async
概念。您可以通过选择 Package Manager(包管理器) > Cloud Save > Samples(示例),在 Unity 中查看示例。
对 Cloud Save 服务的速率限制为每个玩家每分钟 600 个请求。
保存项
使用 API 客户端 SaveAsync
方法保存项。
public async void SaveSomeData()
{
var data = new Dictionary<string, object>{{"key", "someValue"}};
await CloudSaveService.Instance.Data.Player.SaveAsync(data);
}
获取项
您可以使用 API 客户端 LoadAsync
方法通过一组可选键获取多个项。
public async void LoadSomeData()
{
Task<Dictionary<string, Item>> savedData = await CloudSaveService.Instance.Data.Player.LoadAsync(new HashSet<string>{"key"});
Debug.Log("Done: " + savedData["key"]);
}
删除项
使用 API 客户端 DeleteAsync
方法删除项。
public async void DeleteSomeData()
{
await CloudSaveService.Instance.Data.Player.DeleteAsync("key");
}
获取键和元数据的列表
使用 API 客户端 ListAllKeysAsync
方法获取玩家的键列表。
public async void RetrieveKeys()
{
Task<List<ItemKey>> keys = await CloudSaveService.Instance.Data.Player.ListAllKeysAsync();
for (int i = 0; i < keys.Count; i++)
{
Debug.Log(keys[i]);
}
}
您可以使用 Unity Dashboard(Unity 后台)查看单个玩家的数据。
以字节数组形式获取玩家文件
使用 API 客户端 LoadBytesAsync
方法以字节数组形式获取玩家文件。
public async void GetPlayerFileAsByteArray()
{
byte[] file = await CloudSaveService.Instance.Files.Player.LoadBytesAsync("fileName.csv");
}
以流形式获取玩家文件
使用 API 客户端 LoadStreamAsync
方法以流形式获取玩家文件。
public async void GetPlayerFileAsStream()
{
Stream file = await CloudSaveService.Instance.Files.Player.LoadStreamAsync("fileName.csv");
}
获取玩家文件元数据
使用 API 客户端 GetMetadataAsync
方法检索单个玩家文件的元数据(大小、最后修改和创建日期、密钥、内容类型和当前 WriteLock)。
public async void GetPlayerFileMetadata()
{
var metadata = await CloudSaveService.Instance.Files.Player.GetMetadataAsync("fileName.csv");
Debug.Log(metadata.Key);
Debug.Log(metadata.Size);
Debug.Log(metadata.ContentType);
Debug.Log(metadata.Created);
Debug.Log(metadata.LastModified);
Debug.Log(metadata.WriteLock);
}
保存玩家文件
使用 API 客户端 SaveAsync
方法保存玩家文件。
public async void SavePlayerFile()
{
byte[] file = System.IO.File.ReadAllBytes("fileName.csv");
await CloudSaveService.Instance.Files.Player.SaveAsync("key", file);
}
删除玩家文件
使用 API 客户端 DeleteAsync
方法删除玩家文件。
public async void DeletePlayerFile()
{
await CloudSaveService.Instance.Files.Player.DeleteAsync("key");
}
列示玩家文件
使用 API 客户端 ListAllAsync
方法获取玩家的所有文件名称列表。
public async void ListPlayerFiles()
{
List<string> files = await CloudSaveService.Instance.Files.Player.ListAllAsync();
for (int i = 0; i < files.Count; i++)
{
Debug.Log(files[i]);
}
}
您可以使用 Unity Dashboard(Unity 后台)访问单个玩家的文件,这类文件位于 LiveOps 部分的 Cloud Save 模块的玩家细节中。
错误处理
使用 API 错误响应返回的错误代码或类型作为错误处理逻辑。避免使用错误消息,因为它们将来可能会发生变化。
端到端初始化和身份验证流程
以下示例演示了如何使用 Authentication 包启动匿名身份验证、记录玩家 ID、初始化 Cloud Save 以及获取玩家的所有密钥和已保存文件的名称。
using Unity.Services.Authentication;
using System.Threading.Tasks;
using System.Collections.Generic;
using Unity.Services.Core;
using Unity.Services.CloudSave;
using UnityEngine;
public class AuthenticationExample : MonoBehaviour
{
private List<string> keys;
private List<string> files;
internal async Task Awake()
{
await UnityServices.InitializeAsync();
await SignInAnonymously();
keys = await CloudSaveService.Instance.Data.Player.ListAllKeysAsync();
files = await CloudSaveService.Instance.Files.Player.ListAllAsync();
}
private async Task SignInAnonymously()
{
AuthenticationService.Instance.SignedIn += () =>
{
var playerId = AuthenticationService.Instance.PlayerId;
Debug.Log("Signed in as: " + playerId);
};
AuthenticationService.Instance.SignInFailed += s =>
{
// Take some action here...
Debug.Log(s);
};
await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
}