我正在使用unity5.3.3,我想知道如何从资产包中获取资产,资产包的名称相同但保存在不同的文件夹中。我的AssetBundle文件夹按以下方式设置:
MyAssets -> this Folder is packed as an AssetBundle
-ThemeOne(folder)
- Logo.png
-ThemerTwo(folder)
- Logo.Png
当我做AssetBundle.LoadAssetAsync("Logo")
时。我结束了在第一个(ThemeOne)文件夹中获取徽标。那么如何访问其他文件夹中的文件呢?
我刚刚创建了一个sample project,以便您可以查看它。检查文件夹Assets \ AssetBundleSample \ SampleAssets \ Theme和脚本LoadAssets
答案 0 :(得分:0)
您可以使用方法LoadAssetAtPath()来指定完整路径,而不仅仅是资产名称。
示例:
LoadAssetAtPath("Assets/Texture/Logo.jpg", typeof(Texture2D));
此处的文档:http://docs.unity3d.com/ScriptReference/AssetDatabase.LoadAssetAtPath.html
答案 1 :(得分:0)
您可以将ThemeOne(文件夹)和ThemeTwo(文件夹)放在资源文件夹下的资源中,而不是使用类似的东西
(AudioClip)(Resources.Load ("Sounds/" + "myaudioclip", typeof(AudioClip)) as AudioClip)
同样加载您的png首先给出文件夹名称,因为我已经给出了声音,而不是文件名,因为我给了myaudioclip。 根据需要施放为纹理或其他东西
答案 2 :(得分:0)
public string BundleURL;
public string AssetName;
IEnumerator Start() {
// Download the file from the URL. It will not be saved in the Cache
using (WWW www = new WWW(BundleURL)) {
yield return www;
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetBundle;
if (AssetName == "")
Instantiate(bundle.mainAsset);
else
Instantiate(bundle.LoadAsset(AssetName));
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);
} // memory is freed from the web stream (www.Dispose() gets called implicitly)
}
BundleURL将使用您的实际资产所在的路径。您还可以将unity official docs与指定的路径字符串结合使用。
答案 3 :(得分:0)
似乎是一个错误。仍存在于Unity版本5.3.3中。
请参阅:http://answers.unity3d.com/questions/1083400/asset-bundle-cant-have-multiple-files-with-the-sam.html
答案 4 :(得分:0)
我不确定这是否可行,你应该阅读Explicit naming of assets,这是因为在Unity 5.6上已经过时了。这允许您明确命名包含在包中的资产。或者,您可以尝试,
bundle.LoadAsset("/Assets/ThemerTwo/Logo.png")
但一般来说,在同一个捆绑包中使用相同命名的资产是一种不好的做法。