#bevy #ecs #gamedev #query-builder

bevy_dyn_component

Bevy的动态组件安全API

3个版本 (破坏性更新)

0.3.0 2024年7月5日
0.2.0 2024年4月22日
0.1.0 2024年4月20日

#543 in 游戏开发

MIT/Apache

17KB
98

bevy_dyn_component

用法

dynamic_components_plugin 添加到您的 App

use bevy_dyn_component::prelude::*;
...
app.add_plugins(dynamic_components_plugin);

这将初始化一些不安全部分所需的组件类型注册表。之后,您可以使用 dynamic_componentinsert_dynamic API

#[derive(Component)]
struct DynamicMarker;

let marker0 = world.dynamic_component::<DynamicMarker>();
world.entity_mut(e).insert_dynamic(marker0, DynamicMarker);

组件ID也可以在查询构建器API中使用。

此包的未来

现在,由于Bevy支持动态组件,这个包可能很快就会过时。从长远来看,您可以用这个包完成许多事情,但使用 关系 来做可能会更简单。

示例

hello_world

展示了如何使用该库的基本用法,如何创建与现有组件匹配布局的动态组件,如何将它们插入实体,以及如何在查询构建器API中使用它们。

relations_at_home

展示了使用动态组件作为碎片化关系的一种简单方法。它处理已销毁的关系目标的清理工作,因此当关系目标不多时可能很有用。重要的是,没有像第一方关系功能那样的垃圾收集,因此随着额外关系目标的增加,架构计数将增加。最后,查询相关实体很痛苦,没有查询“沿”关系的支持,因此唯一的优势是自动清理。

Bevy版本

bevy bevy_dyn_component
0.13 0.1-0.2
0.14 0.3

贡献

欢迎PR。如果Bevy不久不提供一流的支持,我可能会继续更新这个。它缺少一些API,例如,take_dynamic。我可能不会添加这个,直到我在项目中需要它,但如果有其他人想处理它,我也不会犹豫。

依赖关系

~11MB
~193K SLoC