无法加载资产包

时间:2017-03-14 00:24:30

标签: unity3d

我从.fbx文件创建了一个资产包。然后;我使用这段代码将它加载到一个非常简单的统一项目中

public class k : MonoBehaviour {

    public string url;
    // Use this for initialization
    public string AssetName;
    void Start()
    {

    }

    IEnumerator DownloadAndCache(string bundleURL)
    {
        while (!Caching.ready)
            yield return null;
        using (WWW www = WWW.LoadFromCacheOrDownload(bundleURL, 1))
        {
            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));

            bundle.Unload(false);

        } 


    }
    // Update is called once per frame
    void Update()
    {

        if (Input.GetKeyDown(KeyCode.D))
            StartCoroutine(DownloadAndCache(url));
    }
}

但始终有下一期enter image description here

我不明白。由于我以下一种格式传递了有效的本地网址:

  

文件:/// C:/asset/robot.unity3d

请帮助

2 个答案:

答案 0 :(得分:2)

具有unity3d扩展名的文件通常不是AssetBundle。

要拥有包含模型的AssetBundle,您必须:

  • 在Unity中导入模型
  • 选择导入的模型,以便在“检查器”中查看其属性
  • 在Inspector的底部有一个小界面来创建和选择AssetBundles(这样模型将被分配到选定的AssetBundle)
  • 将每个资产分配到AssetBundle后,您需要构建Bundles
  • 将捆绑文件放在服务器上或StreamingAssets文件夹中并使用其URL

Unity中的AssetBundle管理仍然是一个痛苦的过程,所以我建议你仔细阅读Guide to AssetBundles and Resources

这里还有一个AssetBundleManager,但我发现它的代码很乱。 这是错误的,几乎不可能破译:我最终写了自己的,所以我不能真的建议你使用它(我把它链接起来,因为它将来会变得更好)。

答案 1 :(得分:1)

尝试调用bundle.GetAllAssetNames()以在尝试实例化任何内容之前查看包内的内容。

AssetBundle bundle = www.assetBundle;
foreach(var name in bundle.GetAllAssetNames()){
    Debug.Log(name);
}

mainAsset可能为null,具体取决于AssetBundle的创建方式,所以也许这就是这里发生的事情,如果你尝试按名称加载资产,它是否会给你null异常?