首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity:在没有文件扩展的情况下从资源包中加载资源

Unity:在没有文件扩展的情况下从资源包中加载资源
EN

Stack Overflow用户
提问于 2015-08-27 14:59:54
回答 1查看 9.4K关注 0票数 1

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

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

作为我正在尝试做的一个例子:

这是可行的:

代码语言:javascript
复制
AudioClip soundClip = localisedAssetBundle.LoadAsset<AudioClip>( "sound.wav" );

这也是可行的:

代码语言:javascript
复制
AudioClip soundClip = Resources.Load<AudioClip>( "sound" );

但这不是:

代码语言:javascript
复制
AudioClip soundClip = localisedAssetBundle.LoadAsset<AudioClip>( "sound" );

回答后编辑:

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

代码语言:javascript
复制
AudioClip soundClip = localisedAssetBundle.LoadAsset<AudioClip>( "Assets/sound" );

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-31 18:42:23

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

来自文档:

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

例如:

代码语言:javascript
复制
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“的材料资产。

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32242668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档