Cloud Variables (云变量)
概述
云变量(Cloud Variables)是跨越不同世界持久存在的变量。它们的工作性质类似于 动态变量 (Dynamic Variables),但它们不依赖于父子关系或世界层级结构,而是依赖于路径和用户/组的所有权。你可以将它们想象为你最喜欢的游戏的设置或配置文件。不过,云变量比这更生动,因为它们可以在不同的会话、世界甚至你的 Resonite 仪表盘之间同步。
关于云变量的快速入门指南,请参阅此教程:如何使用云变量。
云变量由两部分组成:
- 定义 (Definitions) - 设置和配置:所有者、名称、类型、权限和默认值。
- 值 (Values) - 每个用户的实际数值。
云变量定义
一个云变量定义由 4 部分组成:
- 路径/名称。例如
AwesomeGadget.Version或PartyWorld.highQualityLights。 - 数据类型。
- 权限。
- 默认值。
- 默认值必须是 To String (ProtoFlux Node) 节点的输出结果,且去除空格。例如 ColorX,通过 To String 转换后的结果为:
[1;1.23;0;1;sRGB]。DateTime 值 "1/1/2000 00:00:00" 也是可以接受的。
- 默认值必须是 To String (ProtoFlux Node) 节点的输出结果,且去除空格。例如 ColorX,通过 To String 转换后的结果为:
定义也可以注册在某个用户或 组 (Group) 下。将定义注册在组下有一些好处,例如:
默认值
当 创建定义 时,你需要通过一系列命令提供数据和配置。万一你忘记或省略了某个命令,以下是定义的各种属性的默认值:
- 读写权限默认为 variable_owner。
- 列表权限默认为 definition_owner。
- 如果未指定默认值,Resonite 将返回该数据类型的默认值(按照 C# 定义)。
云变量值
每个云变量定义可以有多个值,每个值都绑定到一个独立的 Resonite 用户或组。一个“值”只包含其数值本身,没有关于定义的细节。你可以把它想象成一个有两列的表格:所有者 ID 和值。
例如,如果创建了一个数据类型为字符串、名称为“Favorite Fruit”(最喜欢的水果)的云变量定义,那么它的值可能如下所示:
| 变量所有者 ID | 值 |
|---|---|
| U-Frooxius | Strawberry |
| U-Nexulan | Orange |
| U-Shifty | Pineapple |
| U-ProbablePrime | Blueberry |
| G-MyGroup | Banana |
最后一行显示了特定于组的值。这只有属于组的云变量才可能实现。
带有空格的变量所有者 ID(用户 ID 或组 ID)需要用连字符书写。例如:组 "My Group" 变为 "G-My-Group"。请务必仔细检查你的用户 ID 和组 ID,它们可能与用户/组的显示名称完全不同。
使用云变量
在使用云变量之前,必须先创建并注册它们。这是通过向 Resonite Bot 发送各种类型的 命令 来完成的。这些命令会在 Resonite 中创建并注册一个 云变量定义。注册后,就可以使用 ProtoFlux 和 组件 根据该定义读取、写入和操作云变量的值。
使用注意事项 / 警告
- 变量定义会被大量缓存,通常需要几分钟才能更新。建议提前完整设置好它们。
- 读取和写入会被缓冲、批处理和缓存,需要一点时间来传播。
- 目前云变量系统的一个限制是,除非在同一主机/用户上运行,否则它们不会在不同的会话之间实时同步。如果你在一个无头客户端(或你自己的电脑)上托管多个世界/会话,对云变量的更改将在这些会话内实时同步。
- 如果不同的用户托管同一个世界,一个世界中的更改不会立即反映在另一个世界中,需要几分钟才能刷新。目前的计划是通过将 SignalR 集成到 Resonite 云基础设施中来添加针对此类情况的完全实时同步,这也将有助于云更好地扩展其他功能,如活动会话或消息系统。
- 当前的限制、权限和其他方面可能会发生变化。
- 可以更改数据类型,但已存储的值不受影响。
限额
云变量不占用任何存储空间,但它们有限额。
定义限额
| 限制类型 | 限额 |
|---|---|
| 用户 (Users) | 256 |
| 组 (Groups) | 8192 |
这些限制仅适用于创建的 变量定义,不适用于存储在其中的 值。例如,变量定义 "U-ProbablePrime.FavoriteColor" 仍然可以为每个用户的最爱颜色拥有无限数量的值。
速率限制
从云变量读取/写入时,适用以下限制:
ProtoFlux
使用 ProtoFlux 时,由于读取或写入是由脉冲触发的,读/写操作会在节点接收到脉冲时立即发生。
因此,读/写过程每分钟最多可执行 30 次。
当使用 ProtoFlux 读取或写入数据到变量时,为已定义变量设置的限制同样存在于 ProtoFlux 节点中。如果节点存在于你的本地空间,那么节点可以读/写那些只允许在安全上下文中读/写的变量。
组件
云变量组件按计划运行,定期双向刷新值。这些值的更新速度目前不快,但随着我们要对 SignalR 使用的进一步增强(需要引用),这些值将更新得更及时。
目前:
- 读取每 5 分钟发生一次。
- 写入将被延迟(缓冲)并每 30 秒发送一次。
- 如果组件上的值变化频率高于此频率,则发送写入时最新设置的值将被发送到云端。
更新频率
请阅读上面的 限额 章节。
支持的数据类型
创建云变量定义时,需要指定有效的类型。支持的数据类型如下所列,但通常支持任何原始数据类型。不支持引用数据类型(Reference data types),因为引用仅在一个定义的世界/会话中有效。
| bool | bool2 | bool3 | bool4 | |||
|---|---|---|---|---|---|---|
| float | float2 | float3 | float4 | float2x2 | float3x3 | float4x4 |
| int | int2 | int3 | int4 | |||
| long | long2 | long3 | long4 | |||
| double | double2 | double3 | double4 | double2x2 | double3x3 | double4x4 |
| uint | uint2 | uint3 | uint4 | |||
| ulong | ulong2 | ulong3 | ulong4 | |||
| short | ushort | |||||
| byte | sbyte | |||||
| floatq | ||||||
| doubleq | ||||||
| color | ||||||
| datetime | ||||||
| timespan | ||||||
| decimal | ||||||
| enum | * | |||||
| string | * |
- Enum (枚举):
- String (字符串):
- 设置数据类型时,你可以指定字符串的最大长度。
- 格式为
string:<max_length>。 - 默认情况下,字符串长度为 256 个字符。最大长度为 8192。
- 用户和组变量都受这些限制影响。
未来可能会支持更多数据类型。
权限
云变量权限由两部分组成:
- 操作权限 (Action permission) - 权限组可以执行的操作类型。
- 组/类型权限 (Group/type permission) - 用户组或用户分类。
在读取和决定权限集时,请记住,在大多数情况下,每个用户都有自己的云变量值。
例如在以下命令中:/setUserVarPerms test.color read,write,list anyone。操作是“read, write 和 list”,权限类型/组是“anyone”。
操作权限
| 操作权限 | 描述 |
|---|---|
read |
授予读取云变量值的各能力。 |
write |
授予写入云变量值的能力。 |
list |
授予列出所有值或变量的能力。 |
all |
一次性授予上述所有权限。 |
你也可以一次指定多个权限,用逗号分隔。例如 /setUserVarPerms test.color read,write,list variable_owner 将会把 test.color 变量的读取、写入和列表权限设置为 variable_owner。
组/类型权限
通用定义权限
这些权限可用于用户和组拥有的定义。
| 权限类型 | 描述 | 位置 | 限制 |
|---|---|---|---|
anyone |
任何人都可以读取/写入此变量的值。推荐用于读取公共变量,但不推荐用于写入,因为任何人都可以更改任何人的值。 | 任何地方。 | 不能与用户拥有的定义上的 write 权限一起使用。 |
definition_owner_only |
只有定义变量的用户/组可以读取/写入他们自己的单个值。适用于公告/版本控制系统。 | 仅限用户空间/安全上下文。 | 不能用于 list 权限。 |
definition_owner_only_unsafe |
只有定义变量的用户/组可以读取/写入他们自己的单个值。适用于公告/版本控制系统。 | 任何地方。 | 不能用于 list 权限。 |
variable_owner |
只有拥有变量值的用户才能写入/读取他们自己的值。在这种情况下,定义所有者无法读取/写入其他人的值。 | 仅限用户空间/安全上下文。 | 不能用于 list 权限。 |
variable_owner_unsafe |
只有拥有变量值的用户才能写入/读取他们自己的值。在这种情况下,定义所有者无法读取/写入其他人的值。 | 任何地方。 | 不能用于 list 权限。 |
用户定义权限
这些权限只能用于用户拥有的定义。
| 权限类型 | 描述 | 位置 | 限制 |
|---|---|---|---|
definition_owner_only_contacts |
(待补充) | 仅限用户空间/安全上下文。 | 不能用于 list 权限。 |
definition_owner_only_contacts_unsafe |
(待补充) | 任何地方。 | 不能用于 list 权限。 |
variable_owner_only_contacts |
(待补充) | 仅限用户空间/安全上下文。 | 不能用于 list 权限。 |
variable_owner_only_contacts_unsafe |
(待补充) | 任何地方。 | 不能用于 list 权限。 |
组定义权限
这些权限只能用于组拥有的定义。
| 权限类型 | 描述 | 位置 | 限制 |
|---|---|---|---|
definition_owner |
只有定义变量的组可以读取/写入它。 | 仅限用户空间/安全上下文。 | 无。 |
definition_owner_unsafe |
只有定义变量的组可以读取/写入它。 | 任何地方。 | 无。 |
List (列表) 权限
由于“list”权限有效的选项非常有限,列出允许 list 使用的权限更容易:
- anyone - 仅限基于组的定义。
- definition_owner
- definition_owner_unsafe
安全上下文 (Safe Contexts)
在 Resonite 中的大多数情况下,任何人都可以观察甚至操纵你在做什么。这些是非安全 (unsafe) 上下文。当在诸如用户空间(Resonite 仪表盘所在位置)等地时,没人能看到或修改你在做什么。这就是安全上下文。
权限矩阵
此表显示了哪些权限可以应用于用户和组变量的 操作权限。
| 用户读取 | 用户写入 | 用户列表 | 组读取 | 组写入 | 组列表 | |
|---|---|---|---|---|---|---|
| anyone | 是 | 否 | 是 | 是 | 是 | 是 |
| definition_owner_only(_unsafe) | 是 | 是 | 否 | 是 | 是 | 否 |
| definition_owner(_unsafe) | 是 | 否 | 是 | 是 | 是 | 是 |
| variable_owner(_unsafe) | 是 | 是 | 否 | 是 | 是 | 否 |
| definition_owner_only_contacts(_unsafe) | 是 | 是 | 否 | 否 | 否 | 否 |
| variable_owner_only_contacts(_unsafe) | 是 | 是 | 否 | 否 | 否 | 否 |
云变量命令
要创建、更新和修改云变量,你需要使用命令。这些命令可以发送给 Resonite 内的 Resonite Bot,你可以在联系人列表中找到它。
括号 () 内的命令参数是可选的。所有其他参数都是必需的。
创建定义
用户定义
/createUserVar <path>- 使用给定路径创建一个变量定义。/setUserVarType <path> <type>- 设置变量定义的 数据类型。/setUserVarDefaultValue <path> <value>- 设置定义的默认值。/setUserVarPerms <path> <action permission> <permission type>- 设置定义的 权限。
还有一个命令可以在一行中创建定义:
/createUserVar <path> <type> <default value> <read perms> <write perms> <list perms>
组定义
/createGroupVar <group> <path>- 使用给定路径创建一个变量定义。/setGroupVarType <group> <path> <type>- 设置变量定义的 数据类型。/setGroupVarDefaultValue <group> <path> <value>- 设置定义的默认值。/setGroupVarPerms <group> <path> <action permission> <permission type>- 设置定义的 权限。
还有一个命令可以在一行中创建定义:
/createGroupVar <group> <path> <type> <default value> <read perms> <write perms> <list perms>
建议
通常我们建议使用一次性创建整个定义的命令,这可以确保你不会忘记任何步骤或部分,以免导致变量不可用。
读取值
关于使用 ProtoFlux / 组件 读取值,请参阅后续章节。
用户值
/getUserVar <path>- 获取变量的定义(类型、权限、默认值)。/getUserVarValue <definition_owner> <path> <target user>- 获取某用户的定义值。- 例如:
/getUserVarValue U-ProbablePrime testing.bool U-ProbablePrime将获取 Prime 自己的 testing.bool 变量值。
- 例如:
/listUserVars (<user>)- 列出某用户(默认:你自己)的变量定义。需要list权限。
组值
/getGroupVar <group> <path>- 获取变量的定义(类型、权限、默认值)。/getGroupVarValue <group> <path> (<target user>)- 获取某用户(默认:你自己)的定义值。/listGroupVars <group>- 列出组的变量定义。需要list权限。
写入值
设置/写入值时,请确保你的权限设置正确。
关于使用 ProtoFlux / 组件 写入值,请参阅后续章节。
写入用户拥有的定义的值
/setUserVarValue (<user>) <path> (<target user>) <value> - 设置单个用户的定义值。
例如:/setUserVarValue U-ProbablePrime testing.bool U-Frooxius true 将把 ProbablePrime 定义的 testing.bool 变量中,属于 Frooxius 的值设置为 true。
写入组拥有的定义的值
/setGroupVarValue <group> <path> (<target user>) <value> - 设置单个用户的定义值。
例如:/setGroupVarValue G-Cheese testing.bool U-Frooxius true 将把 Cheese 组定义的 testing.bool 变量中,属于 Frooxius 的值设置为 true。
设置复杂值
对于复杂值,你可能不知道该输入什么。以下是一些可能有帮助的例子:
- 对于复杂 字符串 (Strings),将值用引号
"括起来。例如 "My Cool Value"。 - 对于 float3,使用
[1; 0; 1]。 - 对于 colors (颜色),使用
[1; 0; 0; 1]。
删除定义
你可以使用以下命令删除定义:
/deleteUserVar <path>用于用户变量。/deleteGroupVar <group> <path>用于组变量。(目前已损坏,见 Issue #537)
此命令会删除定义以及链接到该定义的所有值。由于需要清理定义的缓存、值和其他系统,此命令完全执行需要一段时间(约 30 分钟)。
定义示例
用户布尔值
创建一个 Boolean 类型的 User 变量,任何人都可以读取,所有者(每个用户拥有自己的副本)可以从用户空间和世界空间写入:
/createUserVar testing.enabled/setUserVarType testing.enabled bool/setUserVarPerms testing.enabled read anyone/setUserVarPerms testing.enabled write variable_owner_unsafe
用户颜色
创建一个 Color 类型的 User 变量,只有所有者可以从用户空间写入,并可从任何地方读取:
/createUserVar testing.myColor/setUserVarType testing.myColor color/setUserVarPerms testing.myColor read variable_owner_unsafe/setUserVarPerms testing.myColor write variable_owner
组布尔值
创建一个 Boolean 类型的 Group 变量,只有所有者可以从任何地方读取和写入:
/createGroupVar MyGroup testing.enabled/setGroupVarType MyGroup testing.enabled bool/setGroupVarPerms MyGroup testing.enabled read,write variable_owner_unsafe
使用云变量
组件
ActiveUserCloudField`1 (Component) - 类似 CloudValueField,但将 OwnerId 覆盖为本地用户。
ActiveUserCloudValueVariable`1 (Component) - 类似 CloudValueVariable,但将 OwnerId 覆盖为本地用户。
CloudValueField`1 (Component) - 使用目标字段来存储值,其他方面类似于 CloudValueVariable。a
CloudValueVariable`1 (Component) - 代表云变量,可以手动设置 OwnerId。
CloudValueVariableDriver`1 (Component) - 用指定云变量的值驱动目标字段。将 OwnerId 覆盖为本地用户。
ProtoFlux 节点
Write Cloud Variable`1 (ProtoFlux Node) - 收到脉冲时,为指定所有者写入指定的云变量。
Read Cloud Variable`1 (ProtoFlux Node) - 收到脉冲时,为指定所有者读取指定的云变量。
云端房间和自动启动世界选项
云变量可以通过多种方式用于 云端客户端 (Headless Client) 配置文件和 启动配置文件 (Startup Config File):
- 配置会话中的角色。
- 允许/拒绝用户加入/访问会话。
- 提供自定义的拒绝消息,解释用户为何被拒绝访问会话。
这些选项在 Resonite 内部的 UI 中不可用,需要从游戏外部进行高级设置。
由于权限要求,我们建议为此类设置使用组变量。你可能勉强可以使用配置得当的用户变量,但组变量能给你最大的控制权。
要设置这些,你需要将下述参数添加到你的配置 JSON 文件中。
角色
要使用云变量配置角色,请在你的世界启动/无头会话配置中添加 roleCloudVariable 参数。其值应为你要使用的云变量的完整路径。会话随后将使用该云变量来确定用户拥有的角色。
这样做时,你需要记住几件事:
- 变量数据类型必须是字符串。
- 强烈建议为此变量使用
definition_owner权限组。其他权限组可能允许用户覆盖他们的角色。 - 如果未为变量和用户设置值,将使用其他确定角色的方法。
设置示例:
| 变量所有者 ID | 值 |
|---|---|
| U-Frooxius | Admin |
| U-Nexulan | Builder |
| U-Shifty | Guest |
| U-ProbablePrime | Spectator |
| U-Vegasx | Spectator |
需要添加的相应 JSON 属性为:"roleCloudVariable": "G-Cheese.awesomeHeadless.userRoles"
访问权限
有一些变量和设置可以控制对无头会话的访问。
允许用户访问
要使用云变量配置对无头会话的访问,请在你的世界启动/无头会话配置中添加 allowUserCloudVariable 参数。其值应为你要使用的云变量的完整路径。会话随后将使用该云变量来提供会话访问权限。
此选项优先于所有其他检查,包括最大用户数和可见性等常规会话设置。
这样做时,你需要记住几件事:
- 变量数据类型必须是 bool(布尔值)。
- 如果设置为 true,用户将被允许加入会话。
- 如果设置为 false 或不存在值,将使用其他确定访问权限的方法。
- 如果其值为 true,服务器将允许用户访问。
- 这相当于向用户发送邀请。
- 无论 MaxUsers(最大用户数)设置如何,用户都可以加入。
- 即时会话是私有的,用户也可以加入。不过他们需要会话链接。
设置示例:
| 变量所有者 ID | 值 |
|---|---|
| U-Frooxius | true |
| U-Nexulan | true |
| U-BadGuy | false |
需要添加的相应 JSON 属性为:"allowUserCloudVariable": "G-Cheese.awesomeHeadless.accessControl"
拒绝用户访问
与 allowUserCloudVariable 类似,你可以使用 denyUserCloudVariable 来拒绝用户访问你的世界启动/无头会话配置。按照上面的指南允许访问,但改为使用 denyUserCloudVariable。当用户的值为 true 时,他们将被拒绝访问。
当为 true 时,此选项优先于所有其他检查,包括最大用户数和可见性等常规会话设置。
设置示例:
| 变量所有者 ID | 值 | 描述 |
|---|---|---|
| U-Frooxius | false | 允许访问 |
| U-Nexulan | false | 允许访问 |
| U-BadGuy | true | 拒绝访问 |
需要添加的相应 JSON 属性为:"denyUserCloudVariable": "G-Cheese.awesomeHeadless.userAccess"
加入控制
除了上述选项外,你还可以选择使用 requiredUserJoinCloudVariable。当此选项添加到你的世界启动/无头会话配置中时,将在用户加入时检查其值。如果为 true,则允许用户加入。如果为 false,则不允许加入。
请注意,此选项不优先于其他会话检查。即使此值设置为 true,如果会话已满(达到最大用户数),用户也将无法进入。
设置示例:
| 变量所有者 ID | 值 |
|---|---|
| U-Frooxius | true |
| U-Nexulan | true |
| U-BadGuy | false |
需要添加的相应 JSON 属性为:"requiredUserJoinCloudVariable": "G-Cheese.awesomeHeadless.userAccess"
拒绝消息
当你的无头客户端使用 requiredUserJoinCloudVariable 时,你可以在配置文件中使用第二个配置元素:requiredUserJoinCloudVariableDenyMessage。
这允许你指定一条单一消息,发送给那些因在 requiredUserJoinCloudVariable 定义的变量中值缺失或为 false 而被限制加入的用户。
你必须使用 requiredUserJoinCloudVariable 才能使其工作,因为它们是链接在一起的。这些系统不能与其他云变量或其他访问控制结合使用。
这些选项起初可能令人困惑,但对于控制会话访问非常有用,且不绕过常规检查(如可见性和最大用户数)。我们经常看到它用于像漫展这样需要注册的活动。
延伸阅读
(文档待完善)
默认云变量
Resonite 有一些在内部使用或为用户自动设置的云变量。如下所示:
| 变量 | 描述 |
|---|---|
G-Resonite.Favorites.AudioPlayer |
包含用户最喜欢的 音频播放器 的 Uri。 |
G-Resonite.Favorites.AudioStreamController |
包含用户最喜欢的 音频流控制器 的 Uri。 |
G-Resonite.Favorites.Avatar |
包含用户最喜欢的 Avatar (化身) 的 Uri。 |
G-Resonite.Favorites.Camera |
包含用户最喜欢的 相机 的 Uri。 |
G-Resonite.Favorites.Home |
包含用户最喜欢的 云端之家 的 Uri。 |
G-Resonite.Favorites.Keyboard |
包含用户最喜欢的 Resonite 键盘 的 Uri。 |
G-Resonite.Favorites.NamePlate |
包含用户最喜欢的 名牌 的 Uri。 |
G-Resonite.Favorites.NoticeDisplay |
包含用户最喜欢的 通知显示器 的 Uri。 |
G-Resonite.Favorites.ProgressBar |
包含用户最喜欢的 进度条 的 Uri。 |
G-Resonite.Favorites.TextDisplay |
包含用户最喜欢的 文本显示器 的 Uri。 |
G-Resonite.Favorites.UrlDisplay |
包含用户最喜欢的 Url 显示器 的 Uri。 |
G-Resonite.Favorites.VideoPlayer |
包含用户最喜欢的 视频播放器 的 Uri。 |
G-Resonite.Favorites.WorldLoadingIndicator |
包含用户最喜欢的 世界加载指示器 的 Uri。 |
G-Resonite.CloudHome.FeaturedPanel.BackgroundImage |
包含精选云端之家面板背景图片的 Uri。 |
G-Resonite.CloudHome.AvatarPanel.AvatarWorldList |
包含一个 string,是云端之家面板中不同精选 Avatar 世界的列表。 |
G-Resonite.CloudHome.FeaturedPanel.WorldCredit |
包含一个 string,是云端之家面板中精选世界的制作人员名单。 |
G-Resonite.CloudHome.FeaturedPanel.WorldLink |
包含一个 uri,是云端之家中精选世界的链接。 |
G-Resonite.CloudHome.FeaturedPanel.WorldName |
包含一个 string,是云端之家中精选世界的名称。 |
G-Resonite.CloudHome.HasVisited |
包含一个 bool,表示用户是否访问过云端之家。 |
G-Resonite.UserSettings.Accessibility.ReducedMotion |
包含一个 bool,表示用户是否开启了减少动态效果。 |
G-Resonite.UserSettings.Color.Enabled |
包含一个 bool,确定是否使用用户的主、次和第三颜色云变量。 |
G-Resonite.UserSettings.Color.Primary |
包含用户主色的 ColorX。通常用于头部和手部。 |
G-Resonite.UserSettings.Color.Secondary |
包含用户次色的 ColorX。通常用于头部和手部。 |
G-Resonite.UserSettings.Color.Tertiary |
包含用户第三颜色的 ColorX。通常用于头部和手部。 |
G-Resonite.UserSettings.ColorPicker.LastOpenedTab |
包含一个 int,表示用户在拾色器中最后打开的标签页。 |
G-Resonite.UserSettings.ColorPicker.Swatch1 |
包含用户拾色器插槽 1 的 ColorX。 |
G-Resonite.UserSettings.ColorPicker.Swatch2 |
包含用户拾色器插槽 2 的 ColorX。 |
G-Resonite.UserSettings.ColorPicker.Swatch3 |
包含用户拾色器插槽 3 的 ColorX。 |
G-Resonite.UserSettings.ColorPicker.Swatch4 |
包含用户拾色器插槽 4 的 ColorX。 |
G-Resonite.UserSettings.ColorPicker.Swatch5 |
包含用户拾色器插槽 5 的 ColorX。 |
G-Resonite.UserSettings.ColorPicker.Swatch6 |
包含用户拾色器插槽 6 的 ColorX。 |
G-Resonite.cloud_home.current |
包含以前在旧版基础设施中用于用户最爱 云端之家 的 Uri。已被 G-Resonite.Favorites.Home 取代。 |
G-Resonite.common_avatar.current |
包含以前在旧版基础设施中用于用户最爱 Avatar 的 Uri。已被 G-Resonite.Favorites.Avatar 取代。 |
G-Resonite.interactive_camera.current |
包含以前在旧版基础设施中用于用户最爱 相机 的 Uri。已被 G-Resonite.Favorites.Camera 取代。 |
G-Resonite.virtual_keyboard.current |
包含以前在旧版基础设施中用于用户最爱 Resonite 键盘 的 Uri。已被 G-Resonite.Favorites.Keyboard 取代。 |
G-Resonite.CustomUserColor |
包含以前用于用户主色(如默认头手 Avatar)的 ColorX。已被 G-Resonite.UserSettings.Color.Primary 取代。 |
G-Resonite.test.byte |
包含一个供用户测试的 byte。 |
G-Resonite.test.color |
包含一个供用户测试的 color。 |
G-Resonite.test.definitionOwnerUnsafe |
包含一个供用户测试的 string。 |
G-Resonite.test.definitionOwnerWriteOnly |
包含一个供用户测试的 Uri。 |
G-Resonite.test.enum |
包含一个供用户测试的 string。 |
G-Resonite.test.float |
包含一个供用户测试的 float。 |
G-Resonite.test.float2 |
包含一个供用户测试的 float2。 |
G-Resonite.test.float3 |
包含一个供用户测试的 float3。 |
G-Resonite.test.float3x3 |
包含一个供用户测试的 float3x3。 |
G-Resonite.test.float4 |
包含一个供用户测试的 float4。 |
G-Resonite.test.int |
包含一个供用户测试的 int。 |
G-Resonite.test.longString |
包含一个 8192 字符长的 string,供用户测试。 |
G-Resonite.test.ownerOnlyVariable |
包含一个拥有 OwnerOnly 权限的 string,供用户测试。 |
G-Resonite.test.ownerWriteOnly |
包含一个拥有 OwnerWriteOnly 权限的 string,供用户测试。 |
G-Resonite.test.publicVariable |
包含一个权限设置为 public 的 string,供用户测试。 |
G-Resonite.test.shortString |
包含一个 8 字符长的 string,供用户测试。 |
G-Resonite.test.string |
包含一个默认长度的 string,供用户测试。 |
(文档待完善)
No comments to display
No comments to display