8个版本 (重大更新)
0.7.0 | 2024年7月23日 |
---|---|
0.6.0 | 2024年7月6日 |
0.5.0 | 2024年2月18日 |
0.4.1 | 2024年1月14日 |
0.1.0 | 2023年6月26日 |
#292 in 游戏开发
每月291次下载
在landmass_oxidized_navigat…中使用
430KB
12K SLoC
bevy_landmass
Bevy的插件,方便使用landmass。
概述
bevy_landmass
允许使用导航网格来确定使用路径查找的角色所需的移动方向。
要使用bevy_landmass
- 将
LandmassPlugin
添加到您的应用程序中。 - 创建一个具有
Archipelago
组件的实体。 - 创建一个具有
IslandBundle
、TransformBundle
(或任何包含Transform
和GlobalTransform
的捆绑包)和IslandNavMesh
组件的实体。 - 创建具有
AgentBundle
和TransformBundle
(或任何包含Transform
和GlobalTransform
的捆绑包)的实体。
请注意,Archipelago
可以在代理/岛屿已经具有对它的ArchipelagoRef
引用之后创建。代理/岛屿将在Archipelago
存在后添加。
示例
use std::sync::Arc;
use bevy::{app::AppExit, prelude::*};
use bevy_landmass::prelude::*;
fn main() {
App::new()
.add_plugins(MinimalPlugins)
.add_plugins(AssetPlugin::default())
.add_plugins(TransformPlugin)
.add_plugins(Landmass2dPlugin::default())
.add_systems(Startup, set_up_scene)
.add_systems(Update, print_desired_velocity.after(LandmassSystemSet::Output))
.add_systems(Update, quit.after(print_desired_velocity))
.run();
}
fn set_up_scene(
mut commands: Commands,
mut nav_meshes: ResMut<Assets<NavMesh2d>>,
) {
let archipelago_id = commands.spawn(Archipelago2d::new()).id();
let nav_mesh_handle = nav_meshes.reserve_handle();
commands
.spawn((
TransformBundle::default(),
Island2dBundle {
island: Island,
archipelago_ref: ArchipelagoRef2d::new(archipelago_id),
nav_mesh: nav_mesh_handle.clone(),
},
));
// The nav mesh can be populated in another system, or even several frames
// later.
let nav_mesh = Arc::new(NavigationMesh2d {
vertices: vec![
Vec2::new(1.0, 1.0),
Vec2::new(2.0, 1.0),
Vec2::new(2.0, 2.0),
Vec2::new(1.0, 2.0),
Vec2::new(2.0, 3.0),
Vec2::new(1.0, 3.0),
Vec2::new(2.0, 4.0),
Vec2::new(1.0, 4.0),
],
polygons: vec![
vec![0, 1, 2, 3],
vec![3, 2, 4, 5],
vec![5, 4, 6, 7],
],
polygon_type_indices: vec![0, 0, 0],
}.validate().expect("is valid"));
nav_meshes.insert(&nav_mesh_handle, NavMesh2d{
nav_mesh,
type_index_to_node_type: Default::default(),
});
commands.spawn((
TransformBundle {
local: Transform::from_translation(Vec3::new(1.5, 1.5, 0.0)),
..Default::default()
},
Agent2dBundle {
agent: Agent {
radius: 0.5,
desired_speed: 1.0,
max_speed: 2.0,
},
archipelago_ref: ArchipelagoRef2d::new(archipelago_id),
target: AgentTarget2d::Point(Vec2::new(1.5, 3.5)),
velocity: Default::default(),
state: Default::default(),
desired_velocity: Default::default(),
}
));
}
fn print_desired_velocity(query: Query<(Entity, &AgentDesiredVelocity2d)>) {
for (entity, desired_velocity) in query.iter() {
println!(
"entity={:?}, desired_velocity={}",
entity,
desired_velocity.velocity());
}
}
fn quit(mut exit: EventWriter<AppExit>) {
// Quit so doctests pass.
exit.send(AppExit::Success);
}
许可协议
在以下任一许可协议下使用
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据Apache-2.0许可协议定义,应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~39–76MB
~1.5M SLoC