• 如何打造一个高性能、高效率、高自动化的UI框架


    如何打造一个高性能、高效率、高自动化的UI框架?

    1.什么是好的UI框架?

    MVC? MVVM?

    这些代码框架是没有任何问题的,他是对的,但又不完全对。

    笔者认为一个UI框架具备的不仅仅是代码层的简洁与低耦合。

    更重要的一个也是很容易被忽略的问题,就是UI的性能、效率、自动化。

    在这里插入图片描述
    这三者性能权重是最高的,其次是效率,最后是自动化。

    如果一个游戏的UI性能不好,给人直管的感受就是不流畅,顿挫感,掉帧感。

    这里有人可能就会有所疑虑,一个UI界面,无所谓的就算性能在差,又不会把游戏搞崩,做不做都无所谓。

    确实。 确实不会把游戏搞崩。

    那我们为什么还要搞?

    因为我们的目标是精品!任何一个精品游戏,都会考虑到各种性能,不仅仅是UI,UI是基础,也是必备。他们在任何一处都会去追求极致,哪怕是任何一点点卡顿。

    对。我们的目标是精品,是精品!我们只做精品,我们做出来就是精品,嗯~对!

    2.如何设计?

    如果我们想设计一个好的UI框架,那么我们必须要知道,我们该如何去优化。然后在框架设计初期就去考虑这些优化点,并且尝试去解决或避免掉。

    还不清除该怎么优化UI性能、内存、包体的看这里:

    如何把UGUI做到极致的优化 一个尽力把优化做到极致的男人

    知道了该如何极致性的优化UI,那我们知道该如何去设计一个好的UI框架了

    首先简单的列出来一个需要具备的基本条例:

    性能点:

    1.避免频繁的网格重建带来的大量性能消耗和垃圾回收。
    2.避免调用SetActive带来的性能消耗和GC垃圾。
    3.避免频繁Instans造成的卡顿和性能消耗以及GC垃圾。
    4.避免不必要的组件属性带来的性能开销。
    5.避免不正确的组件顺序导致打断合批带来的性能开销。

    功能点:

    1.交互性:界面访问界面,外部访问界面要简单方便。
    2.可控性:界面的生命周期函数,要完全可控。不能穿插或出现别的系统的周期调用,比如mono。
    3.便捷性:要使用方便,简单,不可太过于复杂,可以随时随地不需要更改任何代码即可使用。

    系统点

    1.自动化系统:整个系统重复且繁琐无用的工作要自动化,合理节约时间。
    2.透明的层级系统:整个UI系统层级要透明,可控,不能特效与界面完全乱套,或修改一个界面的层级,导致其他界面都要临时修改。
    3.完善的遮罩系统:遮罩系统要保证满足市面上的单遮和叠遮的需求。
    4.简洁的堆栈系统:堆栈系统简洁明了,方便使用。

    3.为何设计?

    • 为了提升我们游戏的品质
    • 为了增加我们的工作效率
    • 为了减轻我们工作的压力
    • 为了降低后期维护的成本

    每一个项目都会有一个阶段,就是产品优化阶段。我们的目的就是尽可能的让这些优化,在工作的过程中不知不觉的进行。最后我们质量也上去了,优化的压力也减少了。因为项目越到后期,优化起来就越费劲,因为项目中的各种依赖关系以及代码资源增多,不得不让我们花更多的时间去调整。这种费力不讨好的工作还不得不做。

    这些问题是我们始终都要面对的,不如就在工作中悄然的进行,至少让中后期的我们更加的心应手。

    卡顿现象

    应该有不少人遇到一这么一个问题:界面在首次加载的时候,或者界面比较大的时候,第一次加载的情况下,会很明显的卡顿一下。

    解决方案

    那么遇到这种情况下最有效的解决方案就是通过预加载的方式提前把该界面加载到内存当中。这样确实是解决了,但又没有完全解决。
    为什么呢?
    因为我们在进行预加载的同时,内存也在悄然无息的增大。如果我们预加载的界面过多,那么我们内存中也会加载出大量与该界面依赖的图片等资源。并且这些资源在我们不去主动清理的情况下,会常驻我们的内存。这也是导致低端机内存紧张甚至崩溃的罪魁祸首之一。

    我们要找到卡顿的原因,而不是无脑的进行预加载。

    造成卡顿的原因有很多,比如:网格重绘、Instantiate、SetActive、组件的性能开销、界面的DrawCall过大、界面的元素过多导致CPU计算压力和GPU渲染压力过大,都会造成界面卡顿。我们要解决的是这些根源问题,预加载只是相当于汽车的氮气,起到加速的作用。如果车子本身就不好,就算在多的氮气,最终还是会出问题。

    所以我们要从根源下手,这样我们的车才能开的更远,更稳!

    我们要做的不仅仅解决这些,还包括我们的 自动化高效率

    因为我们每创建一个界面,都会掺杂着大量无用且重复的操作,比如:脚本的创建,属性的声明,组件的查找,事件的监听与绑定,声明周期函数的声明等等。这些操作完全可通过自动化工具去制作,我们只需要关心该如何去编写业务逻辑和管理视图交互即可。这样的话我们的界面搭建工作,可以交给美术,或者某一个专业的人,又或者我们自己去做。最终需要5分钟搞定的工作,我们只需10秒钟。

    所以下面推荐一个优秀的UI管理框架。

    4.框架解决方案

    ZMUIFramwork,集高性能、自动化、高效率为一体的框架。
    点击查看详细介绍 ZMUIFramework

  • 相关阅读:
    qsort函数
    验证 Vue Props 类型,你这几种方式你可能还没试用过
    SpringBoot 使用过滤器修改请求参数
    dubbogo-1 基础rpc服务
    上市公司员工及工资数据(2000-2022年)
    LeetCode 2578. 最小和分割【贪心,排序+奇偶分组】1350
    【我的Android进阶之旅】如何传递android的log日志打印方法给到底层算法c代码去调用?
    Windows端口号被占用的查看方法及解决办法
    在Ubuntu18.04中更新指定python版本以及pip
    备忘录软件综合评测:优点、缺点、评价及替代品
  • 原文地址:https://blog.csdn.net/qq_42461824/article/details/116563318