资产管理 #
以下示例演示了将Nakama用作资产管理系统,以便为客户端提供对安全云托管(Amazon S3)资产的临时访问权限。 这在许多情况下都非常有益。例如,您可以选择将游戏资产托管到私人AmazonS3存储桶中,然后允许客户端在运行时安全地下载这些资产。
使用资产管理系统有许多优势,例如:
- 资产可保持私密状态,按需提供,且有时间限制
- 可为客户端提供不同资产(例如beta访问资产)
- 减少为进行某些事项(如列出资产)而与您的云存储提供商之间的往返行程
- 允许用户生成的内容和资产验证
该系统包括3个主要部分:
- 资产清单,使用Nakama存储引擎进行分类和存储
- 资产上传RPC,负责获取二进制数据并将其上传到云,以及存储相应的资产清单
- 资产下载RPC,为请求的资产生成一个预签名的临时下载URL
该系统与客户端无关,但在本指南的最后,您将了解如何使用它来实现安全的资产交付系统,从而直接从私人S3存储桶提供对Unity可寻址资产的运行时访问。
资产清单 #
使用Nakama存储引擎,您可以存储包含已上传特定资产信息的资产清单,包括:
- 名称
- 类别
- 所有者
- md5 checksum
- 创建的时间戳
在Nakama中存储资产清单允许客户端检索单个记录或检索记录列表(例如按类别),而无需多次往返云存储提供商,因为这可能会产生成本。
您可以使用标准结构定义资产清单和其他相关消息,也可以使用特定的消息格式,如协议缓冲区,如下所示:
|
|
启动引导服务器运行时 #
在实现资产上传/下载RPC之前,您需要初始化协议缓冲区编排和S3服务对象以及上传工具。
您可以通过local.yml
配置文件下的runtime.env
章节将环境变量传递给Nakama。查看配置文档了解更多信息。
|
|
资产上传RPC #
定义资产清单后,您可以实现一个RPC函数,该函数将接收编码为base64字符串的二进制数据,创建并存储资产清单,并将二进制文件上传到私人Amazon S3存储桶中。
|
|
然后您必须在InitModule
函数中注册此RPC。
|
|
资产下载RPC #
资产下载RPC将检查所请求文件的现有资产清单,找到清单后,将与Amazon S3对话并生成资产的预签名临时下载URL,然后将其传递回客户端。
|
|
之后,必须在InitModule
函数中注册此RPC。
|
|
按类别资产下载RPC #
只需提供您希望下载的资产类别,就可以获得资产下载URL列表。下面我们创建一个新的RPC来生成指定类别资产的预签名下载URL列表。
|
|
然后您必须在InitModule
函数中注册此RPC。
|
|
示例:将资产管理系统与Unity可寻址集成 #
上述资产管理系统可以与远程资产交付管道(如Unity的可寻址功能)集成。 您可以使用Unity可寻址来打包资产,将其远程托管,然后在运行时加载这些资产。
Unity可寻址与Amazon S3、Google文件云存储或Digital Ocean对象存储等公共云存储开箱即用。遗憾的是,它不支持私人云存储开箱即用。但是,只需几个简单的步骤就可以集成我们的Nakama资产管理系统。
首先,需要将您的可寻址资产配置设置为从远程路径构建和加载,如下所示。确保您还勾选了构建远程目录选项。
您可以从可寻址资料窗口为您的可寻址资产配置精确的远程加载路径。但是,您可以在此处输入您喜欢的任何地址,这个地址应该以http(s)
开头,因为它将在运行时被您稍后添加的代码替换掉。
配置可寻址系统后,通过单击可寻址群组窗口中的创建按钮来构建可寻址资产包。如果您首次构建您的资产,选择新建,否则选择更新先前构建(这可以确保使用相同的目录文件,从而允许客户端下载最新的资产,而无需更新客户端)。然后,您可以使用本指南前面提到的asset_upload
RPC将这些资产上传到您的Nakama服务器。您可以决定如何完成这一操作,建议您编写一个编辑器脚本,可以通过执行该脚本来上传资产。相关示例如下所示。
|
|
要想开始使用Unity实施Nakama资产管理系统,请将以下类别定义添加到您的项目中。
|
|
然后,创建一个名为AddressablesManager
的脚本,开始时,检索相关的(当前平台的)Unity资产目录(hash/json)以及来自Nakama的资产包。
|
|
接下来,采用Start
方法为可寻址系统的ResourceManager.InternalIdTransformFunc
分配一个新的变换函数,该方法将获取内部资产ID并将其转换为我们预签名的资产下载URL。
|
|
最后,像往常一样将您的可寻址资产实例化。
|
|
现在,您应该能够构建和运行您的应用程序,并查看加载的私有托管可寻址资产。