控制器事件
描述
使用 Controller Event,通过实体控制器运行你自己的行为。无需添加屏幕上的摇杆或按钮,即可从头构建控制器操作。
选择玩家、控制项以及要接收的事件。将它的白色事件输出连接到下一个行为。要实现自定义移动或瞄准,请将它的数值输出拖入用于计算移动的行为。
如果你的游戏已经使用 Joystick Controlled、Jump with Button 或触摸按钮,Map Control Inputs 可以为现有输入添加替代方式。
按下按钮时播放声音
白色连接会在按下按钮时运行 Play Sound。此示例不需要绿色数据拖放。
- 添加 Controller Event,并让它从场景开始时监听。
- 将 Player 设为 1,将 Control 设为 Bottom Button (A / ×),并将 Event 设为 Pressed。
- 添加 Play Sound。使用 Select Asset,从你的素材库中选择一段较短的音效。
- 将 Controller Event 底部任意一个空闲的白色圆点连接到 Play Sound 顶部的白色圆点。
- 连接一个受支持的控制器并运行你的项目。按下底部面键。
每按一次,你都应该听到一次声音。按住按钮不会重复触发 Pressed 事件。While Held 会在每个有效帧运行所连接的行为,因此只有在你需要重复执行时才使用它。
绿色的 Input 输出用于标识此控制器输入,以供输入相关功能使用。使用白色执行连接来触发 Play Sound。
属性
| 属性 | 默认值 | 设置说明 |
|---|---|---|
| Player | 1 | 要读取其控制器的指定玩家。输入 0 可监听任意已连接的控制器,包括未分配给玩家的控制器。 |
| Control | Bottom Button (A / ×) | 要监听的控制器位置。从下方选项中选择一项控制。你连接的设备必须支持该控制项。 |
| Event | Pressed | 选择何时运行白色事件连接。 |
控制项选项
| 类别 | 确切选项 |
|---|---|
| 方向控制 | D-pad、Left Stick、Right Stick |
| 面键 | Bottom Button (A / ×)、Right Button (B / ○)、Left Button (X / □)、Top Button (Y / △) |
| 肩键和扳机键 | Left Shoulder、Right Shoulder、Left Trigger、Right Trigger |
| 摇杆按键 | Left Stick Click (L3)、Right Stick Click (R3) |
| 菜单按钮 | Menu、Options |
面键按位置命名,因此你可以在受支持的不同品牌控制器上使用相同设置。控制器上印刷的字母或符号可能有所不同。
事件选项
| 事件 | 所连接的行为运行时机 |
|---|---|
| Pressed | 控制项变为激活状态时运行一次。对于摇杆或 D-pad,当它偏离中立位置时触发。 |
| Released | 控制项变为非激活状态或回到中立位置时运行一次。 |
| While Held | 只要控制项保持激活状态,就会在每个有效帧运行。 |
| Value Changed | 每当数值发生变化时运行,包括方向或压力变化以及回到中立位置。 |
摇杆保持激活状态时改变方向,不会再次触发 Pressed 事件。使用 Value Changed 读取这些变化,或者在需要每帧运行计算时使用 While Held。
输出
| 输出 | 类型 | 含义 |
|---|---|---|
Input | 输入引用 | 标识此控制器输入,包括其 Player 和 Control。在首次硬件事件发生前即可使用。要更改此行为自身的控制器绑定,请在 Rebind Input 中选择此行为。 |
value | 数字 | 按钮或扳机压力,或方向幅度,范围为 0 到 1。数字按钮通常只输出 0 或 1。 |
x | 数字 | 水平方向值:左为 −1,右为 1。按钮输出 0。 |
y | 数字 | 垂直方向值:下为 −1,上为 1。按钮输出 0。 |
pressed | 布尔值 | 控制项处于激活状态时为 True;未激活时为 false。 |
deviceID | 文本 | 提供此事件的控制器在运行时的 ID。你可以将它传给 Assign Controller。请在当前会话中使用它,不要将其保存为永久硬件 ID。 |
playerIndex | 数字(整数) | 触发事件的控制器当前的分配情况。0 表示未分配。如果使用 Player 0 进行监听,此值可能与 Player 属性不同。 |
dt | 数字 | While Held 的每帧更新所经过的秒数。使用此输出进行基于帧的 While Held 计算。 |
数值输出和设备输出描述刚刚触发的事件。Input 提供持久的输入引用。更改输出值不会改变你在属性中选择的 Player。
按下按钮时添加振动
将 Controller Event 连接到 Vibrate,即可在玩家按下按钮时请求一次振动。此示例使用 Player 1、Bottom Button (A / ×) 和 Pressed。
将 Vibrate 的 Player 设为 1,并将 Vibrate 选项设为 Controller。将 Intensity (%) 设为 70,将 Duration (ms) 设为 150。将 Controller Event 底部的白色圆点连接到 Vibrate 顶部的白色圆点。
此示例会在每次按下时请求一次短促的振动。它也适用于支持触感反馈的已配对 iPhone。
你可以将 Controller Event 的 playerIndex 输出拖到 Vibrate 的 Player 字段,以跟随事件对应的玩家分配。要向单个玩家提供反馈,请使用一个大于 0 的已分配玩家槽位。Vibrate 会将 0 视为所有已连接的控制器。
构建自定义移动
选择 Left Stick,并在你自己的移动计算中使用 x 和 y。对于每个数据连接,先选择接收行为。将 Controller Event 的绿色输出图标拖到接收属性中,然后从输出列表中选择 x 或 y。
向右推满时,输出为 x = 1, y = 0。向上推满时,输出为 x = 0, y = 1。根据游戏需要的速度或力对这些值进行缩放。
规划好摇杆释放时应发生什么。控制项变为非激活状态后,While Held 就会停止运行。如果你的行为图设置了持续生效的速度,请添加释放操作将其停止;或者使用 Value Changed,让行为图接收到中立值。你的移动行为决定角色如何加速、碰撞和播放动画。
对于自定义操作的键盘或鼠标替代方案,可以视情况将 Keyboard Event 或 Mouse Event 连接到同一个操作。Controller Event 用于读取控制器控制项。它的 Input 引用不能用作反向映射,无法通过 Map Control Inputs 创建触摸输入。
多名玩家
一名玩家的事件使用 Player 1,另一名玩家的事件使用 Player 2。两名玩家可以使用相同名称的 Control。Assign Controller 和 Controls 覆盖层会选择哪个已连接设备属于每个玩家槽位。
使用 Player 0 时,每个设备都可以独立触发事件。deviceID 和 playerIndex 输出会告诉你哪个设备提供了该事件。这适用于加入游戏的操作。对于 While Held,两个持续按住控制项的控制器可以在同一帧中分别触发回调。
通过平台支持的蓝牙或 USB 设置连接或配对控制器。你的游戏会从已连接的设备中进行选择。
重新绑定和执行
Controller Event 启动后就会开始监听。如果你将另一个行为连接到它顶部的白色圆点,该执行连接就会启动监听器。仅注册监听器不会触发所选输入事件。
编辑器中可编辑的 Controls 覆盖层和 Rebind Input 可以更改此事件的控制器绑定。为每位玩家生成的 Controls 列表会省略 Player 0 监听器;这些监听器通常用于加入游戏或菜单导航。需要更改时,可以在 Rebind Input 中显式选择此类事件。
已停用的行为和暂停的游戏不会运行这些输入操作。重新绑定期间,捕获到的输入不会传递给游戏。设备断开连接时,请使用 Controller Status 作出响应。将 Released 视为一种输入事件,不要依赖它来识别已断开的设备。

