#bevy #bevy-plugin #graphics #gamedev #game-engine #2d-game

bevy_despawn_particles

Bevy 游戏引擎的一个基于事件插件的插件,用于在对象销毁时生成粒子,这些粒子由原始纹理构建

11 个版本

0.2.0 2024年7月17日
0.1.0 2024年3月17日
0.1.0-pre.92024年2月19日
0.1.0-pre.52023年11月9日
0.1.0-pre.12023年7月31日

#139 in 游戏开发

Download history 7/week @ 2024-06-28 53/week @ 2024-07-05 88/week @ 2024-07-12 22/week @ 2024-07-19 80/week @ 2024-07-26 11/week @ 2024-08-02

175 每月下载量

Unlicense

78KB
1K SLoC

Bevy 游戏引擎的一个基于事件插件的插件,提供了一种简单的方法来为 2D 精灵添加销毁效果。包含基本的物理实现或与 bevy_rapier 集成的功能。

use bevy::prelude::*;
use bevy_despawn_particles::prelude::*;

#[derive(Component, Default)]
pub struct Marker;

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

fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.spawn(Camera2dBundle::default());
    commands
        .spawn(SpriteBundle {
            texture: asset_server.load("asteroid_round.png"),
            ..default()
        })
        .insert(Marker);
}

fn despawn(
    mut despawn_particles_event_writer: EventWriter<DespawnParticlesEvent>,
    entities: Query<Entity, Added<Marker>>,
) {
    if let Ok(entity) = entities.get_single() {
        despawn_particles_event_writer.send(
            DespawnParticlesEvent::builder()
                .with_fade(true) // The particles will fade as they get closer to expiration
                .with_shrink(true) // The particles will shrink as they get closer to expiration
                .with_linvel(150.0..300.0) // Random velocity between 150.0 and 300.0
                .with_angvel([-5.0, -2.5, 2.5, 5.0]) // Random angular velocity from the given list
                .with_mass(1.0) // Always 1.0
                .with_lifetime(0.3..1.0) // Random lifetime between 0.3 and 1.0
                .with_angular_damping(1.0) // Always 1.0, angular 'friction' that decelerates the particle
                .with_linear_damping(1.0) // Always 1.0, linear 'friction' that decelerates the particle
                .build(entity),
        );
    }
}

示例

以下所有示例均可在本仓库的示例目录中找到。

cargorun --release --examplethe_works
此示例使用了大多数可用参数。粒子逐渐消失并缩小,质量受重力影响,向外射出,并具有一定角速度和阻尼。
works

cargorun --release --examplefade
在此示例中,粒子静止不动,仅逐渐消失,产生整个精灵逐渐消失的视觉效果
fade

cargorun --release --exampleshrink
在此示例中,粒子静止不动,仅在其位置缩小
shrink
cargorun --release --examplevelocity
在此示例中,粒子从精灵向外射出
velocity
cargorun --release --examplemesh
可用于 Mesh。还包括使用伪圆形网格的用法,以替换通常构成圆形网格的三角形
Screencast from 2023-07-19 20-55-22

依赖项

~35–74MB
~1.5M SLoC