1

我正在使用资产包来加载本地化的 VO。这些 VO 文件可能是 .wavs 或 .oggs,在加载文件之前指定哪个是不可行的。从资源加载默认文件时这很好,因为 Unity 不需要文件扩展名。但是,当从 Asset Bundle 加载本地化文件时,如果文件扩展名未包含在加载调用中,则无法找到该文件。清单文件确实包含扩展名。

有没有办法在不提供扩展名的情况下从 Asset Bundle 加载文件?据我所知,这在 Unity 4 中是可行的,但我在使用 Unity 5 (5.1.2p3) 时遇到了问题。

就像我正在尝试做的一个例子:

这有效:

AudioClip soundClip = localisedAssetBundle.LoadAsset<AudioClip>( "sound.wav" );

这也有效:

AudioClip soundClip = Resources.Load<AudioClip>( "sound" );

但这不会:

AudioClip soundClip = localisedAssetBundle.LoadAsset<AudioClip>( "sound" );

回答后编辑:

我的例子并不完全正确,因为我是在解释它们。第三个示例实际上可以像上面写的那样工作。但是,我在代码中实际尝试做的是:

AudioClip soundClip = localisedAssetBundle.LoadAsset<AudioClip>( "Assets/sound" );

由于我既没有指定有效的路径,也没有指定有效的文件名,所以这不起作用。有关完整解释,请参阅已接受的答案。

4

1 回答 1

3

您可以通过资源包的路径或名称从资源包中加载资源。

来自文档:

AssetBundle.LoadAsset 将使用其名称标识符作为参数加载对象。该名称是在项目视图中可见的名称。您可以选择将对象类型作为参数传递给 Load 方法,以确保加载的对象属于特定类型。

例如:

AudioClip sound = _assetBundle.LoadAsset<AudioClip>( "assets/sound.wav" ); // Get an asset by path

AudioClip sound2 = _assetBundle.LoadAsset<AudioClip>( "sound" ); // Get an asset by name
AudioClip sound = _assetBundle.LoadAsset<AudioClip>( "sound.wav" ); //Get an asset by file name

AudioClip sound = _assetBundle.LoadAsset<AudioClip>( "Assets/sound" ); // This will not work as it's neither a path, nor an asset name

如果您有 2 个具有相同名称的资产,您可以指定所需的资产类型。假设您有一个名为“test”的 AudioClip 资产和一个名为“test”的材料资产。

bundle.LoadAsset<Material>("test"); //returns you material
bundle.LoadAsset("test", typeof(Material)); //as well, as this one
bundle.LoadAsset<AudioClip>("test"); //returns an audio clip
于 2015-08-31T10:42:23.183 回答