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 游戏开发
310 每月下载次数
用于 foxtrot
63KB
1.5K SLoC
bevy_dolly
概述
bevy_dolly
是为 Bevy 游戏引擎构建的一个原型插件。它利用了由 h3r2tic 开发的强大 dolly
包,以控制Bevy应用中的相机移动。
[!警告]
请注意,bevy_dolly
的API仍在修订中。对其人体工程学和发展者体验(DX)的反馈非常受欢迎。
Dolly和相机移动
重要的是要知道,dolly
全部关于控制相机的移动方式,而不是改变相机本身。这意味着您可以用它来做其他事情,比如使炮塔及其炮管移动。
Dolly操作分为两个基本步骤
-
创建一个装置:定义一个
Rig
,其中包含dolly可以利用的驱动器。这些驱动器可以控制平移、旋转、约束和作为抽象的自定义行为。这些装置作为工具来塑造相机的行为并提供了额外的功能。 -
标记组件:在相机和装置(装置组件标记)上注册一个标记组件。这允许您通过更改相关的装置组件标记来轻松切换相机实体的行为。要更好地理解这个过程,请参阅示例。
理解驱动器
驱动器是影响相机行为的机制。它们可以代表约束或提供额外的功能。要探索可用的驱动器,请参阅示例。
在您的 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相机控制器
- bevy_fps_controller - 一个具有蹲下、冲刺、飞行模式等功能的Fps控制器
- smooth-bevy-cameras - 3个平滑相机控制器:Fps、Orbit或Unreal
- bevy_spectator - 一个观众相机控制器
- bevy_flycam - 一个简单的飞行相机
- bevy_fly_camera - 一个高级飞行相机
- bevy_pancam - 2D点击和拖动风格的相机移动
- bevy_config_cam - 一个插件,允许在运行时使用不同的相机控制器,使用bevy_dolly作为后端
许可
该项目受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