跳至内容

起步

Bevy是一个使用Rust编写的高效,易于使用且编译快速的数据驱动游戏引擎。它基于ECS(Entity-Component-System,实体-组件-系统)的范例并允许定义插件,即具有共同目标的成套组件、系统和资源。

bevy_rapier2dbevy_rapier3d库通过使用Bevy的插件系统集成了Rapier到Bevy当中。为了获取bevy-rapier最好的效果,多个特性可被选择性启用:

  • debug-render-2d/debug-render-3d: 启用调试渲染插件
  • simd-stable: 使用wide启用严格的SIMD优化。有受限的跨平台支持但是可以与稳定版的Rust编译器一同使用。
  • simd-nightly: 使用packed_simd启用严格的SIMD优化。有极好的跨平台支持但是需要与nightly版Rust编译器一同使用。
  • parallel: 使用rayon启用物理管线的并行。
  • serde-serialize: 使用serde启用物理组件的序列化。
  • enhanced-determinism: 可在严格执行 IEEE 754-2008 标准的所有 32 位和 64 位平台上实现跨平台确定性(假设代码的其他部分也是确定性的)。这包括大多数现代处理器和 WASM 目标机。
  • wasm-bindgen: 启用rapier作为WASM库的一个依赖使用,通过wasm-bindgen编译。

Cargo示例

为了使用这些库,第一步是在你的Cargo.toml中添加一个依赖:

[dependencies]
# TODO: 使用最新的版本号替代“*”。
bevy = "*"
bevy_rapier2d = "*"

如果你需要启用一些Rapier特性,像SIMD,parallelism,serialization或者determinism,你可以在bevy_rapier上直接启用它们。

[dependencies]
# TODO: 使用最新的版本号替代“*”。
bevy = "*"
bevy_rapier2d = { version = "*", features = [ "simd-stable", "debug-render-2d" ] }

基本模拟示例

下面是main.rs文件的一个基本示例。它创建了一个在固定地面上弹跳的球。有关本示例中使用的元素的详细信息,请参阅本指南的后续章节。

use bevy::prelude::*;
use bevy_rapier2d::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(100.0))
.add_plugins(RapierDebugRenderPlugin::default())
.add_systems(Startup, setup_graphics)
.add_systems(Startup, setup_physics)
.add_systems(Update, print_ball_altitude)
.run();
}
fn setup_graphics(mut commands: Commands) {
// Add a camera so we can see the debug-render.
commands.spawn(Camera2dBundle::default());
}
fn setup_physics(mut commands: Commands) {
/* Create the ground. */
commands
.spawn(Collider::cuboid(500.0, 50.0))
.insert(TransformBundle::from(Transform::from_xyz(0.0, -100.0, 0.0)));
/* Create the bouncing ball. */
commands
.spawn(RigidBody::Dynamic)
.insert(Collider::ball(50.0))
.insert(Restitution::coefficient(0.7))
.insert(TransformBundle::from(Transform::from_xyz(0.0, 400.0, 0.0)));
}
fn print_ball_altitude(positions: Query<&Transform, With<RigidBody>>) {
for transform in positions.iter() {
println!("Ball altitude: {}", transform.translation.y);
}
}

调试渲染器

bevy_rapier插件同时有一个调试渲染器(要么是debug-render-2d,要么是debug-render-3d)来帮助可视化物理引擎所看到的内容。这可以帮助修复一些漏洞,像碰撞箱没有合适地与你的图形表示对齐。调试渲染器会被启用于:

  1. 启用debug-render-2ddebug-render-3d的bevy-rapier的Cargo特性。
  2. 添加插件RapierDebugRenderPlugin到Bevy应用。