44个版本 (19个破坏性版本)

0.20.1 2024年7月9日
0.20.0-rc.12024年6月30日
0.18.2 2024年3月8日
0.17.0 2023年11月10日
0.2.0 2020年11月7日

#8 in 游戏开发

Download history 2318/week @ 2024-05-04 2093/week @ 2024-05-11 1931/week @ 2024-05-18 2711/week @ 2024-05-25 2573/week @ 2024-06-01 2197/week @ 2024-06-08 3085/week @ 2024-06-15 2283/week @ 2024-06-22 2228/week @ 2024-06-29 3820/week @ 2024-07-06 2602/week @ 2024-07-13 3554/week @ 2024-07-20 6551/week @ 2024-07-27 4682/week @ 2024-08-03 5543/week @ 2024-08-10 4387/week @ 2024-08-17

21,839 每月下载量
用于 32 个Crate (27直接使用)

MIT/Apache

7.5MB
2K SLoC

Bevy的选择和指针事件

crates.io docs.rs CI

demo

一组灵活的插件,可以将选择功能添加到您的bevy应用程序中。想拖动一个UI实体并将其放置到3D网格实体上吗?此插件允许您向任何实体添加事件监听器,并且可以与鼠标、触摸或甚至游戏手柄一起使用。

亮点

  • 轻量级:仅编译您需要的部分。
  • 表达性强:事件监听器组件 On::<Pointer<Click>>::run(my_system)
  • 输入无关:使用鼠标、笔、触摸或自定义Bevy系统控制指针。
  • 模块化后端:混合匹配后端,如rapiereguibevy_ui,或编写自己的后端。

轻量级

仅编译您使用的部分。所有非关键插件都可以禁用,包括突出显示、选择和任何未使用的后端。除非您需要后端(例如eguirapier),否则该crate不使用任何外部依赖项。

表达性强

On::<Pointer<E>> 事件监听器组件使您能够轻松地响应用户指针交互,如ClickOverDrag。事件从目标开始向上冒泡到实体层次结构,寻找事件监听器,并运行任何监听器的回调。这些回调是正常的Bevy系统,尽管提供了一些助手以减少样板代码。

commands.spawn((
    PbrBundle { /* ... */ },
    // These callbacks are run when this entity or its children are interacted with.
    On::<Pointer<Move>>::run(change_hue_with_vertical_move),
    // Rotate an entity when dragged:
    On::<Pointer<Drag>>::target_component_mut::<Transform>(|drag, transform| {
        transform.rotate_local_y(drag.delta.x / 50.0)
    }),
    // Despawn an entity when clicked:
    On::<Pointer<Click>>::target_commands_mut(|_click, target_commands| {
        target_commands.despawn();
    }),
    // Send an event when the pointer is pressed over this entity:
    On::<Pointer<Down>>::send_event::<DoSomethingComplex>(),
));

如果您不需要事件冒泡或回调,您可以使用类似于任何其他事件的方式响应指针事件,例如使用 EventReader<Pointer<Click>>EventReader<Pointer<Move>> 等。

输入无关

可以使用任何东西来控制指针,无论是内置的鼠标或触摸输入,还是您自己编写的自定义游戏手柄输入系统。

模块化后端

拾取后端运行碰撞测试以确定指针是否在任意实体上。此插件提供了一个 极其简单的API,用于编写自己的后端,大约100行代码即可;它还包括一些后端,例如 rapiereguibevy_ui 等。可以同时使用多个后端!

您可以为您的UI设置一个简单的矩形碰撞测试后端,为您的3D场景设置一个GPU拾取着色器,并且此插件将处理碰撞排序和事件生成。

健壮

除了这些功能外,此插件还正确处理了多点触控、多个窗口、渲染层、视口和相机顺序。

入门指南

使对象可拾取非常简单。在最简单的情况下,只需将插件添加到您的应用程序

.add_plugins(DefaultPickingPlugins)

并将 PickableBundle 添加到可以使用您正在使用的后端拾取的实体中

commands.spawn((
    PbrBundle::default(),           // The `bevy_picking_raycast` backend works with meshes
    PickableBundle::default(),      // Makes the entity pickable
));

您可以在此处找到内置后端列表

下一步

要了解更多信息,请阅读文档,并查看 /examples 目录中的示例。了解 bevy_eventlistener 也将有所帮助。一旦您熟悉这些,此crate的 event_listener 示例是一个很好的开始。

支持的Bevy版本

bevy bevy_mod_picking
0.14 0.20
0.13 0.18, 0.19
0.12 0.17
0.11 0.15, 0.16
0.10 0.12, 0.13, 0.14
0.9 0.10, 0.11
0.8 0.8, 0.9
0.7 0.6, 0.7
0.6 0.5
0.5 0.4
0.4 0.3
0.3 0.2
0.2 0.1

许可

此存储库中的所有代码都根据您的选择以以下任一许可证双许可

这意味着您可以选择您喜欢的许可证。

您的贡献

除非您明确声明,否则任何提交以包含在作品中的贡献,如Apache-2.0许可证中定义的,将根据上述内容双许可,不附加任何其他条款或条件。

依赖关系

~29–69MB
~1M SLoC