游戏手柄被定义为拥有两个摇杆、一个方向键(D-pad)和四个正面按钮的设备。此外,游戏手柄通常还具有两个肩部按钮和两个触发按钮,并且大多数手柄还在中间配有两个按钮。
尽管游戏手柄可能包含额外的控件(如陀螺仪),但所有手柄都至少包含上述的最小控件集。
游戏手柄支持保证在不同平台和硬件之间,控件的正确位置和功能保持一致。例如,无论在哪个平台上使用,PS4 DualShock 控制器的布局应始终相同。
注意事项:
通用 HID 游戏手柄不会作为 Gamepad 设备呈现,而是被创建为通用摇杆。这是因为输入系统无法在 HID 层面保证按钮和轴的正确映射。
如果想使用游戏手柄控制鼠标输入,可以从包管理器中的 Input System
包安装 Gamepad Mouse Cursor
示例,展示如何设置游戏手柄输入驱动虚拟鼠标光标。
每个游戏手柄都具有以下控件:
控件类型描述leftStickStickControl左侧摇杆,归一化的二维运动向量,包含上下左右按钮。rightStickStickControl右侧摇杆,归一化的二维运动向量,包含上下左右按钮。dpadDpadControl方向键。buttonNorthButtonControl正面上方按钮(Xbox:Y,PlayStation:三角形)。buttonSouthButtonControl正面下方按钮(Xbox:A,PlayStation:叉)。buttonWestButtonControl正面左侧按钮(Xbox:X,PlayStation:方形)。buttonEastButtonControl正面右侧按钮(Xbox:B,PlayStation:圆形)。leftShoulderButtonControl左肩按钮。rightShoulderButtonControl右肩按钮。leftTriggerButtonControl左触发按钮。rightTriggerButtonControl右触发按钮。startButtonButtonControl开始按钮。selectButtonButtonControl选择按钮。leftStickButtonButtonControl按下左摇杆时的按钮。rightStickButtonButtonControl按下右摇杆时的按钮。
注意: 按钮也是全浮点轴,例如左、右触发按钮可以作为按钮和浮点轴使用。
还可以使用索引器和 GamepadButton
枚举访问游戏手柄按钮:
游戏手柄支持 Xbox 和 PS4 风格的按钮别名,例如:
死区用于防止摇杆的轻微偏移导致误操作。可以在摇杆上添加死区处理器,例如:
在 Windows(仅限 XInput 控制器)、UWP 和 Switch 上,Unity 显式轮询游戏手柄而不是通过事件更新。可以手动控制轮询频率,默认频率为 60Hz:
Gamepad
类实现了 IDualMotorRumble
接口,允许控制左右马达的速度:
注意: 仅支持某些设备/操作系统组合的震动功能,例如 PS4、Xbox、Switch 控制器在其各自的主机上连接时支持震动。
IDualMotorRumble
基于 IHaptics
,可以使用 PauseHaptics
、ResumeHaptics
和 ResetHaptics
方法来分别暂停、恢复或停止触觉反馈。
Unity 支持多种 PlayStation 控制器,例如 DualShock4GamepadHID
(在桌面通过 HID 连接的 DualShock 4 控制器),支持在 macOS、Windows 和 Linux 上使用。
可以通过 SetLightBarColor(Color)
设置 DualShock 控制器的光条颜色:
注意: 由于 USB 驱动和硬件的限制,只能同时处理一个输入输出控制命令(IOCTL)。
Unity 支持多种 Xbox 控制器,通过 XInputController
类实现(派生自 Gamepad
)。在 Windows 和 UWP 上,Unity 使用 XInput API 连接 Xbox 兼容控制器,例如 Xbox One 或 Xbox 360 控制器。
Unity 支持 Switch Pro 控制器通过 SwitchProControllerHID
类在桌面上实现基本游戏手柄功能。当前仅支持通过蓝牙连接。
注意: Switch Joy-Con 目前在桌面不受支持。
可以通过 VirtualMouseInput
组件让游戏手柄或摇杆控制硬件或软件光标。