13 个版本

0.0.13 2024 年 7 月 18 日
0.0.12 2024 年 3 月 19 日
0.0.6 2024 年 1 月 22 日
0.0.3 2023 年 11 月 17 日

#17 in #gltf

Download history 9/week @ 2024-04-22 6/week @ 2024-04-29 1/week @ 2024-05-13 3/week @ 2024-05-20 5/week @ 2024-05-27 13/week @ 2024-06-03 9/week @ 2024-06-10 3/week @ 2024-06-17 8/week @ 2024-06-24 69/week @ 2024-07-01 121/week @ 2024-07-15 20/week @ 2024-07-22 14/week @ 2024-07-29 83/week @ 2024-08-05

238 每月下载量
用于 bevy_vrm

MIT/Apache

365KB
10K SLoC

bevy_gltf_kun

Bevy gltf_kun 插件。

功能

  • 通过钩子处理 glTF 扩展
  • glTF 导入/导出
  • glXF 导入/导出

用法

将 [GltfKunPlugin] 添加到您的应用程序

use bevy::prelude::*;
use bevy_gltf_kun::GltfKunPlugin;

App::new().add_plugins((DefaultPlugins, GltfKunPlugin::default()));

导出

使用 GltfExportEvent 将场景导出到 glTF。

生成的 GltfExportResult 将包含一个灵活的 GltfDocument,可以导出到各种文件类型。有关如何操作的更多信息,请参阅 [gltf_kun]。

use bevy::prelude::*;
use bevy_gltf_kun::{
    extensions::DefaultExtensions,
    export::gltf::{GltfExportEvent, GltfExportResult}
};
use gltf_kun::io::format::glb::GlbExport;

fn export_scene(
    scenes: Query<&Handle<Scene>>,
    mut export: EventWriter<GltfExportEvent<DefaultExtensions>>,
    mut results: ResMut<Events<GltfExportResult>>,
    mut did_export: Local<bool>,
) {
    // Send an export event once.
    if !*did_export {
        if let Some(handle) = scenes.iter().next() {
            export.send(GltfExportEvent::new(handle.clone()));
            *did_export = true;
        }
    }

    // Listen for the result.
    for mut event in results.drain() {
        let doc = event.result.unwrap();
        let bytes = GlbExport::<DefaultExtensions>::export(&mut event.graph, &doc);
    }
}

App::new().add_systems(Update, export_scene);

导入

使用 GltfKun 资产导入 glTF。

use bevy::prelude::*;
use bevy_gltf_kun::import::gltf::{GltfKun, scene::GltfScene};

fn import_gltf(
    asset_server: Res<AssetServer>,
    gltf_kun_assets: Res<Assets<GltfKun>>,
    gltf_scene_assets: Res<Assets<GltfScene>>,
    mut commands: Commands,
    mut handle: Local<Option<Handle<GltfKun>>>,
    mut did_import: Local<bool>,
) {
    if *did_import {
        return;
    }

    // Load the asset.
    if handle.is_none() {
        *handle = Some(asset_server.load::<GltfKun>("model.gltf"));
    }

    let handle = handle.as_ref().unwrap();

    let gltf = match gltf_kun_assets.get(handle) {
        Some(a) => a,
        None => return,
    };

    // Spawn the first scene.
    let gltf_scene = gltf_scene_assets.get(&gltf.scenes[0]).unwrap();
    commands.spawn(SceneBundle { scene: gltf_scene.scene.clone(), ..default() });

    *did_import = true;
}

App::new().add_systems(Update, import_gltf);

依赖项

~38–76MB
~1.5M SLoC