SuperAPI AI 工具集

bevy-ecs-components

编程与开发

查看项目

更新于 10-15 17:33

技能介绍

用途:在 Bevy 0.19 中定义与管理 ECS 组件,包括为新游戏状态定义 #[derive(Component)]、用 #[require(...)] 声明必需组件(替代传统 bundles)、响应组件生命周期(生成、销毁、插入、移除)、用 On<E> 编写观察者处理实体定向事件,以及选择 Table 或 SparseSet 存储。

主要能力与写法:#[require] 接受 Type(用 Default)、Type(args)(元组构造)或 Type = expression 三种形式;存储通过 #[component(storage = "SparseSet")] 指定,默认 Table 迭代更快,SparseSet 适合频繁增删。实体事件用 #[derive(EntityEvent)] 定义,必须包含 entity 字段,通过 commands.trigger(...) 触发,观察者参数为 On<E>。

限制与注意点:Trigger<E> 在 0.17+ 已更名为 On<E>,方法有 event()、event_mut()、observer()、original_event_target()、propagate(bool);EntityEvent::set_target 需要 use bevy::ecs::entity::SetEntityEventTarget;,不在 prelude 中。存储选择会被编译进组件且不可更改,改变前应对真实负载做基准测试。#[require(T)] 会调用 T::default(),T 不实现 Default 时需用表达式形式。必需组件是递归的,构造函数循环无效。0.19 中 Replace 变为 Discard,钩子为 on_add、on_insert、on_discard、on_remove,钩子运行于 World 变更中,不能取任意 SystemParam,也不能销毁触发它的实体,需要灵活性时改用观察者。Resource 现为 Component 的子 trait,不要同时派生。Bundle 派生仍存在,但多数场景用 #[require(...)] 更合适。可与 bevy-ecs-queries、bevy-ecs-systems 及迁移技能配合使用。