如何加载具有相同名称的资产,但是将其放在assetbundle的不同文件夹中?

时间:2016-05-10 05:32:16

标签: unity3d unity5 assetbundle

我正在使用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

5 个答案:

答案 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)

提供Stack Trace in Browser Window

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")

但一般来说,在同一个捆绑包中使用相同命名的资产是一种不好的做法。