30个版本

0.14.1 2024年8月2日
0.14.0 2024年7月4日
0.14.0-rc.42024年6月27日
0.13.1 2024年3月18日
0.3.0 2020年11月3日

游戏开发中排名第2287

Download history 11610/week @ 2024-05-02 11025/week @ 2024-05-09 11534/week @ 2024-05-16 12001/week @ 2024-05-23 12831/week @ 2024-05-30 11596/week @ 2024-06-06 11338/week @ 2024-06-13 11048/week @ 2024-06-20 10786/week @ 2024-06-27 13122/week @ 2024-07-04 14815/week @ 2024-07-11 17026/week @ 2024-07-18 19142/week @ 2024-07-25 16903/week @ 2024-08-01 21859/week @ 2024-08-08 19565/week @ 2024-08-15

每月下载量80,000
118个工具包使用(通过bevy_internal

MIT/Apache

7.5MB
136K SLoC

Bevy glTF

License Crates.io Downloads Docs Discord


lib.rs:

提供AssetLoader和类型定义,用于在Bevy中加载glTF 2.0(一种标准的3D场景定义格式)文件。

glTF 2.0规范定义了glTF文件的格式。

快速入门

以下是创建简单glTF场景的方法


fn spawn_gltf(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.spawn(SceneBundle {
        // This is equivalent to "models/FlightHelmet/FlightHelmet.gltf#Scene0"
        // The `#Scene0` label here is very important because it tells bevy to load the first scene in the glTF file.
        // If this isn't specified bevy doesn't know which part of the glTF file to load.
        scene: asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/FlightHelmet/FlightHelmet.gltf")),
        // You can use the transform to give it a position
        transform: Transform::from_xyz(2.0, 0.0, -5.0),
        ..Default::default()
    });
}

加载glTF资产的部分

使用Gltf

如果您想访问资产的一部分,可以使用AssetServer加载整个Handle<Gltf>。一旦加载了该Handle<Gltf>,就可以使用它来访问其命名部分。


// Holds the scene handle
#[derive(Resource)]
struct HelmetScene(Handle<Gltf>);

fn load_gltf(mut commands: Commands, asset_server: Res<AssetServer>) {
    let gltf = asset_server.load("models/FlightHelmet/FlightHelmet.gltf");
    commands.insert_resource(HelmetScene(gltf));
}

fn spawn_gltf_objects(
    mut commands: Commands,
    helmet_scene: Res<HelmetScene>,
    gltf_assets: Res<Assets<Gltf>>,
    mut loaded: Local<bool>,
) {
    // Only do this once
    if *loaded {
        return;
    }
    // Wait until the scene is loaded
    let Some(gltf) = gltf_assets.get(&helmet_scene.0) else {
        return;
    };
    *loaded = true;

    commands.spawn(SceneBundle {
        // Gets the first scene in the file
        scene: gltf.scenes[0].clone(),
        ..Default::default()
    });

    commands.spawn(SceneBundle {
        // Gets the scene named "Lenses_low"
        scene: gltf.named_scenes["Lenses_low"].clone(),
        transform: Transform::from_xyz(1.0, 2.0, 3.0),
        ..Default::default()
    });
}

资产标签

glTF加载器允许您指定标签,以针对glTF的特定部分进行定位。

当使用此功能时请小心,如果您拼写标签错误,它将简单地忽略它而不发出警告。

您可以使用GltfAssetLabel来确保您使用的是正确的标签。

依赖关系

~24–61MB
~1M SLoC