1

我可以使用 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;
    }
}
4

1 回答 1

2

不,您不能,但是您可以将它们作为资产包放在流资产文件夹中(您需要 Unity Pro 来执行此操作)。

然后,您可以使用 WWW 类从流资产文件夹中“下载”您的文件。只需确保在您的下载路径前加上“file:\”

WWW www = new WWW("file://" + Application.streamingAssetsPath + "/your file");

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

Application.persistentDataPath

反而。

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

例子:

        public static IEnumerator DownloadFromStreamingAssetsFolder(string assetBundleName)
        {
            WWW file = new WWW("file://" + Application.streamingAssetsPath + assetBundleName);
            yield return file;
            //Do something with your download
        }   
于 2013-11-12T19:18:37.243 回答