Lua、AB包热更新总结

1.AB包热更新
(1)AB包是一种特定的压缩文件,可以放模型贴图音效等等
(2)Resources目录下打包时只读 无法修改;而AB包存储的位置是自定义的,能够动态更新,同时可以决定资源包初始的大小。
(3)热更新流程:客户端自带很少的默认资源,通过获取资源服务器地址,再通过文件对比资源服务器的资源,检测哪些是需要下载的,就是AB包。
2.AB包资源打包
(1)官方提供的工具:Asset Bundle Browser
(2)工具的参数
在这里插入图片描述

(3)AB包生成的文件在这里插入图片描述
3.AB包资源加载

void Start(){//加载AB包AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/model");//加载AB包中的指定资源//如果只使用名字加载 可能会出现类型分不清GameObject go2 = ab.LoadAsset("Cube");//建议使用泛型加载 或者 指定类型加载GameObject go2 = ab.LoadAsset<GameObject>("Cube");GameObject go = ab.LoadAsset("Cube", typeof(GameObject)) as GameObject;   Instantiate(go);//同一个AB包不能够重复加载//卸载单个的资源//true会把已经加载的资源也卸载 false则只卸载AB包的资源ab.Unload(true);//卸载所有加载的AB包//false则只卸载AB包的资源AssetBundle.UnloadAllAssetBundles(true);}

4.依赖包
(1)一个资源用到了其他AB包中的资源 此时 如果只加载这个资源 不加载依赖资源的AB包 就会出现材质丢失 所以又要加载该资源 也要加载其他AB包 但是依赖资源太多就会很麻烦,所以使用主包加载这些依赖资源
(2)使用该方法的缺点就是,会加载出全部的依赖资源,但不知道谁需要用,A依赖1资源,B依赖2资源,加载的时候会加载1和2资源
在这里插入图片描述
5.AB管理器的同步加载和异步加载(目的就是更方便的调用)

public class ABManager : BasePanelMono<ABManager>
{//让外部更方便的加载//主包private AssetBundle mainAB = null;//依赖包private AssetBundleManifest mainfest = null;//存储加载过的abprivate Dictionary<string, AssetBundle> abDic = new Dictionary<string, AssetBundle>();private string Path{get{return Application.streamingAssetsPath + "/";}}private string MainABName{get{
#if UNITY_IOSreturn "IOS";
#elif UNITY_ANDROIDreturn "Android";
#elsereturn "PC";
#endif}}public void LoadAB(string abName){//加载主包 和 主包中的固定文件//根据固定文件 获取该AB包的依赖资源 加入字典中//判断字典中是否存在该AB包 加入字典中if (mainAB == null){mainAB = AssetBundle.LoadFromFile(Path + MainABName);mainfest = mainAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");}AssetBundle ab = null;string[] str = mainfest.GetAllDependencies(abName);for (int i = 0; i < str.Length; i++){//判断依赖是否被加载过if (!abDic.ContainsKey(str[i])){ab = AssetBundle.LoadFromFile(Path + str[i]);abDic.Add(str[i], ab);}}if (!abDic.ContainsKey(abName)){ab = AssetBundle.LoadFromFile(Path + abName);abDic.Add(abName, ab);}}/// <summary>/// 同步加载/// </summary>/// <param name="abName"></param>AB包的名字/// <param name="resName"></param>目标资源名字/// <returns></returns>public Object LoadRes(string abName,string resName){LoadAB(abName);Object obj = abDic[abName].LoadAsset(resName);if (obj is GameObject)return Instantiate(obj);elsereturn obj;}public Object LoadRes(string abName, string resName,System.Type type){LoadAB(abName);Object obj = abDic[abName].LoadAsset(resName,type);if (obj is GameObject)return Instantiate(obj);elsereturn obj;}public T LoadRes<T>(string abName, string resName) where T : Object{LoadAB(abName);T obj = abDic[abName].LoadAsset<T>(resName);if (obj is GameObject)return Instantiate(obj);elsereturn obj;}//异步加载public void LoadResAsync(string abName, string resName,UnityAction<Object> callback){StartCoroutine(IELoadResAsync(abName, resName, callback));}private IEnumerator IELoadResAsync(string abName, string resName, UnityAction<Object> callback){LoadAB(abName);AssetBundleRequest abr = abDic[abName].LoadAssetAsync(resName);yield return abr;//等待abr加载完毕//如果abr的资源是gameobject就实例化 不是就返回出去if (abr.asset is GameObject)callback(Instantiate(abr.asset));elsecallback(abr.asset);yield return null;}//单个AB卸载public void Unload(string abName){if(abDic.ContainsKey(abName)){abDic[abName].Unload(false);abDic.Remove(abName);}}//全部卸载public void UnloadAll(){AssetBundle.UnloadAllAssetBundles(false);abDic.Clear();mainAB = null;mainfest = null;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0703_ARM7

练习&#xff1a; 封装exti&#xff0c;cic初始化函数 //EXTI初始化 void hal_key_exti_init(int id,int exticr,int mode){//获取偏移地址int address_offset (id%4)*8;//获取寄存器编号int re_ser (id/4)1;//printf("address_offset%d,re_ser%d\n",address_o…

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下&#xff1a; 要使用这个脚本&#xff0c;请按照以下步骤操作&#xff1a; 打开Excel&#xff0c;然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;选择“插入” > “模块”&#xff0c;在打开的模块…

【Python机器学习】算法链与管道——构建管道

目录 1、首先&#xff0c;我们构建一个由步骤列表组成的管道对象。 2、向任何其他scikit-learn估计器一样来拟合这个管道 3、调用pipe.score 我们来看下如何使用Pipeline类来表示在使用MinMaxScaler缩放数据后&#xff0c;再训练一个SVM的工作流程&#xff08;暂时不用网格搜…

常用的限流工具Guava RateLimiter 或Redisson RRateLimiter

在分布式系统和高并发场景中&#xff0c;限流是一个非常常见且重要的需求。以下是一些常用的限流工具和库&#xff0c;包括它们的特点和使用场景&#xff1a; 1. Guava RateLimiter Google 的 Guava 库中的 RateLimiter 是一个简单且高效的限流工具&#xff0c;适用于单节点应…

MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

数据库设计作业——《网上书店系统》数据库设计 一、功能需求 普通用户&#xff1a;可以进行最基础的登陆操作&#xff0c;可浏览图书、按类别查询图书、查看 图书的详细信息&#xff0c;还可以注册成为会员。会员&#xff1a;需要填写详细信息&#xff08;真实姓名、性别、手…

什么是yum源?如何对其进行配置?

哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。今天来聊一聊Linux下的yum源及其配置相关的内容。简单来说&#xff0c;yum源就相当于一个管理软件的工具&#xff0c;可以想象成一个很大的仓库&#xff0c;里面存放着各种我们所需要的软件包及其依赖。 一、Linux下软件包…

VRPTW(MATLAB):北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW(提供MATLAB代码)

详细介绍 VRPTW&#xff08;MATLAB&#xff09;&#xff1a;北极海鹦优化&#xff08;Arctic puffin optimization&#xff0c;APO&#xff09;算法求解带时间窗的车辆路径问题VRPTW&#xff08;提供MATLAB代码&#xff09;-CSDN博客 ********************************求解结果…

电源管理芯片PMIC的安全策略

1.概述 PMIC作为系统的电源管理模块&#xff0c;其输入电压一般会比较高&#xff0c;为保证芯片自身的安全&#xff0c;PMIC芯片会有独立的安全域&#xff0c;和功能域完全隔离&#xff0c;拥有独立的电压和电流输入&#xff0c;独立的晶振模块&#xff0c;内部运行监控状态机…

【代码随想录_Day23】122. 买卖股票的最佳时机 II 55. 跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和

Day23 OK&#xff0c;今日份的打卡&#xff01;第二十三天 以下是今日份的总结买卖股票的最佳时机 II跳跃游戏跳跃游戏IIK次取反后最大化的数组和 以下是今日份的总结 122 买卖股票的最佳时机 II 55 跳跃游戏 45 跳跃游戏II 1005 K次取反后最大化的数组和 今天的题目难度不低…

MySQL实战-4 | 深入浅出索引(上)(下)

什么是数据库索引&#xff0c;索引又是如何工作的呢&#xff1f; 一句话简单来说&#xff0c;索引的出现其实就是为了提高数据查询的效率&#xff0c;就像书的目录一样。一本 500 页的书&#xff0c;如果你想快速找到其中的某一个知识点&#xff0c;在不借助目录的情况下&…

【AI工具】-GPU算力租赁平台介绍

目录 1. AWS&#xff08;亚马逊云服务&#xff09; 2. Google Cloud Platform (GCP) 3. Microsoft Azure 4. 阿里云 5. 腾讯云 6. 派欧算力云&#xff08;PPIO&#xff09; 7. Lambda Labs 8. 猿界算力 9. AutoDL算力云&#xff08;视拓云&#xff09; 10. 极链AI云 …

试用笔记之-免费的汇通餐饮管理软件

首先下载免费的汇通餐饮管理软件&#xff1a; http://www.htsoft.com.cn/download/htcanyin.exe 安装后的图标 登录软件&#xff0c;默认没有密码 汇通餐饮管理软件主界面 汇通餐饮软件前台系统 点菜

使用 Java Swing 和 XChart 创建多种图表

在现代应用程序开发中&#xff0c;数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库&#xff0c;支持多种类型的图表&#xff0c;非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…

关于正负样本不均衡对树模型feature importance的影响

正负样本不平衡确实可能会影响决策树模型&#xff08;包括随机森林和梯度提升树等树模型&#xff09;中的特征重要性评估。这是因为特征重要性的计算通常基于模型内部节点分裂所带来的信息增益或基尼不纯度减少。 在不平衡的数据集中&#xff0c;模型可能会偏向于频繁选择那些…

PSINS中,avp的解读

PSINS中的AVP PSINS工具箱里面的trj.avp、trj.avp0等中的avp指的是姿态&#xff08;attitude&#xff09;、速度&#xff08;velocity&#xff09;和位置&#xff08;position&#xff09;&#xff0c;最后加一个时间戳t&#xff1a; avp[att; vn; pos; t]。 姿态 姿态的构成…

imx6ull/linux应用编程学习(7)在LCD上显示文字

在linux中&#xff0c;确实可以像裸机一样自己取模、自己写函数打点显示&#xff0c;但是效率很低&#xff0c;不能满足多文字显示&#xff0c;在Linux 系统中&#xff0c; 字体文件通常会放在/usr/share/fonts 目录下&#xff0c;有了字体文件之后&#xff0c;我们就不需要再对…

X86 +PC104+支持WinCE5.0,WinCE6.0,DOS,WinXP, QNX等操作系统,工业控制数据采集核心模块板卡定制

CPU 模块 是一款基于RDC 3306的SOM Express模块。RDC 3306这款X86架构的CPU是一款性能高、稳定性强的处理器。 它是一款灵活精巧的主板&#xff08;尺寸为91.8mm68.6mm&#xff09;&#xff0c;可以灵活的运用于用户的底板&#xff0c;节约开发成本。模块的接插件使用插针形式…

人工智能在音乐创作中的双刃剑:创新与挑战

AI在创造还是毁掉音乐&#xff1f; 简介 最近一个月&#xff0c;轮番上线的音乐大模型&#xff0c;一举将素人生产音乐的门槛降到了最低&#xff0c;并掀起了音乐圈会不会被AI彻底颠覆的讨论。短暂的兴奋后&#xff0c;AI产品的版权归属于谁&#xff0c;创意产业要如何在AI的阴…

pom文件-微服务项目结构

一、微服务项目结构 my-microservices-project/ ├── pom.xml <!-- 父模块的pom.xml --> ├── ry-system/ │ ├── pom.xml <!-- 子模块ry-system的pom.xml --> │ └── src/main/java/com/example/rysystem/ │ └── RySystemApplication.…