上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章。本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合?
  现在笔者把设计“UI热更新框架”的整体设计与构建过程表述如下,最后附带源码工程的下载链接,供广大学员参考研究。如果大家有什么不明白的地方,欢迎大家在评论区进行讨论。
   
1:首先基于笔者以前设计的SUIFW 框架,做进一步功能完善。
   完善UI框架对于复杂窗体的直接转向功能。为了小伙伴们能够更好的理解本技术,文章末尾特提供了下载链接供大家参考。

2:经过重构完善后UI框架与AB框架(即:AssetBundle 框架,本框架文章末尾提供源码下载链接) 的初步资源、脚本整合处理。
   2.1> 建立一个全新的项目名称例如:UIPlusABFramework。
     2.2> 项目中增加存放需要打包资源的目录。 例如“AB_Resurces”目录。
     2.3> Resources目录原来的资源文件,除了配置文件外,全部拷贝到AB_Resources 目录下。使用AB框架,对资源进行打包处理,加载到StreamingAssets 目录下。

3:原始UI框架核心类(UIMangager.cs)的改动。
     3.1> 把原UI核心类底层加载机制 Resources.Load() 的单机职能,改为以AB框架为核心的AB包的调用加载机制。
具体说明:
            ResourcesMgr.GetInstance().LoadAsset(strUIFormPaths, false);
            替换为

AssetBundleMgr.GetInstance().LoadAssetBundlePack(xx,xx,xx,LoadAllABComplete){}
            private void LoadAllABComplete(string abName){}

3.2> 原本”Resources” 类需要的UI窗体路径的(基于Json配置文件的)参数, 改为了以AB框架中“场景名称、包名称、资源名称”为参数核心的机制。当然本部分也需要对核心配置文件"UIFormsConfigInfo.json" 做大的改动。(具体在第4节详述)。

3.3> 由于UIMangager.cs中,对于直接调用AB框架核心API,有很多不方便的地方。即需要写很多代码,且从UI与AB两大框架解耦的思想出发,特设计一个中间过渡脚本(例如: ABLoadAssetHelper.cs),利于两大框架之间的低耦合处理。本设计过程参考经典设计模式中的“代理模式”、“桥接模式” 等思想。
     3.4> 以上两大框架的结合与重构难点在于: 原始UI框架本质是“串行运行”,而AB框架资源调用是“并行运行”。 所以协调资源加载的先后顺序是“热更新UI框架”的重点与难点。

4: 原始UI框架核心类(UIMangager.cs)中对于Json配置文件的改动。
    原始配置文件"UIFormsConfigInfo.json" 以键值对的方式,存储了UI窗体预设名称与UI窗体预设在Resources目录下的相对路径的映射关系。但是在改造后的配置文件,所有的AB包都是默认加载到StreamingAssets 目录下。
    所以其配置文件中的“值”,就改为AB包的参数:“场景名称、包名称、资源名称”。因为有三个参数,可以定义在一行,中间加一个分隔符即可。在程序中可以做分割处理即可。详细请读者查看更新后定义的"UIFormsConfigInfo.json"配置文件。

5: 以上步骤开发完毕后,需要使用UI框架自带的演示示例项目,做加载验证测试。
如果可以正确无误的运行原UI框架所有的功能设计,则我们的“热更新UI框架”,就算是初步重构完毕了。
当然这只是笔者设计的“热更新框架设计之客户端热更框架”的一小部分,我们在后面的博客中,会对国内部分游戏公司所推崇的“纯lua热更新”框架进行介绍与设计讲解,敬请期待。

附录资源下载链接:

1: UI框架(SUIFW框架Ver1.1) 下载链接:
           链接:https://pan.baidu.com/s/1HU22Gr6GpWmT77vp4DcFZg
           提取码:r4r7
   
3: AssetBundle 框架(ABFW)源码工程下载链接:
           链接:https://pan.baidu.com/s/1VOoL9K3dUTpqxkwCcrQWYw
           提取码:hla8

4:本文讲解通过UI与AB框架整合,最终形成的“热更新UI框架”( UIPlusABFramework)源码下载链接:
       链接:https://pan.baidu.com/s/1C6e2ROHsqSaBEuCtRrzqpA
       提取码:dfq6

客户端热更新框架之UI热更框架设计(下)的更多相关文章

  1. 客户端热更新框架之UI热更框架设计(上)

    什么是热更新,为什么需要热更新?          热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来 ...

  2. vue-cli3热更新配置,解决热更新失败的问题,保存代码浏览器自动刷新

    在vue,config.js中配置css热更新 const IS_PROD = ['production', 'test'].includes(process.env.NODE_ENV) css: { ...

  3. 热更新之lua框架设计

    目前中大型游戏项目包含部分VR与AR项目,都需要热更新与在线修改Bug等功能实现,虽然Xlua等插件已经给出了关于C#与Lua语言之间的双向无缝调用实现,但是就热更新的架构却没有提出,这需要广大游戏公 ...

  4. 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...

  5. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...

  6. .NET CORE 2.0小白笔记(五):配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...

  7. 对C#热更新方案ILRuntime的探究

    转载请标明出处:http://www.cnblogs.com/zblade/ 对于游戏中的热更,目前主流的解决方案,分为Lua(ulua/slua/xlua/tolua)系和ILRuntime代表的c ...

  8. koa和egg项目webpack热更新实现

    背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack- ...

  9. 另类Unity热更新大法:代码注入式补丁热更新

    对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...

随机推荐

  1. Selenium(十)测试用例错误处理、日志接口、多用户测试

    1.一般的错误类型 2.查看错误提示,是一个div,以id为例找到该元素 3.修改测试用例 def checkResult(driver,err_id): try: err = driver.find ...

  2. Selenium(五)鼠标和键盘事件

    1.模拟鼠标找到大分类下的子分类.以网易严选为例. 如果直接找到  坚果炒货 这个元素,然后点击它来实现跳转,是会报错的. 模拟鼠标停留--点击行为:  页面已成功跳转 2.键盘事件 模拟搜索操作: ...

  3. BZOJ 3894 / Luogu P4313 文理分科 (拆点最小割)

    题面 中文题面- BZOJ 传送门 Luogu 传送门 分析 这道题类似于BZOJ 3774 最优选择,然后这里有一篇博客写的很好- Today_Blue_Rainbow's Blog 应该看懂了吧- ...

  4. Strategic game POJ - 1463 【最小点覆盖集】

    Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solu ...

  5. js字符串字母大小写转换

    toLocaleUpperCase 方法 返回一个字符串,其中所有的字母字符都被转换为大写,同时适应宿主环境的当前区域设置. stringVar.tolocaleUpperCase( )必选的 str ...

  6. 六十.完全分布式 、 节点管理 、 NFS网关

    1.安装与部署 对mapred和yarn文件进行配置 验证访问Hadoop   在六十准备好的环境下给master (nn01)主机添加ResourceManager的角色,在node1,node2, ...

  7. DRF-认证 权限 频率组件

    补充 1 认证 权限 频率组件原理基本相同 2 认证相关: session cookie token 认证相关的  这里用token token 1 有时间限制,超时则失效 2 每次登录更换一个tok ...

  8. centos 利用iptables来配置linux禁止所有端口登陆和开放指定端口的方法

    1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下面是命令实现: iptables -P INPUT DROPiptables -P FORWARD DROPiptabl ...

  9. Ubuntu start:未知任务:mysql

    在Ubuntu环境下,下载安装mysql但是到最后启动的时候却显示这一句话: start :未知任务:mysql 很纳闷,明明按照教程一步一步写的.后来才想起来,万能的方法,在前面加权限 sudo s ...

  10. UVA 11605 Lights inside a 3d Grid —— (概率和期望)

    题意:见大白书P181. 分析:一个一个点的进行分析,取其期望然后求和即可.假设当前点在第一次中被选到的概率为p,f[i]表示进行k次以后该点亮的概率(在这里也可以理解为期望),g[i]表示k次后该点 ...