为什么我在 IOS 上运行时无法在运行时通过 Resource.LoadAll() 加载资产,但资产在 OS X 上加载良好?

问题描述

在努力从资源加载资产之后(我仍然没有弄清楚为什么这实际上不起作用)我能够在使用以下代码将资产打包到 AssetBundles 后在运行时最终加载:

var myBundle = AssetBundle.LoadFromFile("Assets/AssetBundles/soundanchors");
  if (myBundle == null)
  {
     Debug.Log("Failed to load assets from bundle at Assets/AssetBundles");
  }
  else
  {
     Debug.Log("Successfully loaded sound anchors from Assets/AssetBundles");
     soundAnchors = myBundle.LoadAllAssets();
     AddAnchorsToGrid();
  }

当我在 OS X 上构建和运行项目时,代码运行良好。但是,一旦我构建了项目并在 IOS 设备上运行它,我就不再看到资产包加载了。

我假设这是因为在 IOS 上保存包的路径不同,但我无法找到应该在哪里寻找它们。

代码中可以看出,我的 Assets 文件夹中的 bundles 的位置在这里:“Assets/AssetBundles/soundanchors”

Unity 如何处理 IOS 上的资产路径? Unity API 中是否有一些常量用于保存认的 IOS 路径前缀?

解决方法

就我所记得的 IOS 而言,您必须在资产中创建名为 StreamingAssets 的文件夹,例如“Assets/StreamingAssets”,并将您的包放入其中。 你可以像这样加载你的assetsbunles:

void Start()
{
    var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath,"myassetBundle"));
    if (myLoadedAssetBundle == null)
    {
        Debug.Log("Failed to load AssetBundle!");
        return;
    }

    var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");
    Instantiate(prefab);

    myLoadedAssetBundle.Unload(false);
}