在 Unity 中使用游戏控制器控制虚拟鼠标

在为各种类型的设备(包括可折叠设备、平板电脑和大屏设备)开发 Android 游戏时,玩家通常会连接外部控制器或游戏手柄。对于最初设计为通过触控或鼠标交互的界面,使用控制器浏览菜单可能比较困难。

虽然围绕标准方向键导航重新设计界面架构通常可以提供更好的用户体验,但对于现有项目来说,这可能并不总是可行的。作为替代方案,Unity 输入系统提供了 VirtualMouseInput 组件。借助此组件,您可以使用已连接的游戏手柄或控制器来驱动屏幕上的虚拟软件光标。

VirtualMouseInput 简介

VirtualMouseInput 组件是 Unity 输入系统软件包中的高级实用程序,可将游戏手柄输入桥接到屏幕上的光标控制、界面指针互动和模拟的触屏事件。处于有效状态时,它会:

  • 创建虚拟鼠标设备:它会在 Unity 输入系统中注册一个软件模拟的鼠标,同时注册任何实体指控设备。
  • 将游戏手柄控制映射到光标操作:您可以绑定模拟摇杆或方向键,以在屏幕上移动光标,并映射控制器按钮(例如“南”按钮 / A 按钮)来模拟鼠标左键、右键或中键点击。
  • 与 Unity 界面集成:通过与 InputSystemUIInputModule 无缝协作,按钮、切换开关和滑块等标准界面元素会像对硬件鼠标或触控互动一样,对虚拟光标做出响应。
  • 驱动可视光标:可让您分配一个界面 Graphic(例如 Image 组件),该界面会自动跟踪并呈现屏幕上虚拟光标的位置。

将虚拟鼠标与 TouchSimulation 结合使用

如果您的游戏最初是专为触摸屏设计的,并且依赖于直接触控脚本或 API,那么虚拟鼠标不会自动触发您现有的触控检测逻辑,因为它注册为鼠标设备,而不是触摸屏设备。

为了支持由手柄驱动的光标互动,而无需重写旧版触控处理代码,您可以将 Unity 输入系统的 TouchSimulation 功能与 VirtualMouseInput 搭配使用:

  • 工作原理:使用 TouchSimulation.Enable() 启用后,输入系统会自动将任何有效鼠标设备(包括 VirtualMouseInput 创建的软件模拟鼠标)的点击和指针移动转换为模拟触摸屏事件。
  • 生成的数据传输:游戏手柄摇杆和按钮互动会驱动虚拟鼠标,TouchSimulation然后转化为单点触控事件 (Touchscreen)。您现有的触控检测脚本可以无缝处理这些事件,而无需修改代码。
  • 注意事项TouchSimulation 仅限于单接触点指针模拟。如果您的游戏玩法依赖于复杂的多点触控手势(例如双指张合缩放或双指旋转),则必须为游戏手柄控件配置专用输入操作绑定。

如需查看完整的技术详情、属性和使用情况文档,请参阅官方 UnityEngine.InputSystem.UI.VirtualMouseInputUnityEngine.InputSystem.EnhancedTouch.TouchSimulation 脚本参考文档。