当前位置: 首页 > news >正文

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 [添加进度条显示组件]

  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图

 

相关文章:

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的插槽&#xff08;Slot&#xff09;是一种可以让父组件向子组件传递内容的机制。插槽可以让开发者将组件的结构和内容分离开来&#xff0c;从而实现更好的可维护性和复用性。 在Vue中&#xff0c;插槽通过 标签实现。具体用法如下&#xff1a; 单个插槽 在子组件中使用一…...

【C++复习2】C++编译器的工作原理

如果你是一名newbird的话&#xff0c;建议观看如下视频加深你的理解&#xff0c;再看如下内容&#xff1a; https://www.bilibili.com/video/BV1N24y1B7nQ?p7 The cherno会额外告诉你如何将目标文件转换成汇编代码&#xff0c;CPU执行指令的过程以及编译器如何通过删除冗余变…...

回调函数_回顾

函数指针和回调函数 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量&#xff0c;而函数指针是指向函数。 函数指针可以像一般函数一样&#xff0c;用于调用函数、传递参数。 直接用指针表示函数&#xff0c;而不是*指针&#xff…...

今天面了个字节跳动拿35K出来的,真是砂纸擦屁股,给我露了一手啊

今年的金三银四已经结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之…...

8. 数据结构与算法

8. 数据结构与算法 常见面试题 说说一个算法有哪些时间复杂度?归并算法时间复杂度是多少?⭐⭐⭐ O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) 归并算法时间复杂度是O(nlogn) 说说数组时间复杂度,什么场景下使用?⭐⭐⭐⭐⭐ 从渐进趋势…...

Springboot +Flowable,任务认领和回退(一)

一.简介 有的时候&#xff0c;一个任务节点会存在多个候选人&#xff0c;例如&#xff1a;张三提交一个任务&#xff0c;这个任务即可以由李四处理&#xff0c;又可以由王五处理&#xff0c;那么针对这种多个任务候选人的情况&#xff0c;该如何处理&#xff1f; 二.绘制流程…...

机器学习 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络模型答疑

机器学习 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络模型答疑 目录 机器学习 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络模型答疑问题汇总问题一答疑问题二答疑问题三答疑问题四答疑问题五答疑参考资料问题汇总 有几个问题咨询一下: 1.数据集划分时出现了问题如何解决? 2…...

卷首语:我决定从零开始,用C++手写自己的键值数据库

2023年5月1日&#xff0c;周一下午。 我为什么要自己写一个&#xff1f; 今天中午&#xff0c;我在CSDN上提出了一个关于如何学习C的观点——通过用C造东西来学习C&#xff0c;于是为了实践这个观点&#xff0c;我决定用C手写一个简单的属于自己的键值数据库。 我会把这个键值…...

【Vue】收集表单数据 过滤器

收集表单数据 收集表单数据&#xff1a; 若&#xff1a;<input type"text"/>,则v-model收集的是value值&#xff0c;用户输入的就是value值若&#xff1a;<input type"radio"/>,则v-model收集的是value值&#xff0c;且要给标签配置value值若…...

Linux线程:死锁

1. 死锁 &#xff08;1&#xff09;概念 死锁&#xff08;DeadLock&#xff09;指两个或两个以上的进程或线程执行时&#xff0c;由于竞争临界资源而造成阻塞的现象&#xff1b;若不干涉&#xff0c;则无法推进下去。 &#xff08;2&#xff09;死锁的原因 ① 竞争临界资源…...

thinkphp+vue+html超市零食品美食推荐系统零食购物商城网站7v281

本系统的开发使获取食品推荐系统信息能够更加方便快捷&#xff0c;同时也使食品推荐系统管理信息变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作 运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vu…...

思考外语学习的底层逻辑(以英语、法语为例)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言一、英语1.学习历程2.英语学习的心得3.理论检验&#xff08;持续更新&#xff09; 二、法语1.学习历程2.读入数据 总结 前言 提示&#xff1a;这里谈谈自己为什么要…...

命名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、来源&#xff1a;附在文件内 2、时间区间&#xff1a;2008-2019年 3、具体时间分布&#xff1a;、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围&#xff1a;包括110个城市&a…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...