www下载ab包

2 篇文章 0 订阅
2 篇文章 0 订阅

www下载远程ab包

最近一直在忙WebGL的项目,简直蛋疼,尤其是内存方面,什么都得节省,不敢让模型做太高精度的贴图,ui也是,但是这个项目模型量有点多,导致加载时间简直长到不能忍受,于是还是把资源打成ab包,上传服务器,在网站打开后再进行下载使用

打ab包

unity打ab包很简单 把想要打包的资源,在assetlabel框里定好assetbundle名字就行,然后把以下代码放进Editor文件夹内,之后在Assets/Build AssetBundles菜单栏中点击build就可以新生成一个assetbundles文件夹,里面就是生成的ab包
在这里插入图片描述

using System.IO;
using UnityEditor;
using UnityEngine;

public class BuildAB : MonoBehaviour
{

    //[MenuItem("AssetBundle/Package (Default)")]
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }
}

www下载ab包

把ab包上传到服务器以后,就要下载了,这里我用的是www下载,直接上代码

IEnumerator wwwDown() {

        www= new WWW(url);//url链接记得带ab包的后缀,没有就不加
        yield return www;
        if (www.isDone) {
            isDown = false;
            Destroy(Lodding.gameObject);
            AssetBundle ab = www.assetBundle;
            Scenes = ab.LoadAsset<GameObject>("scenes.prefab");
            dancerMan = ab.LoadAsset<GameObject>("DancerMan.prefab");
            ab.Unload(false);//false:只卸载用过的资源  true:卸载全部资源
            Train.gameObject.SetActive(true);
            //Instantiate(go);
        }
        //释放资源(非托管资源)
        www.Dispose();
    }

下载完成后,最好记得unload ab包,如果你是存入本地,直接true,如果是像我一样只是临时放入变量中的话,就false

在 Unity 中,可以通过以下步骤下载 Asset Bundle 并加载: 1. 首先需要有一个远程 Asset Bundle 的 URL 地址。 2. 在 Unity 中创建一个空的 GameObject,并为其添加一个脚本。 3. 在脚本中使用 UnityWebRequest 类来下载远程 Asset Bundle,并保存到本地。 示例代码: ```c# UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle("http://www.example.com/example.unity3d"); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { // 保存至本地 AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(www); assetBundle.LoadAllAssets(); // 将 Asset Bundle 保存至本地 File.WriteAllBytes(Application.persistentDataPath + "/example.unity3d", www.downloadHandler.data); } ``` 4. 在需要加载 Asset Bundle 的地方使用 AssetBundle.LoadFromFile() 方法加载本地 Asset Bundle。 示例代码: ```c# AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.persistentDataPath + "/example.unity3d"); GameObject go = assetBundle.LoadAsset<GameObject>("example"); Instantiate(go); ``` 这个例子中,我们通过 AssetBundle.LoadFromFile() 方法加载了本地的 Asset Bundle,并使用其中的一个 GameObject 进行实例化。 需要注意的是,Asset Bundle 的加载顺序很重要,必须先加载依赖项后才能加载主 Asset Bundle。可以使用 AssetBundle.LoadFromFileAsync() 方法异步加载 Asset Bundle,以避免阻塞主线程。同时,为了避免重复下载和浪费带宽,可以使用 AssetBundleManifest 来检查本地是否已经存在所需的 Asset Bundle。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值