微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CodeGo.net>在硬盘上下载AssetBundle

现在,似乎UnityWebRequest.GetAssetBundle下载资产到RAM并加载.反正有下载到硬盘加载吗?

解决方法:

这并不复杂.像处理普通文件一样处理该文件,您可以从互联网上下载该文件,但使用“ .unity3d”扩展名保存.

1.通过使用UnityWebRequest进行请求,将AssetBundle下载为普通文件.

UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.Send();

2.使用DownloadHandler.data检索字节数组数据,然后将其保存到Application.persistentDataPath / yourfolder / filename.unity3d.确保扩展名是“ .unity3d”.

File.WriteallBytes(handle.data, data);

而已.

3.要加载数据,请使用AssetBundle.LoadFromFile或AssetBundle.LoadFromFileAsync:

AssetBundleCreateRequest bundle = AssetBundle.LoadFromFileAsync(path);

如果仍然感到困惑,这应该是下面的样子.您可能需要进行一些修改

下载并保存:

IEnumerator downloadAsset()
{
    string url = "http://url.net/YourAsset.unity3d";

    UnityWebRequest www = UnityWebRequest.Get(url);
    DownloadHandler handle = www.downloadHandler;

    //Send Request and wait
    yield return www.Send();

    if (www.isError)
    {

        UnityEngine.Debug.Log("Error while Downloading Data: " + www.error);
    }
    else
    {
        UnityEngine.Debug.Log("Success");

        //handle.data

        //Construct path to save it
        string dataFileName = "WaterVehicles";
        string tempPath = Path.Combine(Application.persistentDataPath, "AssetData");
        tempPath = Path.Combine(tempPath, dataFileName + ".unity3d");

        //Save
        save(handle.data, tempPath);
    }
}

void save(byte[] data, string path)
{
    //Create the Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    }

    try
    {
        File.WriteallBytes(path, data);
        Debug.Log("Saved Data to: " + path.Replace("/", "\\"));
    }
    catch (Exception e)
    {
        Debug.LogWarning("Failed To Save Data to: " + path.Replace("/", "\\"));
        Debug.LogWarning("Error: " + e.Message);
    }
}

加载:

IEnumerable Loadobject(string path)
{
    AssetBundleCreateRequest bundle = AssetBundle.LoadFromFileAsync(path);
    yield return bundle;

    AssetBundle myLoadedAssetBundle = bundle.assetBundle;
    if (myLoadedAssetBundle == null)
    {
        Debug.Log("Failed to load AssetBundle!");
        yield break;
    }

    AssetBundleRequest request = myLoadedAssetBundle.LoadAssetAsync<GameObject>("boat");
    yield return request;

    GameObject obj = request.asset as GameObject;
    obj.transform.position = new Vector3(0.08f, -2.345f, 297.54f);
    obj.transform.Rotate(350.41f, 400f, 20f);
    obj.transform.localScale = new Vector3(1.0518f, 0.998f, 1.1793f);

    Instantiate(obj);

    myLoadedAssetBundle.Unload(false);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐