#game #game-engine #bevy-plugin #boids #add #aims #boid

bevoids

bevoids 是一个旨在让群体行为(boids)更容易添加到你的游戏中的 bevy 插件,不会牺牲控制性。

1 个不稳定版本

0.1.0 2024 年 2 月 20 日

#607游戏开发

MIT 许可证

4.5MB
346

Bevoids

一个旨在让群体行为(boids)更容易添加到你的游戏中的 工作状态(WIP) bevy 插件。

Gif showing 2d boids

如何使用

我建议查看 示例,了解如何使用 bevoids。

添加插件并配置

为了让插件工作,你需要注册它。

你还需要添加 BoidsConfig 资源,在那里你配置空间(2d 或 3d),并启用/禁用调试

fn main() {
    App::new()
        .add_plugins((DefaultPlugins, BoidsPlugin))
        .insert_resource(BoidsConfig {
            space: BoidSpace::TwoDimensional,
            debug: false,
        })
        .run();
}

创建群体实体

要创建群体实体,将 Boid 组件添加到你的实体中

commands.spawn((
      MaterialMesh2dBundle {
          mesh: meshes
              .add(shape::RegularPolygon::new(10.0, 3).into())
              .into(),
          material: materials.add(ColorMaterial::from(Color::WHITE)),
          transform: Transform::from_xyz(x as f32 * spacer, y as f32 * spacer, 0.0),
          ..default()
      },
      Boid::new(
          BoidSpeed::new(BOID_MIN_SPEED, BOID_MAX_SPEED),
          BoidTurningStrength::new(
              BOID_COHESION,
              BOID_SEPARATION,
              BOID_ALIGNMENT,
              BOID_BORDER_TURN_STRENGTH,
          ),
          BoidViewConfig::new(BOID_FOV, BOID_PROTECTED_RANGE, BOID_VIEW_RANGE),
      )
  ));
}

限制群体移动范围

如果你想让群体只在限制区域内移动,请添加 BoidBorder 组件到其中。

组件工作原理如下

它有 6 个参数;左、右、上等... 每个参数都是 Option<(f32, f32)>,其中第一个 f32 表示边界的位置,第二个表示当群体开始转向时的边界。

每一边都是可选的,以供你选择限制的位置。例如,你可以只限制顶部和底部,为能够自由翱翔整个世界的鸟类提供限制!

commands.spawn((
        MaterialMesh2dBundle {
            mesh: meshes
                .add(shape::RegularPolygon::new(10.0, 3).into())
                .into(),
            material: materials.add(ColorMaterial::from(Color::WHITE)),
            transform: Transform::from_xyz(x as f32 * spacer, y as f32 * spacer, 0.0),
            ..default()
        },
        Boid::new(
            BoidSpeed::new(BOID_MIN_SPEED, BOID_MAX_SPEED),
            BoidTurningStrength::new(
                BOID_COHESION,
                BOID_SEPARATION,
                BOID_ALIGNMENT,
                BOID_BORDER_TURN_STRENGTH,
            ),
            BoidViewConfig::new(BOID_FOV, BOID_PROTECTED_RANGE, BOID_VIEW_RANGE),
        ),
        BoidBorder {
            left: Some((-BORDER_WIDTH / 2.0, BORDER_MARGIN)),
            right: Some((BORDER_WIDTH / 2.0, BORDER_MARGIN)),
            top: Some((BORDER_HEIGHT / 2.0, BORDER_MARGIN)),
            bottom: Some((-BORDER_HEIGHT / 2.0, BORDER_MARGIN)),
            front: None,
            back: None,
        },
    ));
}

示例

示例名称 场景
simple2d 一个简单的 2d 场景,包含 400 个群体。
simple3d 一个简单的 3d 场景,包含 1000 个群体。

要运行示例,请执行 cargo run --example <example-name>

许可证

此插件采用 MIT 许可证。

版权 (c) 2024 Daniel Kalstad

以下条件,任何人获取本软件及其相关文档副本(“软件”)的副本,均可免费处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人这样做,前提是

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途适用性或非侵权的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,以及这些责任是否源于、源于或与软件或其使用或其他与软件相关的行为有关。

致谢

我完全独立制作了这个插件,但以下是我参考的一些网站

依赖项

~18–46MB
~721K SLoC