#input #bevy #key-bindings #accessibility #gamepad-input #gamedev #game-engine

bevy_ineffable

一个简单易用的bevy输入管理器,赋予玩家更多能力,并使可访问性变得容易

6个版本 (破坏性更新)

0.6.0 2024年7月6日
0.5.0 2024年2月24日
0.4.0 2024年2月17日
0.3.0 2024年2月17日
0.1.0 2024年2月14日

#302 in 游戏开发

每月28次下载

MIT/Apache

140KB
2.5K SLoC

Crates.io Downloads Docs unsafe forbidden License

Bevy Ineffable

一个简单易用的Bevy游戏引擎输入管理器,赋予玩家更多能力,并使可访问性变得容易。

核心原则

  1. 使可访问性变得容易。
    • 玩家可以创建和分享自定义输入配置。配置可以在运行时合并。
    • 接受延迟帮助患有帕金森病等疾病的玩家避免意外按键。
    • 切换连续输入帮助无法长时间按住按钮的玩家。
    • 宏支持即将推出。
  2. 提供统一的抽象视图。
    • 游戏应与特定输入设备无关。
    • 不再需要从多个来源手动收集键盘、鼠标和游戏手柄输入。
  3. 绝不允许游戏崩溃,但应在出现问题时提供清晰直接的反馈。
    • 扫描玩家创建的键绑定配置,并生成包含详细反馈的报告。
  4. 识别不同类型的输入(轴、双轴、连续和脉冲),并在编译时利用类型系统区分它们。
    • 双轴:沿两个轴输入方向。例如,模拟摇杆。
    • 单轴:沿一个轴输入方向。例如,鼠标滚轮。
    • 连续:始终处于激活状态。例如,当按钮被按下时。
    • 脉冲:偶尔脉冲。例如,点击鼠标左键。

快速入门

[dependencies]
# Add bevy_ineffable as a dependency to your `Cargo.toml`
bevy_ineffable = "0.6.0"
use bevy::prelude::*;
use bevy_ineffable::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        // Always add the IneffablePlugin:
        .add_plugins(IneffablePlugin)
        // Also register GooseInput as an InputAction:
        .register_input_action::<GooseInput>()
        .add_systems(Startup, init)
        .add_systems(Update, update)
        .run();
}

/// Define an enum and derive `InputAction`.
/// These are the abstract actions that keys can be bound to.
#[derive(InputAction)]
pub enum GooseInput {
    /// In this example, the only thing the player can do is honk.
    /// We must define what kind of input Honk is. Honking is 
    /// enacted instantaneously, so we'll define it as a pulse.
    #[ineffable(pulse)]
    Honk,

    // You can add more actions here...

}

/// Create a config that binds the space bar to the `Honk` action.
fn init(mut ineffable: IneffableCommands) {
    // The builder pattern is used here, but configs can also 
    // be loaded as an asset.
    let config = InputConfig::builder()
        .bind(
            ineff!(GooseInput::Honk),
            PulseBinding::just_pressed(KeyCode::Space),
        )
        .build();
    ineffable.set_config(&config);
}

/// Whenever the Honk action pulses, write to the console.
fn update(ineffable: Res<Ineffable>) {
    if ineffable.just_pulsed(ineff!(GooseInput::Honk)) {
        println!("Honk!");
    }
}

更多示例

更多示例可以在examples/目录中找到。每个示例都在自己的文件中。通过运行第一个示例来尝试:

cargo run --example basics

兼容的Bevy版本

bevy bevy_ineffable
0.12 0.1.0 - 0.3.0
0.13 0.4.0 - 0.5.0
0.14 0.6.0

路线图

  • 宏支持
  • 记录和回放输入序列
  • 在游戏中实现键重映射设置屏幕的辅助函数。
  • 完整的本地多人支持
  • 支持屏幕按钮提示
  • 不同的输入上下文
  • 可能与其他GUI相关联?

许可协议

Ineffable可以在以下任一协议下双许可:

根据您的选择。这意味着当您在游戏中使用此软件包时,可以选择使用哪个许可证。

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,将按照上述方式双许可,没有任何附加条款或条件。

依赖项

~40–76MB
~1.5M SLoC