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