输入事件
您可以使用 Udon 输入事件,以统一方式读取玩家控制器的输入。即使玩家重新映射了控制器,这些事件也能正常工作。
目前有两种类型的事件——按钮和轴,包含布尔值和浮点值。每个事件还包含一个特殊的 UdonInputEventArgs 对象。您也可以使用 Unity 输入方法和属性直接读取输入数据。
按钮事件
按钮事件包含一个bool值,按钮按下时为true,释放时为false。
InputJump
桌面端的空格 键,通常为控制器上的面部按钮。
InputUse
桌面端的鼠标左键,通常为控制器上的扳机键。
InputGrab
桌面端的鼠标左键,通常为 VR 控制器上的握持键。
InputDrop
桌面端的鼠标右键,在 Vive Wand 和一些 Windows Mixed Reality 控制器上按下握持键,在其他控制器上释放握持键。
轴事件
轴事件有一个float值,通常在 -1 到 1 之间。使用带有模拟摇杆的控制器时,每次值变化都会触发新事件,从 0 到 0.1,再到 0.2 等。桌面用户将输出整数:-1、0、1 等。
InputMoveHorizontal
桌面端的 A 和 D 键,通常为控制器上的左摇杆/触控板左右移动。
InputMoveVertical
桌面端的 W 和 S 键,通常为控制器上的左摇杆/触控板上下移动。
InputLookVertical
桌面端的鼠标上下移动,通常为游戏手柄和 VR 控制器上的右摇杆上下移动。
InputLookHorizontal
桌面端的鼠标左右移动,在 VR 控制器上使用右摇杆/触控板左右转动(不启用舒适转向),通常为游戏手柄控制器上的右摇杆左右移动。
UdonInputEventArgs
此对象包含在每个输入事件中,包含可能有用的附加事件数据。我们将来可能会在此对象中添加更多数据。目前包含:
- UdonInputEventType: BUTTON 或 AXIS
- boolValue: 如果是按钮事件则为 True/False,如果是轴事件则为 false(默认值)
- floatValue: 轴事件为 -1 到 1 之间的数字,按钮事件为 0(默认值)
- handType: LEFT 或 RIGHT。也包含键盘和鼠标用户(鼠标为 RIGHT,键盘为 LEFT)。
OnInputMethodChanged
每 当用户切换输入方法时触发此事件,如从键盘切换到鼠标、控制器或触摸屏。它包含一个 VRCInputMethod 枚举作为参数。
VRCInputMethod.Vive是通过 SteamVR 运行的 Vive 控制器。VRCInputMethod.ViveXr是通过 OpenXR 运行的 Vive XR Elite 控制器。
Unity 输入方法和属性
Udon 可以访问 UnityEngine.Input 命名空间中的一些方法和属性。它们提供关于用户输入的详细信息。
以下方法和属性在 Udon 中可用:
Input.anyKey、Input.anyKeyDownInput.inputStringInput.imeIsSelectedInput.GetAxis()、Input.GetAxisRaw()Input.GetButton()、Input.GetButtonDown()、Input.GetButtonUp()Input.GetMouseButton()、Input.GetMouseButtonDown()、Input.GetMouseButtonUp()Input.GetJoystickNames()Input.GetKey()、Input.GetKeyUp()、Input.GetKeyDown()
VRChat 菜单中的输入检测
在以下 VRChat 菜单打开时,Udon 无法检测输入:
- 主菜单
- 快捷菜单(仅限桌面或移动端)
- 文本输入弹窗
当您打开 VRChat 菜单时,Udon 会释放所有按住的输入,即使您继续按住它们。例如:
- 如果您按住方向键并打开 VRChat 菜单,
Input.GetButtonUp()对该键返回true。 - 如果您按住跳跃按钮并打开 VRChat 菜单,Udon 执行
InputJump(false)。
当您关闭 VRChat 菜单时,Udon 按下所有按住的 Unity 输入。例如:
- 如果您在关闭 VRChat 菜单时按住右箭头键,
Input.GetButtonDown()对该键返回true。 - 如果您按住跳跃按钮并关闭 VRChat 菜单,Udon 不会 执行
InputJump(true)。