如何使用 Bevy 加载文件夹中的所有音频文件?
How can I load all the audio files inside a folder using Bevy?
我正在尝试制作一个音乐播放器,用户可以在其中播放文件夹中的任何音频文件。为此,我尝试生成包含 Music
组件和 Sound(Handle<AudioSource>)
组件的实体。在Bevy的例子中,我看到这行代码似乎就是我想要的:
// You can load all assets in a folder like this. They will be loaded in parallel without blocking
let _scenes: Vec<HandleUntyped> = asset_server.load_folder("models/monkey").unwrap();
下面是我写的函数:
fn load_audio(mut commands: Commands, asset_server: Res<AssetServer>, audio: Res<Audio>) {
let music = asset_server.load_folder("music").unwrap();
for song in music {
commands.spawn((
Music,
Sound(song),
));
}
}
此代码给出编译错误,因为 song
属于 HandleUntyped
类型。我的第一个想法是将 HandleUntyped
转换为 Handle<AudioSource>
。我不得不想象有某种方法可以做到这一点,否则 HanldeUntyped
将毫无用处,但通过查看 Bevy 文档我找不到任何方法来做到这一点。 Handle::<AudioSource>::from(song)
无效。我也考虑过使用 std::fs
库来获取目录中的所有音频文件并使用 Bevy 单独加载它们,但是 load_folder
方法的存在似乎暗示 Bevy 有一个更优雅的和简单的方法。
当然在放弃搜索并发布问题后,我立即找到了答案。 HandleUntyped
实现 typed()
函数,将其转换为类型化的 Handle
。我需要做的就是将 Sound(song)
替换为 Sound(song.typed())
.
我正在尝试制作一个音乐播放器,用户可以在其中播放文件夹中的任何音频文件。为此,我尝试生成包含 Music
组件和 Sound(Handle<AudioSource>)
组件的实体。在Bevy的例子中,我看到这行代码似乎就是我想要的:
// You can load all assets in a folder like this. They will be loaded in parallel without blocking
let _scenes: Vec<HandleUntyped> = asset_server.load_folder("models/monkey").unwrap();
下面是我写的函数:
fn load_audio(mut commands: Commands, asset_server: Res<AssetServer>, audio: Res<Audio>) {
let music = asset_server.load_folder("music").unwrap();
for song in music {
commands.spawn((
Music,
Sound(song),
));
}
}
此代码给出编译错误,因为 song
属于 HandleUntyped
类型。我的第一个想法是将 HandleUntyped
转换为 Handle<AudioSource>
。我不得不想象有某种方法可以做到这一点,否则 HanldeUntyped
将毫无用处,但通过查看 Bevy 文档我找不到任何方法来做到这一点。 Handle::<AudioSource>::from(song)
无效。我也考虑过使用 std::fs
库来获取目录中的所有音频文件并使用 Bevy 单独加载它们,但是 load_folder
方法的存在似乎暗示 Bevy 有一个更优雅的和简单的方法。
当然在放弃搜索并发布问题后,我立即找到了答案。 HandleUntyped
实现 typed()
函数,将其转换为类型化的 Handle
。我需要做的就是将 Sound(song)
替换为 Sound(song.typed())
.