安装参照github的README。UIWidgets相当于Flutter的一个Unity实现(后面表示UIWidgets和UGUI区别时直接称"Flutter"),是把承载的所有UI组件绘制成一张RawImage,从而大大减少DrawCall和耗电量,甚至达到原生应用的效果。

无Android\Flutter基础, 不看原理先看用法

参考博客

展示一个文字

using Unity.UIWidgets.engine;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.widgets;
using UnityEngine; public class TestPanel : UIWidgetsPanel
{
protected override Widget createWidget()
{
Text text = new Text(
data: "Hello world",
style: new TextStyle(
color: Unity.UIWidgets.ui.Color.white,
fontSize: 20,
fontStyle: Unity.UIWidgets.ui.FontStyle.italic
)
); return text;
}
}

给刚才的文字添加响应

    protected override Widget createWidget()
{
// Text text = ... GestureDetector gestureDetector = new GestureDetector(
child: text,
onTap: () =>
{
Debug.Log("Rua!");
}
); return gestureDetector;
}

运行时会在当前Scene下面自动挂载一个节点来处理响应

Flutter中的点击事件叫做Tap, 和UGUI习惯的Click不同; 因为采用代码生成控件的模式, 与UGUI的XXX.onClick += () => {}方式也不同

为控件添加状态State

刚刚创建的一个"Hello world"的文本控件是无状态的, 即不能修改(UnityEngine.UI.Text.text = "XXX";), 如果需要修改, 在Flutter中需要声明这个控件是有状态的

public class TestPanel : UIWidgetsPanel
{
protected override Widget createWidget() => new Counter(); class Counter : StatefulWidget
{
public override State createState() => new CounterState();
} class CounterState : State<Counter>
{
//目前这里使用Field或Property都可以
private int m_ClickCount = 0; public override Widget build(BuildContext context)
{
Text text = new Text(
data: "Hello world " + m_ClickCount.ToString(),
style: new TextStyle(
color: Unity.UIWidgets.ui.Color.white,
fontSize: 20,
fontStyle: Unity.UIWidgets.ui.FontStyle.italic
)
); GestureDetector gestureDetector = new GestureDetector(
child: text,
onTap: () =>
{
Debug.Log("Rua!");
//方法1: 直接修改值后手动通知UI刷新
//m_ClickCount++;
//(context as StatefulElement).markNeedsBuild();
//方法2: 使用封装过的函数传值
setState(
() =>
{
m_ClickCount++;
}
);
}
); return gestureDetector;
}
}
}

参照上面StatefulWidget的写法, 无状态可以写成这样

public class TestPanel : UIWidgetsPanel
{
protected override Widget createWidget() => new Counter1(); class Counter1 : StatelessWidget
{
public override Widget build(BuildContext context)
{
Text text = new Text(
data: "Hello world",
style: new TextStyle(
color: Unity.UIWidgets.ui.Color.white,
fontSize: 20,
fontStyle: Unity.UIWidgets.ui.FontStyle.italic
)
); GestureDetector gestureDetector = new GestureDetector(
child: text,
onTap: () =>
{
Debug.Log("Rua!");
}
); return gestureDetector;
}
}
}

Unity - UIWidgets 1. 从Hello world开始的更多相关文章

  1. Unity_UIWidgets - 组件Container

    Unity_UIWidgets - 组件Container Container 构造 效果 结语 QQ 今日无推荐 Unity_UIWidgets - 组件Container 上周给大家讲完了Scaf ...

  2. Unity_UIWidgets - 组件AppBar

    Unity_UIWidgets - 组件AppBar AppBar 构造 构造png观看 使用代码 使用效果 AppBar使用结束 结语 图标Icon QQ 今日无推荐 Unity_UIWidgets ...

  3. Unity_UIWidgets新手入门

    Unity_UIWidgets新手入门 Hello Everyone!好久没见了,有没有有些想念小黑呢?什么?这么想?哈哈哈哈哈哈,不过我也知道你是想了解新的知识了,才不是想我嘞. 好了,好歹也半年没 ...

  4. Unity WidgetsUI CreateTaskView Demo

    Creating own ListView PS:TaskView 的Image去掉,背景才会变透明 Let's create own ListView, for this we need to wr ...

  5. Unity NGUI C#性能优化

    建议读者先看这篇博文:http://blog.csdn.net/zzxiang1985/article/details/43339273,有些技术已经变了,比如第1招,unity5的打包机制已经变许多 ...

  6. Unity模块嵌入到Android中

    嗨,大家好,小黑在沉寂了6个月之后,终于要继续写一篇博客了. 先吐槽一波上家公司PHD&&OMS,不吐不快.上家公司的小黑,每天不是在弄UIWidgets,就是再弄UIWidgets, ...

  7. Unity之Android端权限申请

    Unity之Android端权限申请 Unity之Android端权限申请 前言 开篇废话 Unity版本 正题 前期准备 挂载脚本 打包发布 安装App 查看结果 结尾 唠家常 今日无推荐 Unit ...

  8. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  9. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  10. Unity游戏内版本更新

    最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...

随机推荐

  1. 使用Githud 实现分发IPA包遇到的坑

    最近要用到测试包分发,首先想到了,蒲公英,但是把包扔上去,扫描下载的时候发现,现在需要用户登录才能下载,弃了. 又跑到fir ,发现还得实名才能用,还得上传各种证件照,而且好像每天只有10个下载量,. ...

  2. Flutter 屏幕采集如何实现(提供示例demo)

    在视频会议.线上课堂.游戏直播等场景,屏幕共享是一个最常见的功能.屏幕共享就是对屏幕画面的实时共享,端到端主要有几个步骤:录屏采集.视频编码及封装.实时传输.视频解封装及解码.视频渲染.一般来说,实时 ...

  3. Unity UGUI的LayoutElement(布局元素)组件的介绍及使用

    Unity UGUI的LayoutElement(布局元素)组件的介绍及使用 1. 什么是LayoutElement组件? LayoutElement是Unity UGUI中的一个布局元素组件,用于控 ...

  4. 【MAUI Blazor踩坑日记】4.只在特定平台上引用包

    其实这个并不是MAUI特有的问题,只是在MAUI中可能会遇到. 例如某个包只在Windows上有用,但打包的时候,安卓.ios也会把这个包计算在内 所以需要在不是特定平台时把它排除. 万幸从微软文档找 ...

  5. MAUI Blazor 加载本地图片的解决方案

    前言 为了解决MAUI Blazor无法加载本地图片,https://github.com/dotnet/maui/issues/2907,所以写了这篇文章. 有token大佬珠玉在前,https:/ ...

  6. zabbix web 打开 lastest data 显示空白,http 返回 500

    问题 当在zabbix web 的 lastest data 界面上进行一个超大查询(没有限定主机)时,可能因为查询过大,超出了php-fpm进程的内存限制,而导致该界面卡住.(此后打开均无显示,F1 ...

  7. VBA与VB的区别

    从语言结构上讲,VBA是VB的一个子集,它们的语法结构是一样的.两者的开发环境也几乎相同.但是,VB是独立的开发工具,它不需要依附于任何其他应用程序,它有自己完全独立的工作环境和编译.链接系统.VBA ...

  8. SpringBoot3集成Redis

    目录 一.简介 二.工程搭建 1.工程结构 2.依赖管理 3.Redis配置 三.Redis用法 1.环境搭建 2.数据类型 3.加锁机制 四.Mybatis缓存 1.基础配置 2.自定义实现 五.参 ...

  9. java与es8实战之一:以builder pattern开篇

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<java与es8实战>系列 < ...

  10. Codeforces 1462F The Treasure of The Segments

    题意 给\(n(1\leq n\leq 2*10^5)\)个线段$[l_i,r_i] (1≤l_i≤r_i≤10^9) $,问最少删除几个线段,使得剩下线段中,有至少一个线段与所有线段相交. 分析 对 ...