上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章。本篇就专门针对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. django已经安装但是还是提示ModuleNotFoundError: No module named 'django'

    首先查看自己django版本与python版本是否一致: 如果一致.可能是django安装的位置与python导包的位置不一致. 我将之前的python2.6升级到python3.6,结果pip in ...

  2. Web缓存Cache、Application、Session与ViewState

    在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 方法 信息 ...

  3. c语言学习、工作相关必备的常用网站

    1.https://zh.cppreference.com/,c.c++参考手册, 2.http://www.cplusplus.com/,在线查看c.c++函数的定义及用法 3.http://c-f ...

  4. C# Transaction 事务处理

    class //student [Serializable] public class Student { public string FirstName { get; set; } public s ...

  5. show([speed,[easing],[fn]])

    show([speed,[easing],[fn]]) 概述 显示隐藏的匹配元素. 这个就是 'show( speed, [callback] )' 无动画的版本.如果选择的元素是可见的,这个方法将不 ...

  6. 014_linux驱动之_信号符号名、描述和它们的信号值

    符号名 信号值 描述 是否符合POSIX SIGHUP 1 在控制终端上检测到挂断或控制线程死 亡 是 SIGINT 2 交互注意信号 是 SIGQUIT 3 交 互中止信号 是 SIGILL 4 检 ...

  7. tomcat大文件上传

    当服务器是Tomcat时,通过POST上传的文件大小的最大值为2M(2097152). 如果想修改该限制,修改方法如下: tomcat目录下的conf文件夹下,server.xml 文件中以下的位置中 ...

  8. js快速将字符串数组转化为数字数组(互换)

    1.数字数组转化为字符串数组 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(String); //结果: ['1', '2', '3', '4', '5 ...

  9. 在Android中使用OpenGL ES开发第(四)节:相机预览

    笔者之前写了三篇Android中使用OpenGL ES入门级的文章,从OpenGL ES的相关概念出发,分析了利用OpenGL ES实现3D绘图的重要的两个步骤:定义形状和绘制形状,简单的绘制了一个三 ...

  10. saltstack运维工具

    salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...