44个版本 (19个破坏性版本)
0.20.1 | 2024年7月9日 |
---|---|
0.20.0-rc.1 | 2024年6月30日 |
0.18.2 | 2024年3月8日 |
0.17.0 | 2023年11月10日 |
0.2.0 | 2020年11月7日 |
#8 in 游戏开发
21,839 每月下载量
用于 32 个Crate (27直接使用)
7.5MB
2K SLoC
Bevy的选择和指针事件
一组灵活的插件,可以将选择功能添加到您的bevy
应用程序中。想拖动一个UI实体并将其放置到3D网格实体上吗?此插件允许您向任何实体添加事件监听器,并且可以与鼠标、触摸或甚至游戏手柄一起使用。
亮点
- 轻量级:仅编译您需要的部分。
- 表达性强:事件监听器组件
On::<Pointer<Click>>::run(my_system)
。 - 输入无关:使用鼠标、笔、触摸或自定义Bevy系统控制指针。
- 模块化后端:混合匹配后端,如
rapier
、egui
、bevy_ui
,或编写自己的后端。
轻量级
仅编译您使用的部分。所有非关键插件都可以禁用,包括突出显示、选择和任何未使用的后端。除非您需要后端(例如egui
或rapier
),否则该crate不使用任何外部依赖项。
表达性强
On::<Pointer<E>>
事件监听器组件使您能够轻松地响应用户指针交互,如Click
、Over
和 Drag
。事件从目标开始向上冒泡到实体层次结构,寻找事件监听器,并运行任何监听器的回调。这些回调是正常的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行代码即可;它还包括一些后端,例如 rapier
,egui
和 bevy_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 |
许可
此存储库中的所有代码都根据您的选择以以下任一许可证双许可
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
这意味着您可以选择您喜欢的许可证。
您的贡献
除非您明确声明,否则任何提交以包含在作品中的贡献,如Apache-2.0许可证中定义的,将根据上述内容双许可,不附加任何其他条款或条件。
依赖关系
~29–69MB
~1M SLoC