Rust游戏开发工具库bevy_dev_tools的使用:Bevy引擎高效调试与开发辅助插件

Rust游戏开发工具库bevy_dev_tools的使用:Bevy引擎高效调试与开发辅助插件

简介

bevy_dev_tools是Bevy游戏引擎的一个开发者工具库,提供了一系列高效的调试和开发辅助功能。它包含以下主要特性:

  • 实体检查器
  • 性能分析工具
  • 场景管理工具
  • 热重载支持

安装

在项目目录中运行以下Cargo命令:

cargo add bevy_dev_tools

或在Cargo.toml中添加:

bevy_dev_tools = "0.16.1"

使用示例

下面是内容中提供的示例代码:

use bevy::prelude::*;
use bevy_dev_tools::DevToolsPlugin;

fn main() {
    App::new()
        // 添加Bevy默认插件
        .add_plugins(DefaultPlugins)
        // 添加DevTools插件
        .add_plugins(DevToolsPlugin)
        // 添加你的游戏系统
        .add_systems(Startup, setup)
        .run();
}

fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
) {
    // 添加一个简单的3D场景
    commands.spawn(PbrBundle {
        mesh: meshes.add(Mesh::from(shape::Plane::from_size(5.0))),
        material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()),
        ..default()
    });
    
    commands.spawn(PbrBundle {
        mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
        material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
        transform: Transform::from_xyz(0.0, 0.5, 0.0),
        ..default()
    });
    
    // 添加光源
    commands.spawn(PointLightBundle {
        point_light: PointLight {
            intensity: 1500.0,
            shadows_enabled: true,
            ..default()
        },
        transform: Transform::from_xyz(4.0, 8.0, 4.0),
        ..default()
    });
    
    // 添加相机
    commands.spawn(Camera3dBundle {
        transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
}

完整示例demo

下面是一个更完整的示例,展示如何使用bevy_dev_tools的各种功能:

use bevy::prelude::*;
use bevy_dev_tools::DevToolsPlugin;

fn main() {
    App::new()
        // 添加Bevy默认插件
        .add_plugins(DefaultPlugins)
        // 添加DevTools插件
        .add_plugins(DevToolsPlugin)
        // 添加你的游戏系统
        .add_systems(Startup, setup)
        .add_systems(Update, (keyboard_input_system, rotate_cube))
        .run();
}

// 设置场景
fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
    asset_server: Res<AssetServer>,
) {
    // 添加平面
    commands.spawn(PbrBundle {
        mesh: meshes.add(Mesh::from(shape::Plane::from_size(5.0))),
        material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()),
        ..default()
    });
    
    // 添加可旋转的立方体
    commands.spawn((
        PbrBundle {
            mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
            material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
            transform: Transform::from_xyz(0.0, 0.5, 0.0),
            ..default()
        },
        Rotatable, // 标记为可旋转的实体
    ));
    
    // 添加光源
    commands.spawn(PointLightBundle {
        point_light: PointLight {
            intensity: 1500.0,
            shadows_enabled: true,
            ..default()
        },
        transform: Transform::from_xyz(4.0, 8.0, 4.0),
        ..default()
    });
    
    // 添加相机
    commands.spawn(Camera3dBundle {
        transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
}

// 可旋转标记组件
#[derive(Component)]
struct Rotatable;

// 旋转立方体的系统
fn rotate_cube(
    time: Res<Time>,
    mut query: Query<&mut Transform, With<Rotatable>>,
) {
    for mut transform in &mut query {
        transform.rotate_y(time.delta_seconds());
    }
}

// 处理键盘输入的系统
fn keyboard_input_system(
    keys: Res<Input<KeyCode>>,
    mut toggle: Local<bool>,
) {
    if keys.just_pressed(KeyCode::F1) {
        println!("按F1键打开实体检查器");
    }
    
    if keys.just_pressed(KeyCode::F2) {
        println!("按F2键打开性能分析面板");
    }
    
    if keys.just_pressed(KeyCode::F3) {
        println!("按F3键打开场景管理工具");
    }
    
    if keys.just_pressed(KeyCode::T) {
        *toggle = !*toggle;
        println!("热重载功能状态: {}", *toggle);
    }
}

主要功能

  1. 实体检查器:按F1键打开实体检查器,查看和编辑场景中的所有实体和组件。

  2. 性能分析:按F2键打开性能分析面板,查看帧率和系统执行时间。

  3. 场景管理:按F3键打开场景管理工具,可以保存和加载场景状态。

  4. 热重载:支持资源的热重载,修改资源文件后会自动重新加载。

许可证

bevy_dev_tools采用双重许可:

  • MIT许可证
  • Apache 2.0许可证

1 回复

Bevy_dev_tools:Bevy引擎高效调试与开发辅助插件

简介

bevy_dev_tools 是一个为 Bevy 游戏引擎设计的开发工具库,旨在提高开发效率和简化调试过程。它为 Bevy 开发者提供了一系列实用功能,包括场景检查、实体操作、性能监控等。

安装方法

在项目的 Cargo.toml 中添加依赖:

[dependencies]
bevy = "0.11"
bevy_dev_tools = "0.11"  # 确保版本与bevy主版本匹配

主要功能及使用示例

1. 场景检查器

use bevy::prelude::*;
use bevy_dev_tools::DevToolsPlugin;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(DevToolsPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(Camera2dBundle::default());
    commands.spawn(SpriteBundle {
        sprite: Sprite {
            color: Color::RED,
            custom_size: Some(Vec2::new(100.0, 100.0)),
            ..default()
        },
        ..default()
    });
}

运行后按 F1 键可以打开场景检查器,查看所有实体和组件。

2. 实体选择工具

use bevy_dev_tools::DevPickable;

fn setup(mut commands: Commands) {
    commands.spawn((
        SpriteBundle {
            sprite: Sprite {
                color: Color::RED,
                custom_size: Some(Vec2::new(100.0, 100.0)),
                ..default()
            },
            ..default()
        },
        DevPickable,  // 添加此组件使实体可选择
    ));
}

添加 DevPickable 组件后,可以在场景检查器中点击选择实体。

3. 性能监控

use bevy_dev_tools::DevStatsPlugin;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(DevStatsPlugin)  // 添加性能监控插件
        .run();
}

添加 DevStatsPlugin 后,按 F2 可以显示帧率、内存使用等性能指标。

4. 热重载功能

use bevy_dev_tools::DevHotReloadPlugin;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(DevHotReloadPlugin::new("assets"))  // 监控assets目录变化
        .run();
}

设置后,修改assets目录中的资源文件会自动重新加载。

5. 调试绘制

use bevy_dev_tools::DevDebugDrawPlugin;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(DevDebugDrawPlugin)  // 添加调试绘制功能
        .run();
}

fn debug_draw_system(mut gizmos: Gizmos) {
    gizmos.circle_2d(Vec2::ZERO, 50.0, Color::GREEN);  // 绘制调试圆形
}

高级配置

可以自定义工具的行为:

use bevy_dev_tools::{DevToolsPlugin, DevToolsConfig};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(DevToolsPlugin {
            config: DevToolsConfig {
                inspector_key: KeyCode::F3,  // 修改打开检查器的快捷键
                stats_key: KeyCode::F4,      // 修改性能面板快捷键
                ..default()
            },
        })
        .run();
}

完整示例代码

下面是一个整合了bevy_dev_tools主要功能的完整示例:

use bevy::prelude::*;
use bevy_dev_tools::{
    DevToolsPlugin, DevPickable, DevStatsPlugin, 
    DevHotReloadPlugin, DevDebugDrawPlugin
};

fn main() {
    App::new()
        // 添加Bevy默认插件
        .add_plugins(DefaultPlugins)
        
        // 添加开发工具插件
        .add_plugins(DevToolsPlugin)  // 场景检查器
        .add_plugins(DevStatsPlugin)  // 性能监控
        .add_plugins(DevHotReloadPlugin::new("assets"))  // 热重载
        .add_plugins(DevDebugDrawPlugin)  // 调试绘制
        
        // 自定义工具配置
        .insert_resource(DevToolsConfig {
            inspector_key: KeyCode::F1,
            stats_key: KeyCode::F2,
            ..default()
        })
        
        // 添加系统
        .add_systems(Startup, setup)
        .add_systems(Update, debug_draw_system)
        .run();
}

fn setup(mut commands: Commands) {
    // 添加2D相机
    commands.spawn(Camera2dBundle::default());
    
    // 创建一个可选择的可视实体
    commands.spawn((
        SpriteBundle {
            sprite: Sprite {
                color: Color::RED,
                custom_size: Some(Vec2::new(100.0, 100.0)),
                ..default()
            },
            transform: Transform::from_xyz(0.0, 0.0, 0.0),
            ..default()
        },
        DevPickable,  // 使实体可选择
    ));
    
    // 创建一个普通实体
    commands.spawn(SpriteBundle {
        sprite: Sprite {
            color: Color::BLUE,
            custom_size: Some(Vec2::new(50.0, 50.0)),
            ..default()
        },
        transform: Transform::from_xyz(100.0, 0.0, 0.0),
        ..default()
    });
}

// 调试绘制系统
fn debug_draw_system(mut gizmos: Gizmos) {
    // 在原点绘制一个绿色圆形
    gizmos.circle_2d(Vec2::ZERO, 50.0, Color::GREEN);
    
    // 绘制一条调试线
    gizmos.line_2d(Vec2::new(-100.0, 0.0), Vec2::new(100.0, 0.0), Color::YELLOW);
}

注意事项

  1. 建议仅在开发环境中使用,发布时应移除这些插件
  2. 插件版本需要与Bevy主版本匹配
  3. 某些功能可能会影响性能,只在需要时启用

bevy_dev_tools 可以显著提升Bevy开发的效率和调试体验,特别是对于复杂场景的管理和性能优化有很大帮助。

回到顶部