输入处理

点击下载示列代码。

这是一个完整的 Bevy 输入处理例子,你可以运行。它将把所有的输入内容打印到控制台。


Bevy 支持以下输入:

  • 键盘(检测按键被按下或释放)
  • 字符(用于文本输入。键盘布局由操作系统负责)
  • 鼠标(相对移动、按键、滚动)
    • 移动(鼠标移动,不仅仅只是代表操作系统的光标移动)
    • 光标(光标绝对位置)
    • 按键
    • 滚动(鼠标滚轮或触摸板手势)
  • 触摸屏(包含多点触摸)
  • 游戏手柄(通过 gilrs 库实现)

传感器,如加速计和陀螺仪,还不支持。

对于大多数输入类型,Bevy 提供了两种处理方式:

有些输入只能以事件的形式提供。

检查设备状态是通过 resources 来完成的,比如 Input(用于数字输入,如按键或按钮)、Axis (用于模拟输入)、Touches(用于触摸屏上的手指操作)等等。这种处理输入的方式对于实现游戏逻辑非常方便。在这些情况下,你通常只关心游戏中映射到动作的特定输入,你可以检查特定的按钮、按键,看它们何时被按下、释放,或者它们的当前状态是什么。

Events输入事件)是一种较底层的、更全面的方法。如果你想从某类输入设备中获得所有的操作,而不是只检查特定的输入,就使用输入事件。

输入映射

Bevy 还没有提供一个内置的方法来做输入映射(配置按键绑定,等等)。你需要想出自己的方法,将输入转化为游戏或应用中的逻辑动作。

有一些社区制作的插件可以帮助你:见 bevy-assets 的输入部分。我个人推荐:Leafwing Studios 的输入管理器插件

一个好的想法是为你自己的游戏设计特定的映射抽象。例如,如果你需要处理角色的移动,你可能希望有一个系统来读取输入并将其转换为你自己的内部"移动事件、行为事件",然后另一个系统作用于这些内部事件来实际移动角色。确保使用 明确的 system 排序 以避免滞后、帧延迟。