消息
通信中的消息是二进制数据 数据包,使用以下方式序列化 协议缓冲区。它们承载文本和语音聊天、位置更新、个人资料变更以及其他实时交互。
所有消息定义都可在 协议仓库中找到,并且下面的每种消息类型都有其声明链接。
数据包 ↗ 源码
该 数据包 结构是所有消息的容器。
message
枚举
以下之一: 聊天, 语音, 位置, 公告个人资料版本,
个人资料请求, 个人资料响应,或 场景.
文本和语音聊天
客户端通过向所有已连接的同伴(通常是同一岛屿中的玩家)广播文本消息和音频片段来聊天。
只涉及两种 数据包 类型:每种用例各一种。在典型情况下,客户端会将这些消息广播给其岛屿中的其他所有客户端,也就是它们可以交互的附近玩家群组。
聊天 ↗ 源码
向其他客户端发送文本聊天消息。
message
字符串
消息文本
时间戳
双精度浮点数
发送者的 UTC 时间戳
语音 ↗ 源码
向其他客户端发送已编码的语音样本。
encoded_samples
字节
已编码音频数据
codec
枚举
仅 VC_OPUS (目前不支持其他编解码器)
index
无符号32位整数
由发送者设置的递增计数器
该 codec 字段是一个 枚举 值。不支持自定义编解码器。
移动
控制头像的客户端会在其岛屿内发送和接收位置更新,以同步玩家之间的移动和姿态。
位置 ↗ 源码
向其他客户端更新头像的位置和朝向。
position_x
position_y
position_z
浮点数
世界地图中的头像位置
rotation_x
rotation_y
rotation_z
rotation_w
浮点数
头像旋转四元数
index
无符号32位整数
由发送者设置的递增计数器
客户端通常会发送 位置 低频率更新(例如每 1 或 2 秒一次),并在移动或交互时切换到高频率(每秒数次)。
建议使用低频广播作为一种简单方案,把更新传递给那些暂时失去连接,或在加入岛屿时未能接收到消息的客户端。
该 index 字段是一个递增计数器,由发送者设置,以便接收者对乱序到达的更新进行排序。
资料共享
岛屿内的客户端可以请求其他玩家的头像信息,以便渲染他们的头像、显示他们的名字和图片等。
由于资料变更很少见(例如与位置更新相比),因此该系统旨在简化本地资料缓存的维护任务,并且只在需要时获取资料。
有 3 数据包 种相关类型:一个 个人资料请求/个人资料响应 由客户端按需共享资料的一对,以及 公告个人资料版本 用于告诉同伴最新版本是什么的消息,这样他们就可以决定是否请求它。
客户端通常会定期广播 公告个人资料版本 消息,并在资料变更时立即广播。
Unexpected error with integration mermaid: Integration is not installed on this space
公告个人资料版本 ↗ 源码
向其他客户端发出信号,表明有一个 资料实体 可供请求。
profile_version
无符号32位整数
每次修改都会递增的版本号。
缓存资料的接收者可以使用该 profile_version 编号来判断其本地副本是否是最新的,或者是否需要发送一个 个人资料请求.
个人资料请求 ↗ 源码
从指定的对等方请求特定版本的资料。
address
字符串
资料的标识地址。
profile_version
无符号32位整数
所需的资料版本。
接收者可以回复 个人资料响应 消息来提供所请求的资料。
个人资料响应 ↗ 源码
作为对以下内容的响应发送资料: 个人资料请求.
serialized_profile
字符串
以 JSON 序列化的资料实体。
base_url
无符号32位整数
文件系统端点的基础 URL,由发送者建议。
该 serialized_profile 字段包含一个 资料实体.
如果发送者希望推荐一个内容服务器,用于下载其资料中引用的实体(例如可穿戴物品),则可以将 base_url 字段设为提示。客户端可以自由使用或忽略此 URL。
最后更新于