#gltf #bevy #edit #mesh #traits #material #loading

bevy_gltf_trait

可自定义的Bevy引擎GLTF加载

1个不稳定版本

0.1.1 2024年7月8日
0.1.0 2024年7月8日

#556 in 游戏开发

MIT/Apache

145KB
2.5K SLoC

Bevy glTF 特性

这是bevy /crates/bevy_gltf 的分支,它不改变任何功能,但提供了使用特性 GltfTrait 在加载时自定义gltf与bevy内部转换的几种可能性的方式。

特性功能

  • 设置扩展 default: &["gltf", "glb"]
  • 材质
    • 更改所使用的 Material
    • 或者仅编辑 StandardMaterial
  • 网格
    • 编辑任何 Mesh
    • 编辑它们的 EntityWorldMut (类似于 EntityCommands
    • 编辑它们的父级 TransformEntityWorldMut
  • 灯光
    • 编辑它们的 SpotLightPointLightDirectionalLight 组件
    • 编辑它们的 EntityWorldMut
    • 编辑它们的父级 TransformEntityWorldMut
  • 编辑 App

注意

  • 如果您想通过特性插入组件,并且它们对bevy_gltf来说是外来的
    • 请确保使用 on_app 通过 .register_type() 注册它们
  • 提供的gltf结构体使得能够对自定义的gltf属性做出反应

示例

添加插件的原始方式改为

fn main(){
    let mut app = App::new();
    app.add_plugins((
        MinimalPlugins,
        GltfPlugin::<()>::default(),
        // ...
    ));
    app.run();
}

..并且可以使用特性进行修改,以 替换扩展 (使用不同的扩展)场景导入。

#[derive(Reflect,Default)]
struct WhiteGltf;
impl GltfTrait for WhiteGltf {
    const EXTENSIONS: &'static [&'static str] = &["myglb"];
    type Material = StandardMaterial;        
    fn convert_material (mut convert:GltfTraitMaterial) -> Self::Material {
        convert.material.base_color = Color::WHITE;
        convert.material.base_color_texture = None;
        convert.material
    }
}

fn main(){
    let mut app = App::new();
    app.add_plugins((
        DefaultPlugins,
        GltfPlugin::<WhiteGltf>::default()
    ));
    app.run();
}

Bevy支持表

bevy bevy_gltf_trait
0.14 0.1

依赖

~32–69MB
~1M SLoC