获取控制器
使用 Get Controllers 读取已连接的控制器及其当前玩家分配。你可以使用结果创建控制器选择器,或显示可用控制器的数量。
在 Interaction > Controls 中找到此行为。
属性
Get Controllers 没有设备选择属性。每次执行时,都会读取完整的已连接控制器列表。
输入和事件连接
需要获取最新快照时运行此行为。其底部事件连接会在写入 controllers 和 count 后立即运行。
读取后,快照会保持原样。再次运行 Get Controllers 可刷新快照。连接或分配发生变化时,Controller Status 可以触发刷新。
输出
| 输出 | 内容 |
|---|---|
controllers | 已连接的实体控制器及其玩家分配组成的数组。没有控制器连接时,数组为空。 |
count | controllers 中记录的数量。没有控制器连接时,该值为 0。键盘和鼠标不会计入此数量。 |
Get Controllers 没有直接的 deviceID 输出。每个控制器的 ID 都位于 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 列出本次会话中产生过输入的控制项。平台识别出的布局描述了可能存在的控制项,但不能据此确认连接的设备上实际存在每个按钮。
创建选择器时,请使用此行为提供的控制器列表。不要因为缺少能力字段,就认定控制器没有任何按钮。
连接指南:显示已连接控制器的数量
这是一个用于在你自己的 UI 中显示标签的示例。
- 创建一个名为 Controller Count 的标签对象。
- 添加 Get Controllers,并在此 UI 打开时运行它。
- 将其底部事件连接到 Set Label。
- 在 Set Label 中,将 Controller Count 选为 Object A。
- 将 Get Controllers 的绿色
count输出拖到 Set Label 的 Text 属性中。
标签会显示最新快照中的数量。绿色数据引用提供数量;白色执行连接则会在读取数量后更新标签。
若要列出设备名称,游戏需要读取 controllers 中的各个字典。此计数示例不会选择控制器,也不会提取设备 ID。生成的 Controls overlay 已提供控制器选择器。
玩家、ID 和配对
新连接的控制器会分配到第一个空闲的正数玩家槽位。使用 Assign Controller 可以更改此分配。
玩家编号是游戏中的槽位,并非永久的控制器身份。设备与玩家之间的选择仅在当前会话中有效。进行分配时,请使用此列表或控制器事件提供的最新 deviceID 值。
控制器必须已通过平台支持的设置方式连接。Get Controllers 不会为蓝牙硬件配对。可连接的控制器数量上限取决于设备和操作系统。

