【Unity3D插件】NGUI基础学习笔记

【Unity3D插件】NGUI基础学习笔记


1、DrawCall:在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。Draw Call值越低,会得到更好的渲染性能。
Draw Call Tool:NGUI--》Open--》Draw Call Tool,可以查看DrawCall的一些信息。

影响DrawCall的因素:
Atlas数量
Font动态字体数量
渲染顺序:取决于Sprite Depth深度,Unity 默认会按照控件的 Depth 来渲染。从后往前渲染,当使用相同材质的控件会合并为一个 Draw Call 。如果和前一个材质不相同则会重新产生一个 Draw Call
Panel数量

2、UI Root:
如果是Create的2D UI.会自动生成一个UI Root和其子层下生成一个Camera。
UI Root游戏物体总是放在NGUI UI层级的最上层;
UI Root游戏物体包括Transform组件+UIRoot脚本组件+UIPanel脚本组件+Rigidbody组件
UIRoot脚本组件提供根据屏幕高度的反比来缩放UI界面的一些参数。

3、Camera:
如果是Create的2D UI.会自动生成一个UI Root和一个Camera。
2d UI是用正交相机来投射加入NGUI定制相机使得投射范围在一个方形可视范围内,在z轴的视觉表现上被忽略。
Camera Tool:此工具可以查看当前场景中所有的相机,包括Main Camera和UI相机。

4、Altas图集:
Atlas是一个容器,他包含了许多Sprite的坐标信息。与使用很多小的贴图来渲染UI相比,使用一张包含了所有小贴图的大贴图的效率要高许多。这些小的贴图就被叫做Sprite,这个大的贴图就被叫做Atlas。
Altas Maker:NGUI提供了此工具来创建一个Altas图集。

5、Font字体:
Font Maker:用于观察现有的Font字体,或者制作静态Font(Bitmap字体),动态Font。
静态Font一般是从美工处获取的图片文字,需要转换才能在NGUI里面使用。静态Font必须要属于某一个Atlas。
NGUI提示,动态字体,不能被做成Atlas的一部分,使用动态字体至少会增加一次DrawCall。

6、NGUI提供的控件:
Prefab Toolbar:此工具下提供了很多常用的控件,可以直接使用。
组件:UI组件基本上是以UI开头的脚本组件,如UISprite、UILable、UIWidget等。
控件:我是这么理解的,由一个空的GameObject+一个或多个组件,就可以组成一个控件,比如:
Button:Transform+UISprite(Script)+UIButton(Script)+Box Collider+UIPlay Sound
Sprite:Transform+UISprite(Script)//所以说Sprite是一个控件,UISprite是一个组件

7、Panel控件以及UIPanel组件:
UIPanel负责创建实际的集合图形。你不需要手动的添加UIPanel-一旦你创建一个控件,它会自动被添加。如果你想将你的UI渲染拆分到不同的DrawCall中,你可以手动创建你自己的UIPanel,例如你要创建一个分屏的游戏,每个屏用一个摄像机进行渲染,这种秦光下你就需要2个UIPanel来避免控件互相重叠。
Panel Tool:查看当前场景中NGUI创建的所有Panel及其信息。

8、Widget(Container)控件以及UIWidget组件:
其他组件的容器。
Widget Tool(Widget Wizard):控件创建向导,可以向UI的游戏物体上(如UI Root)添加各种控件。

9、NGUI事件机制:
NGUI的事件触发都必须添加Box Collider,并勾选Is Trigger,在Inspector窗口设置Box大小尺寸,可以在Widget的Collider勾选auto-adjust to match。还有一个比较重要的参数需要设置正确,即是UI Root下Camera参数,在Inspector窗口中,要确定UICamera中的Event Type选择3D UI,Event Mask选择Everything。
Box Collider:Button本身就带有OnClick事件,但是Sprite,Label等( 也绑有Widget的)并没有触发事件,所以必须手动添加Box Collider。
事件注册方法:
直接将MonoBehaviour的脚本上的方法绑定至Notifiy上面。这种方法不够灵活,不推荐。
在需要接收事件的gameobject上附加Event Listener。添加component->NGUI->Internal->Event Listener。
在任何一个脚本或者类中即可得到按钮的点击事件、把如下代码放在任意类中或者脚本中。
void Awake () 
{    
    //获取需要监听的按钮对象
    GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
    //设置这个按钮的监听,指向本类的ButtonClick方法中。
    UIEventListener.Get(button).onClick = ButtonClick;
}
//计算按钮的点击事件
void ButtonClick(GameObject button)
{
    Debug.Log("GameObject " + button.name);
}

10、Tween:
NGUI的动画系统,给UI游戏物体添加动画效果。
包括:Alpha动画、Position动画、Rotation动画、Scale动画、Transform动画。

11、常用UI脚本组件:
UICamera:发送NGUI事件给所有被它所附加的摄像机所看见的对象。除此之外,它不对UI做任何事情了。实际上,如果你想要你的游戏中的对象能接收NGUI类似OnPress,OnClick等事件,那么你需要做的是附加UICamera脚本到你的MainCamera上,即挂到UIRoot下面的Camera对象下。

UISprite:是NGUI的生命。它从texture图集绘制sprite。所有的Sprite需要你先创建一个图集(Atlas)。它继承了UIWidget的所有功能。

UILable:显示文本的脚本,继承自UIWidget。所有的label都需要Font才可正常工作。这个字体可以使Dynamic的(引用Unity Font),也可以是Bitmap字体——嵌入到Atlas里面的字体。动态字体更稳固因为它不需要你预先创建符号,但是Bitmap字体可以和你atlas的其他东西渲染在同一个draw call上并且这些字体可以通过photoshop美化。

UIWidget:简单来说,就是一个你可以放在屏幕任意位置的矩形框。Widget会有一定的面积(如下图的白色框范围),但是在运行的时候(GameView)是完全不可见的,所以非常适合当做其他组件的容器(让所有的sprite或者label等以它进行各种对齐)。UIWidget也被用来当做所有NGUI元素的基类——所有你创建的sprites和labels。UILabel,UISprite,UITexture和UI2DSprite(Unity3D 4.3版本)都继承自UIWidget。

UITexture:它完全没有图集的概念,使用起来非常的灵活,只需要把图片挂上去就行了。这样内存里只会占用你这一张图的大小,内存虽然小了但是DrawCall就上去了。因为每一张UITexture就是一次DrawCall。
UI2DSprite:

UIPanel:用来收集和管理它下面所有Widget的组件。通过Widget的Geometry创建实际的DrawCall。没有Panel所有东西都不能够被渲染出来。如果你对Unity熟悉,你可以把UIPanel当做Renderer。
UIScroll View:用来在界面中绘制一个滚动视图区域,并且可以通过滚动条来控制显示的区域内容。

UIGrid与UITable: UIGrid 和 UITable 的原理很简单,对子 Transform 的 List 进行排序,然后更加不同的规则进行定位排列(UIGrid 和 UITable 还是有很大不同的)。
UIGrid 和 UITable 定义了5种排列方式(其实是3种,None默认不排序即Transform的默认排序,Custom虽然提供virtual 可以重载):
public enum Sorting
{
    None, //默认不排序即Transform的默认排序
    Alphabetic, //按照名字字符串排序
    Horizontal, //按照localPosition 进行的排序
    Vertical,   //按照localPosition 进行的排序
    Custom,
}

UIAnchor:可以固定GameObjects在屏幕或者其他Widgets的某一边或者某一个角。这是一个关键的组件,用来在NGUI中创建模块化的UI。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值