U3DC.COM | 优三帝研究院

Menu

【开源项目】UIWidgets 使用Unity开发App

简介:

UIWidgets是一款Unity插件,使用这个插件,就可以在Unity环境下快速开发一个跨平台的App。基于Flutter(谷歌的移动UI框架:Flutter中文网) ,目前是国人(Unity中国官方)团队在维护


优势:

1.效率比Unity自带的UGUI高。

2.维护成本低,特别是复杂度高的UI结构。

3..如果你有3D内容需求,比起直接用Flutter那么UIWidgets是个更好的选择。


如何使用:

版本要求:Unity2018.3及以上版本。

到github下载UIWidgets:https://github.com/UnityTech/UIWidgets

1.新建一个Unity项目

2.将下载的UIWidgets解压,将整个文件夹移动/拷贝到Package 目录下。

3.新建一个场景,创建一个UGUI的panel,这一步将自动创建:一个Canvas,一个panel,一个Eventsystem

4.删除panel身上的Image组件。因为我们后面添加的组件里也包含了图像渲染组件。同一个Gameobject上只能挂一个图像组件。

5.编写测试脚本:

 using System.Collections.Generic;
 using Unity.UIWidgets.engine;
 using Unity.UIWidgets.foundation;
 using Unity.UIWidgets.material;
 using Unity.UIWidgets.painting;
 using Unity.UIWidgets.widgets;
 
 namespace UIWidgetsSample {
     public class ExampleCanvas : WidgetCanvas {
         protected override Widget getWidget() {
             return new ExampleApp();
         }
 
         class ExampleApp : StatefulWidget {
             public ExampleApp(Key key = null) : base(key) {
             }
 
             public override State createState() {
                 return new ExampleState();
             }
         }
 
         class ExampleState : State {
             int counter = 0;
 
             public override Widget build(BuildContext context) {
                 return new Column(
                     children: new List {
                         new Text("Counter: " + this.counter),
                         new GestureDetector(
                             onTap: () => {
                                 this.setState(()
                                  => {
                                     this.counter++;
                                 });
                             },
                             child: new Container(
                                 padding: EdgeInsets.symmetric(20, 20),
                                 color: Colors.blue,
                                 child: new Text("Click Me")
                             )
                         )
                     }
                 );
             }
         }
     }
 }

6.挂载到Panel身上,直接运行即可看到效果了:


总结:

效率上理论会比UGUI好很多,不说别的,这个就在一个Canvas下的一个pannel里完成,想想都觉得会比你用UGUI堆出好几个panel好几个canvas来实现不同画面效率高啊。

2019.3.27补充

关于效率问题,特意跟开发者进行了一次沟通,下面是对上面划线部分的补充结论:

同等是同一个Canvas情况下,UIWidgets会做大量的Cache,它基于一个Material进行渲染,后续如果有元素变更的话,只针对变更部分进行刷新,无变化的内容会被当做类似一张静态的Picture进行处理,有点类似网页的按需加载,这部分都是自动化处理。而UGUI更多时候是将内容进行Active和DeActive来控制隐藏显示。在性能和渲染机制上是有差异的。根据开发者实际测试非常复杂的UI,同等复杂度下,UIWidgets可以实现60帧强大的渲染,而UGUI却只有10帧上下。另外需要指出的是,这套UIWidgets也是Unity官方(大中华区)的人员开发和维护的。^_^

需要注意:

Eventsystem这个组件少不了,明显点击事件响应那些也是基于这个的。

新创建的panel身上的image要移除,否则后面的测试脚本是加不上去的。

希望这个项目不要被弃坑,Unity开发者基数还是挺大的,另一方面是跨平台性,因为这个跨平台性,现在越来越多的企业/开发者选择用Unity开发应用,但是效率和性能还是不及原生应用,所以这样的项目是有积极意义的,手动点赞。

有个作者的开发群,目前还能加人,如果加不了群,可以加我微信(Find me)。


优三帝公众号

打赏
— 于 共写了1922个字
— 文内使用到的标签:

《“【开源项目】UIWidgets 使用Unity开发App”》 有 2 条评论

  1. zz说道:

    谢谢博主分享。不过有点疑问,同样的UI元素,使用一个canvas性能真的会比多个canvas好吗?之前看Unity官方优化建议,canvas下的一个元素变动,就会弄脏整个canvas。所以内容较多时,他们推荐使用多个canvas。

    • U3DC说道:

      同等是同一个Canvas情况下,UIWegets会做大量的Cache,它基于一个Material进行渲染,后续如果有元素变更的话,只针对变更部分进行刷新,无变化的内容会被当做类似一张静态的Picture进行处理,有点类似网页的按需加载,这部分都是自动化处理。而UGUI更多时候是将内容进行Active和DeActive来控制隐藏显示。在性能和渲染机制上是有差异的。另外,这个也是Unity官方(大中华区)的人员开发和维护的。^_^

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据