控制器状态
使用 Controller Status,可在实体控制器或已配对的手机控制器连接、断开连接或更换玩家时,立即运行与其连接的行为。例如,控制器连接时隐藏触控控件,断开连接时重新显示。
在 Interaction > Controls 中找到此行为。
属性
在控制器数量示例中,这些设置会监听任意玩家的变化。
| 属性 | 默认值 | 作用 |
|---|---|---|
| Player | 1 | 监视分配给此玩家的控制器。输入其他正数可监视另一位玩家;输入 0 则监视所有控制器。更改分配时,控制器离开的玩家位置也会收到事件。 |
| Event | Changed | 选择哪些变化会运行与此行为连接的行为。 |
事件选项
- **Changed:**连接、断开连接和分配变更时运行。
- **Connected:**控制器连接时运行。
- **Disconnected:**控制器断开连接时运行。
- **Assigned:**控制器的玩家分配发生变化时运行,包括取消分配。
输入与事件连接
将 Controller Status 放在行为链的开头,并将其底部的事件连接直接连接到下一个行为。它会自动开始监听,无需使用 Timer。
每当发生符合条件的事件时,它都会立即运行连接的行为,包括游戏暂停期间。事件触发后,它会继续监听。禁用 Controller Status 会停止其监听器,直到再次启用。
监听器启动时,Connected 和 Changed 也会报告已连接的控制器。如果需要完整的初始列表(包括空列表),请使用 Get Controllers。
输出
| 输出 | 包含内容 |
|---|---|
controllers | 当前已连接控制器记录组成的数组。控制器断开连接后,会立即从此数组中移除。 |
deviceID | 状态发生变化的控制器的会话 ID。 |
name | 该控制器报告的名称。名称可能是通用名称,也可能被多个控制器共用。 |
connected | 控制器已连接时为 true;断开连接时为 false。 |
playerIndex | 此事件中控制器分配到的玩家。分配为 0 表示未分配。断开连接时,报告的是控制器断开连接时所在的玩家位置。 |
previousPlayerIndex | 控制器在分配变更时离开的玩家位置。未提供之前的分配时,此值为 0。 |
controllers 输出使用与下文 Get Controllers 所述相同的记录字段。
控制器记录
controllers 中的每个项目都是一个字典,代表一个已连接的实体控制器或已配对的手机控制器。读取字段(如 deviceID)之前,请先从数组中读取一个字典。
| 字段 | 可读取的内容 |
|---|---|
deviceID | 控制器在当前游戏会话中的 ID。将此值与 Assign Controller 配合使用。 |
name | 平台提供的名称。两个控制器可能有相同的名称。 |
vendorName | 控制器报告的供应商名称或名称。它可能与 name 相同。 |
connected | 此已连接控制器列表中的项目值为 true。 |
playerIndex | 分配给它的玩家编号。0 表示控制器已连接但尚未分配。 |
deviceType | controller。键盘和鼠标不包含在此列表中。 |
connectionOrder | 用于保持设备连接顺序的数字。请使用 deviceID 标识设备,而不要使用它在数组中的位置。 |
controls | 如有提供,则为控制项标识符数组,例如 buttonA、leftStick 和 buttonMenu。使用前请检查此字段是否存在。 |
Universal player 还可能提供 capabilitiesKnown、standardizedProfile 和 observedControls。这些字段并非所有平台都会提供。capabilitiesKnown 用于说明完整的控制项列表是否已确认。standardizedProfile 用于说明平台是否识别出标准游戏手柄布局。observedControls 列出本次会话中产生过输入的控制项。已识别的布局描述的是可能存在的控制项,并不代表连接的设备上一定有每个按钮。
在选择器中使用此行为的控制器列表。不要仅因缺少某项能力字段,就认定控制器没有按钮。
连接指南:更新控制器数量
这是一个示例,你可以将其添加到自己的控制器选择界面中。
- 创建一个名为 Controller Count 的标签 Object。
- 添加 Controller Status。将 Player 设为
0,将 Event 设为 Changed。 - 将其底部的事件连接接到 Get Controllers。
- 将 Get Controllers 接到 Set Label。选择 Controller Count 标签作为 Object A。
- 将 Get Controllers 的绿色
count输出拖到 Set Label 的 Text 属性中。
白色连接决定每个行为何时运行。绿色拖放则告诉 Set Label 要显示哪个值。连接了两个控制器时,它会显示 2。
界面首次打开时,请单独执行 Get Controllers,这样即使没有连接控制器,标签也会从 0 开始显示。Controller Status 会持续更新标签。
示例:隐藏并恢复触控摇杆
- 在行为链的开头添加 Controller Status。将 Player 设为
1,将 Event 设为 Connected。 - 将其底部的事件连接接到 Set Visibility。
- 在 Set Visibility 中,将 Joystick 选为 Object A,并将 Action 设为 Hide Graphic。
- 在另一条行为链的开头添加第二个 Controller Status。将 Player 设为
1,将 Event 设为 Disconnected。 - 将其连接到第二个 Set Visibility,选择同一个 Joystick,并选择 Show Graphic。
这两条行为链适用于实体控制器,也适用于已配对并分配给 Player 1 的手机。即使是在游戏暂停菜单中完成配对,也同样有效。请使用与摇杆控制器映射相同的玩家编号。
如果允许玩家更改分配,还要监听 Assigned,并通过 Get Controllers 检查该玩家当前分配的设备,再决定是否显示摇杆。
控制器设置
玩家通过设备支持的 Bluetooth、USB 或其他控制器设置来连接控制器。Controller Status 会监视此连接,但不会打开系统配对界面,也不会连接附近的硬件设备。
玩家编号是游戏中的逻辑位置。可连接的控制器数量取决于设备和操作系统。重启或重新连接后,它们的会话 ID 可能会变化。

