30个版本 (破坏性)
0.21.1 | 2024年7月9日 |
---|---|
0.20.0 | 2024年5月17日 |
0.19.0 | 2024年1月19日 |
0.18.0 | 2023年7月16日 |
0.1.1 | 2020年7月11日 |
#32 in 游戏开发
每月下载116次
105KB
2K SLoC
`big-brain``
big-brain
是一个为实用AI设计的游戏库,用于Bevy游戏引擎
它允许你根据实体对世界的感知定义复杂的AI行为。定义主要基于数据驱动,使用纯Rust编写,你只需要编写评分器(观察游戏世界并得出评分的实体)和动作(在世界上执行实际行为的实体)。不需要其他代码来处理实际的AI行为。
请参阅文档获取更多详细信息。
功能
- 高度并发/可并行化评估。
- 与Bevy无缝集成。
- 经过验证的游戏AI模型。
- 高度可组合和可重用。
- 状态机风格连续动作/行为。
- 动作取消。
示例
作为开发者,你编写应用程序相关的代码来定义Scorers
和Actions
,然后使用Thinkers
将它们组合起来,这将定义实际的行为。
评分器
Scorer
是观察世界并评估为Score
值的实体。你可以把它们看作是AI系统的“眼睛”。它们是高度并行的,可以观察World
并使用它来做出一些决策。
use bevy::prelude::*;
use big_brain::prelude::*;
#[derive(Debug, Clone, Component, ScorerBuilder)]
pub struct Thirsty;
pub fn thirsty_scorer_system(
thirsts: Query<&Thirst>,
mut query: Query<(&Actor, &mut Score), With<Thirsty>>,
) {
for (Actor(actor), mut score) in query.iter_mut() {
if let Ok(thirst) = thirsts.get(*actor) {
score.set(thirst.thirst);
}
}
}
动作
Action
是实体将要执行的真正事物。它们连接到表示状态机当前执行状态的ActionState
。
use bevy::prelude::*;
use big_brain::prelude::*;
#[derive(Debug, Clone, Component, ActionBuilder)]
pub struct Drink;
fn drink_action_system(
mut thirsts: Query<&mut Thirst>,
mut query: Query<(&Actor, &mut ActionState), With<Drink>>,
) {
for (Actor(actor), mut state) in query.iter_mut() {
if let Ok(mut thirst) = thirsts.get_mut(*actor) {
match *state {
ActionState::Requested => {
thirst.thirst = 10.0;
*state = ActionState::Success;
}
ActionState::Cancelled => {
*state = ActionState::Failure;
}
_ => {}
}
}
}
}
思考者
最后,你可以在定义Thinker
时使用它,你可以将其作为常规组件附加
fn spawn_entity(cmd: &mut Commands) {
cmd.spawn((
Thirst(70.0, 2.0),
Thinker::build()
.picker(FirstToScore { threshold: 0.8 })
.when(Thirsty, Drink),
));
}
应用程序
完成所有这些后,我们只需添加我们的系统,然后就可以出发了!
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(BigBrainPlugin::new(PreUpdate))
.add_systems(Startup, init_entities)
.add_systems(Update, thirst_system)
.add_systems(PreUpdate, drink_action_system.in_set(BigBrainSet::Actions))
.add_systems(PreUpdate, thirsty_scorer_system.in_set(BigBrainSet::Scorers))
.run();
}
bevy版本和MSRV
当前版本的big-brain
与bevy
0.12.1兼容。
big-brain
的最低支持Rust版本应与bevy
的版本相同,截至撰写本文时是“最新稳定版本”。
反射
所有相关的big-brain
类型都实现了bevy Reflect
特质,因此在使用类似bevy_inspector_egui
(链接)的工具时,你应该能够获得一些有用的显示信息。
这种实现不应被视为稳定,并且可见的各个字段可能在任何时候更改,且不计入semver。请仅将此功能用于调试。
贡献
- 安装最新的Rust工具链(稳定支持)。
cargo运行 --示例thirst
- 祝您快乐编程!
许可证
本项目采用Apache-2.0许可证。
依赖项
~23MB
~426K SLoC