unity NGUI使用方法

news2024/10/7 19:18:49

基本用法

很多基本模块比如按钮、slider等都能从Prefab中直接拖拽到场景中实现,但都需要有一个Collider(Prefab已经自带)

因为不仅是UI,所有带有Collider的游戏物体都能接收到OnClick, OnPress这样的事件——前提是需要在Main Camera里面添加上event System组件,然后自定义脚本添加以下函数:

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

 

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

核心组件

UILabel (标签)

 

用于创建各种类型的文本标签和标注,除了基本的文本属性外,NGUI的UILabel还具有文本对齐方式(alignment), 渐变和模糊(gradient和blur属性)

UISlider (进度条)

Appearance [添加进度条显示组件]

  1. Foreground [表层进度条]

  2. Background [背景进度条]

  3. Thumb [滑块]

  4. Direction [进度条方向]

UIInput (输入框)

 

  • Starting Value [默认输入文字]

默认输入文本和初始化显示文本是两个概念,默认输入的文本是有效文本,初始化显示文本是提示用户输入用的文本

  • Saved As [设置输入的内容在PlayerPref中哪个字段保存] 这里通常不用设置,它会自动保存

  • KeyboardType [文本输入时键盘类型设定]: 电话号码、URL、隐藏输入等

  • On Submit :提交输入内容时触发事件函数设定

  • OnChange: 当输入内容改变时触发事件函数设定

  • Validation [验证输入类型] 只能验证指定输入类型,通过下拉框选择

一些注意事项:

  1. 输入框Input本身是无法显示文字的,它必须借助于一个 Label 来帮它显示输入的文本,字体、颜色等都与其相关联。如果发生冲突,比如颜色设置那么将会以 Input 中的设置为准。

  2. 输入框必须要有一个 BoxCollider 和一个 Sprite 底框否则无法输入。

  3. 输入框无法显示文字的一些情况:

    1. 超出最大字符数限定, 或者文字大小超出范围;

    2. Label所选用的字体库中没有这个文字或者输入的字符不符合要求的验证类型

  4. 输入的文字可以从Input 中的 value 变量读取也可以从关联的 Label中的text变量读取。

  5. 请将相关联的 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图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/475988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sed编辑器基础命令

shell脚本编程系列 学习sed编辑器 sed编辑器被称作流编辑器(stream editor),与普通的交互式文本编辑器不同,在交互式文本编辑器可以用键盘命令交互式插入、删除或替换文本数据。流编辑器则是根据事先设计好的一组规则编辑数据流。 sed编辑器…

人脸检测--传统方法

人脸检测与识别综述 人脸检测与识别是计算机视觉和生物识别领域中最受关注的研究内容。 如何从包含人脸内容的图像、视频等多媒体数据中,找到人脸,并对其身份进行判定,是人脸检测与识别中的主要问题。 应用场景 - 安全监控 - 访问控制 …

【Java校招面试】基础知识(一)——Java常用类库

目录 前言一、编程时常用的Java类库1. 异常捕获模块(try-catch-finally, Error, Exception)2. boolean / short / int / long / float / double / char / byte及其对应的引用类型 二、面试时常考的Java类库1. 一切类型的父类Object及其equals / hashCode / toString方法2. 常用…

anaconda安装pytorch的流程

1.查看本机支持的CUDA版本 cmd:nvidia-smi 2.安装本机支持的CUDA版本 CUDA安装教程 GPU, CUDA,cuDNN三者的关系总结 3.使用anaconda创建虚拟环境 3.在anaconda对应的虚拟环境中安装CUDA对应的pytorch版本 anaconda安装pytorch(anaconda3,Windows10&am…

idea使用 ( 二 ) 创建java项目

3.创建java项目 3.1.创建普通java项目 3.1.1.打开创建向导 接 2.3.1.创建新的项目 也可以 从菜单选择建立项目 会打开下面的选择界面 3.1.2.不使用模板 3.1.3.设置项目名 Project name : 项目名 Project location : 项目存放的位置 确认创建 3.1.4.关闭tips 将 Dont s…

二叉搜索树【Java】

文章目录 二叉搜索树的性质二叉搜索树的操作遍历查找插入删除 二叉搜索树又称为二叉排序树,是一种具有一定性质的特殊的二叉树; 二叉搜索树的性质 若它的左子树不为空,则左子树上结点的值均小于根节点的值; 若它的右子树不为空&a…

08 Kubernetes应用配置管理

课件 在 Kubernetes 中,secret 是一种用于存储敏感信息的对象。Kubernetes 支持以下三种类型的 secret: Opaque:这是默认的 secret 类型,可以用于存储任何类型的数据,包括字符串、二进制数据等。 Service Account&…

【P2】Jmeter 线程组的并行与串行

一、串行与并行规则 (1)、测试计划中的执行顺序遵循:setUp 线程组 -> 线程组 -> tearDown 线程组 (2)、如果将测试计划中的独立运行每个线程组勾选上,则多个线程组串行执行,否则并发执行…

吴恩达 Chatgpt prompt 工程--5.Transforming

探索如何将大型语言模型用于文本转换任务,如语言翻译、拼写和语法检查、音调调整和格式转换。 Setup import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fileopenai.api_key os.getenv(OPE…

2.6 浮点运算方法和浮点运算器

学习目标: 以下是一些具体的学习目标: 理解浮点数的基本概念和表示方法,包括符号位、指数和尾数。学习浮点数的运算规则和舍入规则,包括加、减、乘、除、开方等。了解浮点数的常见问题和误差,例如舍入误差、溢出、下…

Unity一般打包流程

Unity一般打包流程 通常打包流程主要是通过 Building setting来选择需要打包的场景后出包到指定文件夹位置,也可以采用 [MenuItem("MyMenu/Do Something")]中使用static函数来选择打包路径和打包方式——需要将该脚本放置在 Editor文件夹下 [MenuItem(&…

Vue3源码 第六篇-JavaScript AST transform函数

系列文章目录 Vue3源码 第一篇-总览 Vue3源码 第二篇-Reactive API Vue3源码 第三篇-Vue3是如何实现响应性 Vue3源码 第四篇-Vue3 setup Vue3源码 第五篇-Vue3 模版compile AST生成篇 文章目录 系列文章目录前言一、transform 转换二、traverseNode 遍历节点,trave…

B/S结构系统的会话机制(session)

B/S结构系统的会话机制(session) 文章目录 B/S结构系统的会话机制(session)每博一文案1. session 会话机制的概述2. 什么是 session 的会话3. session 的作用4. session 的实现原理解释5. 补充: Cookie禁用了,session还能找到吗 ?6. 总结一下…

PCA学习

前置知识 统计 假设数据集 X ∈ R n m \mathbf{X}\in\mathbb{R}^{n\times m} X∈Rnm,其中 n n n表示样本数量, m m m表示特征个数 均值 X ˉ 1 n e T X 1 n ∑ i 1 n X i \bar{\mathbf{X}} \frac{1}{n}\mathbf{e}^T\mathbf{X} \frac{1}{n} \sum_{i1}^{n}\mat…

[架构之路-178]-《软考-系统分析师》- 分区操作系统(Partition Operating System)概述

目录: 本文概述: 1.1 什么是分区操作系统 1.2 分区操作系统出现背景 1. 前后台系统(Foreground/Background System) 2. 实时操作系统(RTOS) 本文概述: 随着嵌入式系统日趋复杂化以及对安全性要求的不断提高,采用空间隔离、时…

java学习之枚举二

目录 一、enum关键字实现枚举 二、注意事项 一、对Season2进行反编译(javap) ​编辑 三、练习题 第一题 第二题 一、enum关键字实现枚举 package enum_;public class Enumeration03 {public static void main(String[] args) {System.out.println…

el-upload组件的文件回显功能和添加文件到elupload组件

省流: 先获取这个文件对象,使用handleStart方法添加到组件。 this.$refs.uploadRefName.handleStart(rawfile); 在开发的时候遇到表单里需要上传图片的功能。看了下el-upload组件的使用方法,在修改表单的时候,el-upload组件的回显…

flutter学习之旅(二)

如果不知道怎么安装编写可以查看这篇 创建项目 另一个创建方法 flutter create 项目名热部署 vscode 热部署 vscode很简单:可以通过Debug进行调试 使用flutter查看设备 flutter devices如图所见我现在用的是windows所以,我们检测不到ios因为 我们看…

【Fluent】边界类型总结,什么时候用壁面对(wall-shadow pair)、什么时候用interface?

一、fluent自动生成边界类型的规律 Enclosure是包裹在外面的气体(流体),mold是模具(固体),sheet是模具上的薄板件(固体)。 1.1 正向思维 不管是流体域还是固体域,每一…

高度可定制可用于商用目的全流程供应链系统(全部源码)

一、开源项目简介 高度可定制零售供应链中台基础系统,集成零售管理, 电子商务, 供应链管理, 财务管理, 车队管理, 仓库管理, 人员管理, 产品管理, 订单管理, 会员管理, 连锁店管理, 加盟管理, 前端React/Ant Design, 后端Java Spring自有开源框架,全面支…