Unity3D如何使用AssetBundle.LoadAsync从Assets文件夹直接加载预制件

时间:2013-11-12 12:11:27

标签: load unity3d assetbundle

我可以使用AssetBundle.LoadAsync从Assets文件夹直接加载预制件吗? 在Assets / Bundle文件夹中有一个名为“BGELement”的预制件,我不想把它放到Resources文件夹中并使用Resource.Load加载它。 以下是我的代码,但它出错:NullReferenceException,错误行是ab.LoadAsync()

 using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    void Start () {
        StartCoroutine(NewLoadBGElement ());
    }

    IEnumerator NewLoadBGElement () {
        string path = Application.dataPath + "/Bundle/BGElement";
        AssetBundle ab = new AssetBundle ();
        AssetBundleRequest abr = ab.LoadAsync(path, typeof(GameObject));
        yield return abr;
        GameObject newCube = Instantiate(abr.asset) as GameObject;
    }
}

1 个答案:

答案 0 :(得分:2)

不,你不能,但你可以将它们作为资产包放在流资产文件夹中(你需要Unity Pro才能这样做)。

然后,您可以使用WWW类从流媒体资源文件夹“下载”您的文件。请务必使用“file:\”

添加下载路径
WWW www = new WWW("file://" + Application.streamingAssetsPath + "/your file");

注意,如果您将文件复制或下载到您的设备持久数据路径,您可以使用相同的方式下载它们

Application.persistentDataPath

代替。

我的建议是,如果您希望实时上传资产,请将预制件导出为AssetBundle,然后将它们粘贴在Streaming Assets文件夹中。您应该能够实时加载资产包。您也可以将资产包放在服务器上,也可以通过网络下载。

示例:

        public static IEnumerator DownloadFromStreamingAssetsFolder(string assetBundleName)
        {
            WWW file = new WWW("file://" + Application.streamingAssetsPath + assetBundleName);
            yield return file;
            //Do something with your download
        }