unity NGUI使用方法
基本用法
很多基本模块比如按钮、slider等都能从Prefab中直接拖拽到场景中实现,但都需要有一个Collider(Prefab已经自带)
因为不仅是UI,所有带有Collider的游戏物体都能接收到OnClick, OnPress这样的事件——前提是需要在Main Camera里面添加上event System组件,然后自定义脚本添加以下函数:

如果不想写代码,也可以直接拖拽UIEventTrugger脚本来实现相关功能

与此同时,我们也可以给其中一个事件绑定多个函数,比如滑动条的变更既改变音量大小也能改变滑动条背景颜色。也能在On Finished中指定动作完成后发生的下一动作
核心组件
UILabel (标签)

用于创建各种类型的文本标签和标注,除了基本的文本属性外,NGUI的UILabel还具有文本对齐方式(alignment), 渐变和模糊(gradient和blur属性)
UISlider (进度条)
Appearance [添加进度条显示组件]
-
Foreground [表层进度条]
-
Background [背景进度条]
-
Thumb [滑块]
-
Direction [进度条方向]
UIInput (输入框)

-
Starting Value [默认输入文字]
默认输入文本和初始化显示文本是两个概念,默认输入的文本是有效文本,初始化显示文本是提示用户输入用的文本
-
Saved As [设置输入的内容在PlayerPref中哪个字段保存] 这里通常不用设置,它会自动保存
-
KeyboardType [文本输入时键盘类型设定]: 电话号码、URL、隐藏输入等
-
On Submit :提交输入内容时触发事件函数设定
-
OnChange: 当输入内容改变时触发事件函数设定
-
Validation [验证输入类型] 只能验证指定输入类型,通过下拉框选择
一些注意事项:
-
输入框Input本身是无法显示文字的,它必须借助于一个 Label 来帮它显示输入的文本,字体、颜色等都与其相关联。如果发生冲突,比如颜色设置那么将会以 Input 中的设置为准。
-
输入框必须要有一个 BoxCollider 和一个 Sprite 底框否则无法输入。
-
输入框无法显示文字的一些情况:
-
超出最大字符数限定, 或者文字大小超出范围;
-
Label所选用的字体库中没有这个文字或者输入的字符不符合要求的验证类型
-
-
输入的文字可以从Input 中的 value 变量读取也可以从关联的 Label中的text变量读取。
-
请将相关联的 Label 设为输入框的子物体,这样就可以保证输入的文字和底框保持相对位置不变。
Scroll View
-
Drag Effect [拖动效果]
-
None [无效果] 视窗拖动到哪里就是哪里
-
Momentum [惯性拖动] 松开拖动后会根据惯性动能继续拖动
-
MomentumAndSpring [弹性拖动] 内容被拖到边界外时会自动回弹为正常视窗界面
-
注意事项: (1)通常情况下,滚动视图一定要有一个 UIPanel 来进行窗口剪辑。这个UIPanel组件在创建ScrollView时会自动生成。
(3)滚动视图内包含的内容,一定要有一个 BoxCollider和 DragScrollView 组件,DragScrollView 组件会和ScrollView 相互作用,在运行时,它会自动去找到父物体中的 ScrollView,然后和它相互作用,让视图内的内容可以被滚动起来
(5)滚动视图的内容,最好放到创建的 Scrollview 节点下面作为子物体存在,这样可以免去大量的烦恼和隐患。
(7)滚动视图的剪辑窗口的尺寸一定要调整到位,尽量别去调整 clip的Centero
UI动画
渐隐渐现动画 (透明度动画)

创建TweenAlpha动画: NGUI 菜单 -> Tween -> Alpha 脚本
-
From 和 To [开始和结束] Tween动画核心设置,起始点的设置
-
PlayStyle [循环模式]
-
Once [单次播放]
-
Loop [循环播放] 播放完毕后,瞬间回到起点重新播放
-
PingPong [乒乓模式] 播放完毕后,从终点倒着播放回到起点
-
-
Animation Curve [动画曲线编辑] 通过编辑曲线可以调整动画播放的快慢
注意点
(1)从起点播放到终点,就算动画播放完了一遍。但是,在动画结束的触发事件中,我们需要注意的是,如果动画模式是 Loop 或者 PingPong,那么它将永远不会结束。
(2)透明度动画会实实在在地改变 UI的透明度,并不是一个临时透明度。例如,我们设置了一个透明度从1变为 0的渐渐消失动画,当透明度变化到 0.5时我们就将动画组件关闭,此时 UI 的透明度将会一直停留在 0.5。
(4)动画组件激活后,它会立即开启 StartDelay 的计时,然后播放动画。
(5)如果动画播放设定为播放一次,那么动画播放一次之后,就会自动关闭该组
颜色变化动画 (变色动画)

颜色改变原理为UI原色与控件颜色相乘
动画控制组件 (UIPlayTween)

UIPlayTween需要接收外部点击事件,所以我们会将它放在带有Collider的组件上
动画控制组件 (UIPlayAnimation)

-
为目标物体添加Animation组件: AddComponent -> Animation 脚本 (注意:这里的Animation并不是UIPlayAnimation)
-
为目标物体添加动画: Animation组件 -> Animation选项 -> AnimationClip动画
-
为本体添加UIPlayAnimation: NGUI 菜单 -> Attach -> PlayAnimation 脚本
-
为本体添加目标物体: 拖动目标物体 -> PlayAnimation脚本 -> Animation选项
NGUI各组件实现功能
屏幕适应
NGUI中Anchors下拉菜单中type选择Unified或Advanced可以自定义UI四个方向上与给定位置保持相同距离,Unified四边选择的是同一transform,andvanced每边可以选择不同tansform作为target Widget菜单中可选择Pivot位置(主要是影响子物体) 以及UI所处层级
NGUI 相较于 UGUI的区别
UGUI中UI元素被当作添加了UI组件的GameObject使用,更方便于单个使用。 NGUI使用仅有一个脚本挂载的GameObject,更方便控制所有UI元素
从性能来看,UGUI比NGUI有底层优势
UGUI的排序及合批逻辑都在C++层处理,采用EventSystem的分发模式,效率更高;
UI动画
NGUI整合了ITween,并将ITween的使用封装成脚本,可以非常方便制作出各种旋转、平移、缩放的效果,易用性很强。
UGUI官方文档建议是采用Animation System来制作UI动画,但是有个比较明显的缺陷,在UI频繁显隐的时候(Active/Inactive),Animator会重新Rebind一次Controller,导致无意义的性能损耗。所以UGUI的动画实现,一般通过整合DoTween来实现。Dotween不存在Animation的反复初始化问题,并且它使用了一些缓存策略,相对于ITween来说,每帧耗时更短,效率更高,产生GC更少
交互形式
在NGUI中,默认控件是不参与交互的,除非加上Collider;而在UGUI中,默认控件是参与交互的,除非使用canvas Group组件来禁止交互(可以通过去掉勾选raycast Target来禁止)
NGUI的交互事件是通过SendMessage来发送消息的,相比较于Delegate的性能,Delegate会快10倍左右。UGUI的交互事件改为通过事件回调机制来发送消息,性能上提升不少,比较直接反馈是scroll view的滑动流畅度。
NGUI重要类的UML图

相关文章:
unity NGUI使用方法
基本用法 很多基本模块比如按钮、slider等都能从Prefab中直接拖拽到场景中实现,但都需要有一个Collider(Prefab已经自带) 因为不仅是UI,所有带有Collider的游戏物体都能接收到OnClick, OnPress这样的事件——前提是需…...
软件测试技术(五)软件测试流程
软件测试流程 软件测试流程如下: 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写,用于确定各个测试阶段的目标和策略。这个过程将输出测试计划,明确要完成的测…...
Redis缓存穿透和雪崩
Redis缓存穿透和雪崩 Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题…...
【C++】set和map的使用
对于STL容器来说,有很多相似的功能,所以这里主要将与之前不同的功能说清楚 文章目录 1.对于set与map的简单理解2. setinsert迭代器遍历countmultisetinsertfindcount 3. mapinsert与迭代器的使用统计水果次数 operator []operator[]的实现理解对整体的拆…...
大学生学java编程的就业前景怎么样?我来聊聊自己的见解
今天兴哥想跟大家分享一个话题,就是学java到底好不好找工作。因为我发现很多粉丝朋友,之前可能并不是从事IT行业的,然后想转行来做这一行,或者是有些大四即将面临毕业的老哥,可能大学没有好好学习吧,然后专…...
JavaScript全解析——canvas 入门(上)
●canvas 是 HTML5 新增的一个标签, 表示画布 ●canvas 也是 h5 的画布技术, 我们通过代码的方式在画布上描绘一个图像 canvas 标签 ●向进行 canvas 绘图, 首先我们先要了解到 canvas 标签 ●是 html5 推出的一个标签 <html> <head>... </head> <body&…...
vue 插槽的用法
Vue的插槽(Slot)是一种可以让父组件向子组件传递内容的机制。插槽可以让开发者将组件的结构和内容分离开来,从而实现更好的可维护性和复用性。 在Vue中,插槽通过 标签实现。具体用法如下: 单个插槽 在子组件中使用一…...
【C++复习2】C++编译器的工作原理
如果你是一名newbird的话,建议观看如下视频加深你的理解,再看如下内容: https://www.bilibili.com/video/BV1N24y1B7nQ?p7 The cherno会额外告诉你如何将目标文件转换成汇编代码,CPU执行指令的过程以及编译器如何通过删除冗余变…...
回调函数_回顾
函数指针和回调函数 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,用于调用函数、传递参数。 直接用指针表示函数,而不是*指针ÿ…...
今天面了个字节跳动拿35K出来的,真是砂纸擦屁股,给我露了一手啊
今年的金三银四已经结束,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山之…...
8. 数据结构与算法
8. 数据结构与算法 常见面试题 说说一个算法有哪些时间复杂度?归并算法时间复杂度是多少?⭐⭐⭐ O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) 归并算法时间复杂度是O(nlogn) 说说数组时间复杂度,什么场景下使用?⭐⭐⭐⭐⭐ 从渐进趋势…...
Springboot +Flowable,任务认领和回退(一)
一.简介 有的时候,一个任务节点会存在多个候选人,例如:张三提交一个任务,这个任务即可以由李四处理,又可以由王五处理,那么针对这种多个任务候选人的情况,该如何处理? 二.绘制流程…...
机器学习 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络模型答疑
机器学习 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络模型答疑 目录 机器学习 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络模型答疑问题汇总问题一答疑问题二答疑问题三答疑问题四答疑问题五答疑参考资料问题汇总 有几个问题咨询一下: 1.数据集划分时出现了问题如何解决? 2…...
卷首语:我决定从零开始,用C++手写自己的键值数据库
2023年5月1日,周一下午。 我为什么要自己写一个? 今天中午,我在CSDN上提出了一个关于如何学习C的观点——通过用C造东西来学习C,于是为了实践这个观点,我决定用C手写一个简单的属于自己的键值数据库。 我会把这个键值…...
【Vue】收集表单数据 过滤器
收集表单数据 收集表单数据: 若:<input type"text"/>,则v-model收集的是value值,用户输入的就是value值若:<input type"radio"/>,则v-model收集的是value值,且要给标签配置value值若…...
Linux线程:死锁
1. 死锁 (1)概念 死锁(DeadLock)指两个或两个以上的进程或线程执行时,由于竞争临界资源而造成阻塞的现象;若不干涉,则无法推进下去。 (2)死锁的原因 ① 竞争临界资源…...
thinkphp+vue+html超市零食品美食推荐系统零食购物商城网站7v281
本系统的开发使获取食品推荐系统信息能够更加方便快捷,同时也使食品推荐系统管理信息变的更加系统化、有序化。系统界面较友好,易于操作 运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vu…...
思考外语学习的底层逻辑(以英语、法语为例)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言一、英语1.学习历程2.英语学习的心得3.理论检验(持续更新) 二、法语1.学习历程2.读入数据 总结 前言 提示:这里谈谈自己为什么要…...
命名ACL配置
命名ACL配置 【实验目的】 掌握命名ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Fa0/0 192.168.2.1 255.255.…...
2008-2019年主要城市PITI指数
2008-2019年主要城市PITI指数 1、来源:附在文件内 2、时间区间:2008-2019年 3、具体时间分布:、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围:包括110个城市&a…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
