4个版本

0.0.4 2024年7月23日
0.0.3 2024年3月10日
0.0.2 2023年12月3日
0.0.1 2023年7月16日

#58 in 游戏开发

Download history 36/week @ 2024-05-04 46/week @ 2024-05-11 76/week @ 2024-05-18 51/week @ 2024-05-25 73/week @ 2024-06-01 75/week @ 2024-06-08 102/week @ 2024-06-15 117/week @ 2024-06-22 83/week @ 2024-06-29 80/week @ 2024-07-06 58/week @ 2024-07-13 149/week @ 2024-07-20 109/week @ 2024-07-27 70/week @ 2024-08-03 74/week @ 2024-08-10 43/week @ 2024-08-17

310 每月下载次数
用于 foxtrot

MIT/Apache

63KB
1.5K SLoC

bevy_dolly

静态 固定
bevy dolly static bevy dolly pinned
link to crates.io link to docs.rs link to license downloads/link to crates.io stars/github repo github actions tracking bevy release branch

概述

bevy_dolly 是为 Bevy 游戏引擎构建的一个原型插件。它利用了由 h3r2tic 开发的强大 dolly 包,以控制Bevy应用中的相机移动。

[!警告]
请注意,bevy_dolly 的API仍在修订中。对其人体工程学和发展者体验(DX)的反馈非常受欢迎。

Dolly和相机移动

重要的是要知道,dolly 全部关于控制相机的移动方式,而不是改变相机本身。这意味着您可以用它来做其他事情,比如使炮塔及其炮管移动。

Dolly操作分为两个基本步骤

  1. 创建一个装置:定义一个 Rig,其中包含dolly可以利用的驱动器。这些驱动器可以控制平移、旋转、约束和作为抽象的自定义行为。这些装置作为工具来塑造相机的行为并提供了额外的功能。

  2. 标记组件:在相机和装置(装置组件标记)上注册一个标记组件。这允许您通过更改相关的装置组件标记来轻松切换相机实体的行为。要更好地理解这个过程,请参阅示例

理解驱动器

驱动器是影响相机行为的机制。它们可以代表约束或提供额外的功能。要探索可用的驱动器,请参阅示例

在您的 Cargo.toml

[dependencies]
# Your bevy dependency here ... 
# bevy = "0.14"
bevy_dolly = { version = "0.0.4" }

在您的Bevy应用中

// The component tag used to parent to a Dolly Rig
#[derive(Component)]
struct MainCamera;

fn main() {
  App::new()
    .add_plugins(DefaultPlugins)
    //..
    .add_systems(Startup, setup)
    .add_systems(Update, Dolly::<MainCamera>::update_active)
    .add_systems(Update, update_input)
    //..
    .run();
}

在设置系统中

// In your setup system
fn setup(
  mut commands: Commands,
) {
  commands.spawn((
    MainCamera, // The rig component tag 
    Rig::builder() // The rig itself
      .with(Position::new(Vec3::ZERO)) // Start position
      // Adds a driver with the method rotate_yaw_pitch
      .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-30.0)) 
      // Interpolation when the translation is updated, also known as smoothing
      .with(Smooth::new_position(0.3)) 
      // Interpolation when the rotation is updated (updated via the YawPitch driver)
      .with(Smooth::new_rotation(0.3)) 
      // Moves the camera point out in the Z direction and uses the position as the pivot
      .with(Arm::new(Vec3::Z * 4.0)) 
      .build(),
    Camera3dBundle::default(), // The camera which is related via the rig tag 
  ));
}

以及您的运行时以更新装置

fn update_input(
  mut commands: Commands,
  keys: Res<Input<KeyCode>>,
  mut rig_q: Query<&mut Rig>,
) {
  let mut rig = rig_q.single_mut();
  if let Some(yaw_pitch) = rig.try_driver_mut::<YawPitch>() {
      if keys.just_pressed(KeyCode::Z) {
          yaw_pitch.rotate_yaw_pitch(-90.0, 0.0);
      }
  }
}

辅助插件

bevy_dolly 默认提供了一些辅助插件,当将 bevy_dolly 作为依赖项设置时,如果不需要,可以将其删除。

[dependencies]
bevy_dolly = { version = "0.0.4", default-features = false }

要重新包含驱动器,请将 features = ["drivers"], 添加到依赖项中。

示例展示

示例仓库中探索实际示例。

运行示例

如果您已克隆项目并想测试,请执行以下命令以运行orbit示例

cargo run --release --example orbit

兼容性和支持

bevy bevy_dolly
0.14 0.0.4
0.13 0.0.3
0.12 0.0.2
0.11 0.0.1

替代方案

探索其他可能满足您需求的Bevy相机控制器

许可

该项目受MIT和Apache 2.0双许可协议保护。请自由在许可范围内做出贡献。

贡献

是的,这个项目仍然是WIP,因此PR非常受欢迎。

[!NOTE]
请注意,使用的dolly依赖项是一个略微修补的子模块,以允许使用原生的Bevy变换类型。要本地构建crate,请运行

git submodule update --init --recursive

然后是

cd dolly
git checkout bevy_0.14

依赖项

~33–72MB
~1.5M SLoC