美文网首页
属于 Unity 的 Flutter——UIWidgets

属于 Unity 的 Flutter——UIWidgets

作者: 锐心凌志 | 来源:发表于2019-12-17 14:16 被阅读0次

    介绍

    UIWidgets 是 Unity 的一个插件包,是一个从 Google 的移动 UI 框架 Flutter 演变过来的 UI 框架。

    相对于原生开发的高开发成本(不同平台都需要不同的一套代码),Flutter、React-Native 等这种跨平台 UI 框架应运而生。

    Flutter 自 2018 年 3 月发布以来,社区不断壮大。由于 Flutter 自身设计理念的出色,Unity 中国已经着手将其移植过来。当然了,也因为这两个东西都非常的年轻,因此开发的时候都像开荒一样。

    框架图

    Flutter 有自己的一套渲染系统,那么 Unity 作为一个游戏引擎,底层的图形 API 用自己的一套东西就行了,因此移植过来更方便了。

    Flutter 框架结构

    UIWidgets 框架结构

    image

    执行效率

    image

    这里提一些基础的知识:

    Batch 就是 DrawCall 的另一种说法,了解渲染流水线的同学会知道流水线在 CPU 与 GPU 之间通信时,一般有三个步骤:

    1. 把数据加载到显存中。
    2. 设置渲染状态。
    3. 调用 Draw Call

    Draw Call 就是一个调用命令,让 CPU 告诉 GPU 要怎么样用给定的渲染状态和输入的顶点信息来计算。Batch 里面装着顶点信息,也就是 DrawCall 中 GPU 需要的顶点信息。

    DrawCall 可以在 Profiler 中看,Batches 可以在 Stats 窗口看,大家可以仔细看看上面动图(右键在新标签页打开图片)里面的数据变化。

    image

    在我随便写的一个例子中间,可以看到 Batches 数只有 1 。即使在有动画的时候 Batches 会多一点,但动画停止后 DrawCall 和 Batches 都马上下来了。这也有我这个应用写的太简单的原因,但是这种效率还是非常值得期待的。

    组件树

    学过前端的同学应该熟悉组件树,这里就不介绍了。

    为了更高的渲染效率,Unity 采用了 Render Object Compositiing 的技术。

    image

    如果一个子树没有发生改变,Unity 就会将其渲染到一个离屏的 Render Texture 上缓存下来,需要的时候再将其贴到屏幕上。

    相比之下,以前的做法是,Canvas 只要有 UI element 改动了,整个 Canvas 都需要重新绘制。即使也有一种优化做法是准备两个 Canvas 分别绘制动态 UI element 和 静态 UI element,但这样也存在很多手动管理的地方。

    另外一方面,你可能也意识到了,我们不需要再管什么用同一个材质等等来优化图的合批,UIWidgets 会自动来管理这些事情。这方面也跟 FairyGUI 非常像,开发者能专注在生产效率上,让插件来管理麻烦的事情。

    优点

    • 能开发游戏以外的 APP
    • 游戏中的 UI
    • 新的用户体验
    • 不用管渲染过程,提升效率
    • 因为是 Unity 的插件,可以轻松加各种粒子效果和其他骚操作。
    • 一套代码能跑在游戏中、APP 中、网页中和 Unity 的 Editor 窗口中。(开发者还用其做了一个 Unity 中文文档的网站...一套代码能用在网页上和 APP 端,不过还在开发中)
    • 和 Flutter 的 API 几乎一样,可以参考 Flutter 教程来用 UIWidgets 搭应用。

    缺点

    • 无论是 Flutter 还是 UIWidgets 都还很年轻,有很多组件 UIWidgets 还没移植过来(GridView、Circle Avatar 等等)
    • 官方示例、文档还没完善
    • 开发时是开荒模式,所以可能忍不住直接转用 Flutter 去了...

    我的示例

    image

    这里借用了 ミライ小町 的模型,所以代码仓库大小会比较大。(项目里面还有ミライ小町的跳舞动画 animation!)

    项目仓库:Latias94/UIWidget-Practice

    UIWidgets:UnityTech/UIWidgets

    官方讲解录播:[官方直播] UIWidgets - 不止游戏!如何使用Unity开发跨平台应用

    相关文章

      网友评论

          本文标题:属于 Unity 的 Flutter——UIWidgets

          本文链接:https://www.haomeiwen.com/subject/zymsnctx.html