网格可视化脚本节点参考

转到 视觉脚本概述文章

按间隔

在间隔事件节点上

On Interval 事件节点按固定时间间隔触发脚本流,该流在同一会议室中的所有客户端之间同步。

  • 间隔:事件之间的间隔(以秒为单位)。
  • 延迟:在第一个事件之前延迟(以秒为单位)。 可以使用此选项将事件与不同“间隔”节点触发的同一间隔事件交错。

状态更改时

在连接到“获取变量”节点的“状态已更改”事件节点上

当任一输入更改其值时,On State Changed 事件节点将触发。 这是一种强大的机制,使脚本能够响应由用户交互或其他视觉脚本引起的状态更改,无论是在本地还是在同一房间中的其他客户端上。

  • :指定要观察的输入端口数。 最多可以同时观察 10 个输入端口。 当其中任一更改其值时,在状态更改 时触发。
  • 在 0In 1 和序列中更多:为状态更改观察到的输入。 可以将任何数据节点附加到这些输入: 获取变量 或任何组件属性(实例或静态)。
  • Out 0、Out 1 以及此序列中的更多值:输出对应于返回观察到的值的 In 0等等)输入。

观察脚本变量或组件属性时, On State Changed 通常通过在内部注册适当的回调来运行,避免需要不断重新评估其输入。 当适当的回调不可用时,如以下示例所示,“状态更改”节点变为红色Graph 检查器面板会警告无法有效地观察输入,因此被禁用:

连接到“获取变量”节点与整数文本(无轮询)的结果的“状态更改”事件节点的屏幕截图。

在这种情况下,可以选择“在图形检查器”面板中选择“允许轮询”,以强制更改状态,通过不断重新评估更改的输入来检测更改。 节点沿顶部保留一个黄色条形图,提醒你观察输入时运行时成本增加。

连接到“获取变量”节点与整数文本进行比较的结果的 On State Changed 事件节点的屏幕截图,允许轮询。

显示对话框

“显示对话框”操作节点的屏幕截图

显示对话框” 节点显示一个对话框,其中包含自定义消息和一个或多个按钮,允许用户关闭对话框。

  • 文本:对话框中显示的消息。 如有必要,消息文本将换行。
  • 按钮:选择要向用户呈现的按钮。 可以显示以下按钮:“确定”、“取消”、“是”、“”、“确认”、“下一步”、“重试”、“继续”、“退出”。
  • 结果:变量名称,用于在用户通过选择按钮关闭对话框时存储用户的响应。 (如果留空,则放弃响应。
  • 目标:具有 变量 组件的 GameObject,用于存储用户的响应。

如果定义了 Result 变量,则会在输入“显示对话框”节点后立即重置为空字符串,并在用户选择关闭对话框的按钮时异步设置为用户的响应。 存储的值是从上面的列表中取消分配的标签。 使用 On State Changed 事件节点对用户的响应做出响应,如以下示例所示:

“显示对话框”节点的屏幕截图,其中收集变量中的用户响应,后跟响应变量更改的 On State Changed 节点

结果变量可以是本地变量,也可以是共享变量。 如果共享,则用户的响应将发送到同一会议室中的所有客户端,并且 所有客户端上的 On State Changed 事件节点都会触发,以响应用户的响应。

物理事件节点

在触发器 Enter、触发器退出、碰撞输入碰撞退出上,物理事件节点可靠联网。 默认情况下,这些事件在会议室中的所有客户端上可靠地触发;但是,如果这些事件节点观察到的物理对撞机位于本地物理范围组件的范围内,则事件可靠地在一个客户端上触发。 这使得触发的脚本流能够可靠地读取和写入共享状态(例如,更新共享分数变量)。

安全性

网格保护用户免受威胁方案,例如:

  • 泄露的场景内容,例如恶意尝试访问敏感的本地数据。
  • 遭到入侵的客户端或传输通道(例如,恶意尝试在其他客户端上读取或写入无法访问的远程数据)。

为此,网格在沙盒中运行视觉脚本(如 Web 浏览器中的 JavaScript)。

在场景启动时,Mesh 使用特选的允许列表来验证视觉脚本,以限制对特定类型的 Unity 组件的访问及其属性的安全子集。

在场景运行时,网格限制对场景的某些部分的访问:

  • 本地:通过阻止访问网格内部和其他敏感数据。
  • 远程:通过检查场景的作者是否打算修改场景的这一部分。 为此,可以静态分析接收器端的视觉脚本,以便进行潜在的场景写入。

示例:

  • 恶意的本地视觉脚本想要为所有头像提供头像。 为此,它会尝试扫描代表头像头像的 GameObjects 的整个场景。 网格会自动筛选扫描结果,以排除头像系统。
  • 恶意远程客户端希望通过翻转所有 GameObject 倒置来破坏场景。 为此,它会发送一个属性更新,用于设置场景中每个 GameObject 的垂直比例。 但是,由于接收客户端上没有视觉脚本旨在执行此类操作,因此本地客户端将忽略远程输入。

另请参阅