游戏创意与功能

你的下一项功能

共享对象

通过显式访问策略、索引查询和原始修订版本,共享不解析内容的游戏数据。

SDK:develop 分支需要玩家会话
Unity
共享对象功能示意图
可见的结果

创建前先读取所有者用量。创建使用该用量的修订版本;更新和删除使用对象的原始修订版本。所有者、组以及创建时设定的过期时间保持不变。

视频稍后提供

此步骤尚无视频。指南和MCP请求已可使用。

共享对象

准备同一个项目

  1. 在仪表盘中选择与游戏配置相同的项目。

    共享对象 →
  2. 在控制台表单中创建或复用这些测试条目。这些是示例值,并非项目当前数据。

    键名
    bases
    读取策略
    all
    写入策略
    owner
    网格位置
    true
    每个对象的最大字节数
    1024
    每个所有者的最大对象数
    1

    键会一直保留。首次使用后,策略、搜索架构、TTL 和位置均不可更改。归档会阻止新的写入,但仍可读取和删除。

    首个示例只读取数据,不创建群组、对局或对象。空列表也是有效的首次响应。

  3. 运行示例前先保存、重新加载并核对条目。保留其他定义。

实现此功能

你可以预览指南。运行需要有效的项目密钥。 准备项目

已安装 SDK、导入项目配置,且玩家已登录。

此 SDK 示例使用 develop。请检查已安装的 SDK 是否具备所需 API。

先通过快速入门连接目标玩家,再通过明确的按钮或场景操作调用ReadWorldMap()。仅打开文件不会发送请求。

C#
Assets/Scripts/SharedObjectsDemo.cs
horizOn 调用
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3using PM.horizOn.Cloud.Objects.Network.Responses;
4​
5public sealed class SharedObjectsDemo : MonoBehaviour
6{
7 // Initialize/connect and restore the existing player in the Quickstart first.
8 // Wire an explicit player action; do not add this read to a startup/poll loop.
9 public async void ReadWorldMap()
10 {
11 var user = UserManager.Instance.CurrentUser;
12 if (user == null || !user.IsValid()) return;
13 var result = await SharedObjectsManager.Instance.QueryObjects(user.UserId, "bases", new SharedQuery {
14 mode = SharedQueryMode.Rectangle,
15 minX = -10, maxX = 10, minY = -10, maxY = 10, limit = 20
16 });
17 if (!result.IsSuccess) {
18 Debug.LogWarning(result.ErrorCode);
19 return;
20 }
21 foreach (var item in result.Data.objects) {
22 byte[] bytes = item.data; // Opaque game bytes; validate your game's own format.
23 Debug.Log($"Object {item.id}: {bytes.Length} bytes");
24 }
25 // Respect result.Data.pollAfterSeconds; no automatic poll or next-page loop.
26 // Keep exact dataBase64 and typed search metadata unchanged on metadata edits.
27 // Persist original target, bytes and If-Match revision before a single mutation.
28 // Unknown CREATE: explicit GetRecoveryUsage/QueryRecoveryObjects; never resend.
29 // Generic/defense/ranked VA starts share one start/submit lease; do not replace a pending run.
30 // Trusted validation and durable ordinary Inbox delivery belong to the game backend.
31 }
32}
打开完整SDK示例 ↗

世界地图

将所有者的基地存为不解析内容的字节数据。显式查询已配置的整数坐标网格矩形;使用对象的原始修订版本进行更新。位置仅作为查询索引,不验证游戏规则。

异步 PvP

通过有界、非均匀的整数查询选择对手。加载对手的防御字节数据,并使用服务器管理的 Validated Actions 运行验证对局。只有可信后端才能决定结果,并发送不可更改的 Inbox 通知。

使用对应的玩家会话、持久保存的原始写入意图,以及显式且有界的读取。可信的结果验证和 Inbox 投递应由游戏后端处理;Account Keys 绝不能包含在游戏构建中。

测试你的新功能。

创建前先读取所有者用量。创建使用该用量的修订版本;更新和删除使用对象的原始修订版本。所有者、组以及创建时设定的过期时间保持不变。

在仪表盘中选择与游戏配置相同的项目。

接口
  • GET/shared-objects/collections
  • GET/shared-objects/{collection}/usage
  • GET/shared-objects/{collection}/objects/{objectId}
  • POST/shared-objects/{collection}/query
  • POST/shared-objects/{collection}/objects
  • PUT/shared-objects/{collection}/objects/{objectId}
  • DELETE/shared-objects/{collection}/objects/{objectId}
API 参考中的全部接口
下一步建议

为每一局添加最高分。

每局结束后保存分数并展示领先者。继续使用现有连接和玩家会话。