30个版本
0.14.1 | 2024年8月2日 |
---|---|
0.14.0 | 2024年7月4日 |
0.14.0-rc.4 | 2024年6月27日 |
0.13.1 | 2024年3月18日 |
0.3.0 | 2020年11月3日 |
在游戏开发中排名第2287
每月下载量80,000
被118个工具包使用(通过bevy_internal)
7.5MB
136K SLoC
Bevy glTF
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