我使用资源包来加载本地化的VO。这些VO文件可以是.wavs或.oggs,在加载文件之前指定是哪一个是不可行的。当从资源加载默认文件时,这是很好的,因为Unity不需要文件扩展名。但是,当从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" );由于我既没有指定有效的路径,也没有指定有效的文件名,所以这不起作用。有关完整的解释,请参阅接受的答案。
发布于 2015-08-31 18:42:23
可以通过资源束的路径或名称从资源束中加载资源。
来自文档:
AssetBundle.LoadAsset将使用对象的名称标识符作为参数来加载对象。该名称是在Project视图中可见的名称。您可以选择将对象类型作为参数传递给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如果您有两个相同名称的资产,您可以指定您需要的资产类型。假设您有一个名为“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 cliphttps://stackoverflow.com/questions/32242668
复制相似问题