Assetbundles不适用于iOS

时间:2016-03-06 06:53:32

标签: c# ios unity3d assetbundle

我正在为Unity中的iPhone开发一个AR应用程序,它从网络服务器下载资产包并将它们附加到图像目标。到目前为止几乎所有东西都在工作 - 除了当应用程序尝试加载资产包时,我收到以下错误:

  

'asset / bundle / url'无法加载,因为它没有使用正确的版本或构建目标构建。

我使用以下脚本创建了assetsbundles,稍微修改了Unity文档:

using UnityEditor;

public class CreateAssetBundles
{
    [MenuItem ("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles ()
    {
        BuildPipeline.BuildAssetBundles ("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS);
    }
}

然后我使用scp将assetbundles上传到服务器。该应用程序可以下载assetbundles,但无法加载它们。这是代码:

IEnumerator DownloadAndCache (string username, string modelName){
        // Wait for the Caching system to be ready
        while (!Caching.ready) {
            Debug.Log ("Waiting on caching");
            yield return null;
        }

        //Compute request url for server
        UriBuilder uriBuilder = new UriBuilder();
        uriBuilder.Scheme = "http";
        uriBuilder.Host = BaseURL;
        uriBuilder.Path = username.Trim() + "/" + modelName.Trim();
        string BundleURL = uriBuilder.ToString ();
        Debug.Log ("Attempting to download " + BundleURL);

        // Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache
        using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){
            yield return www;
            if (www.error != null) {
                Debug.Log ("Download error");
                throw new Exception ("WWW download had an error:" + www.error);
            }
            AssetBundle bundle = www.assetBundle;
            Debug.Log ("Got assets "+string.Join(",", bundle.GetAllAssetNames ()));
            GameObject loadedModel = Instantiate(bundle.LoadAllAssets()[0]) as GameObject;

            //attach to the image target
            loadedModel.transform.parent = ImageTargetTemplate.gameObject.transform;
            loadedModel.transform.position = new Vector3 (0, 0, 0);
            loadedModel.transform.localScale = new Vector3 (1, 1, 1);

            // Unload the AssetBundles compressed contents to conserve memory
            bundle.Unload(false);

        } // memory is freed from the web stream (www.Dispose() gets called implicitly)
    }

到目前为止,我已经尝试过:

  • 设置构建目标BuildTarget.iPhone - 没有区别
  • 使用Unity的assetbundle manager API构建assetsbundles
  • 在iOS的构建选项中取消选中“剥离引擎代码” - 我在另一个论坛上听说这会导致问题。

任何帮助表示感谢。

-UPDATE-
我根据Programmer的建议修改了BuildAssetBundle脚本,并在播放器设置面板中将目标平台从“iPhone”切换到“Universal”。我很确定这就解决了这个问题。

1 个答案:

答案 0 :(得分:4)

这意味着在构建资产包时,目标设备不是iOS。将目标更改为iOS,然后重建资产包。

重新编译并重新上传到iOS,这应该可以解决您的问题。

如果那不起作用那么......  如果您在脚本后端设置为IL2CPP时构建了AssetBundle,但随后将它们与.NET脚本后端一起使用,则也会发生该错误。解决方案是在通过播放器设置更改为.NET脚本后端后重建您的资产包。

同时尝试将BuildTarget.iPhone替换为EditorUserBuildSettings.activeBuildTarget,以便该Bundle会自动为当前所选的任何构建目标构建。