问题描述
在努力从资源加载资产之后(我仍然没有弄清楚为什么这实际上不起作用)我能够在使用以下代码将资产打包到 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);
}