创建第一个UI
创建一个2D UI
制作UI时,首先要创建UI的"根"。在Unity顶部NGUI菜单中选择Create,然后选择2D UI。
创建完成后,在Scene窗口中,NGUI自动生成了一个名为UI Root的物体,其中带有一个Camera作为子物体。
这个新生成的Camera,是NGUI生成的专门用来渲染UI的相机,当生成NGUI的UI Root时,就自动将生成的UI放在默认的UI Layer上。在这个相机上,只能看见UI Layer上的物体,也就是只能看见UI。因为是2D UI,所以从图中可以看到相机是正交相机。
点击Camera,红色的举行是相机的视窗大小比例,它会根据Game视图中的屏幕长宽比设置自动调整。
创建一个3D UI
创建3D UI的过程和创建2D UI的过程类似,NGUI依然自动生成了一个名为UI Root的物体,并带有一个Camera子物体,这个原理和2D UI类似,其中最大的区别就是相机的模式。3D UI的相机在Scene视图中是一个正交摄像机,将会支持UI的三维透视效果。
在创建的UI中,可以发现UI Root物体和Camera物体上面都带有NGUI特有的脚本组件,其中UI Root物体上带有U IRoot和UI Panel两个组件,而子物体Camera带有一个UI Camera组件,这几个组件都是NGUI体系中比较核心的组件。
UI Root组件
UI Root组件总是出现在NGUI的UI"树"的最顶层,也就是那个"根"物体中。它的作用是缩放UI。
在UI Root组件中,它提供了3中缩放的方式,也就是UI Root组件下的Type值。这3种方式分别为PixelPerfect、FixedSize、FixedSizeOnMobiles。
PixelPerfect等同于Flexible,是指永远保持像素大小不变,这样就可以让UI的图片永远是最清晰的,但是会导致分辨率高的屏幕下UI显得特别小;分辨率低的屏幕下UI显的特别大。
FixedSize等同于Constrained,是和上一种缩放方案完全相反的方案。在FixedSize下,NGUI将不再保护图片的原尺寸,只会关心NGUI自己所需要的缩放参数,这种模式下必须设置UI Root的ManualHeight值,然后NGUI会将所有的控件按照和这个值的高度比例进行缩放。
FixedSizeOnMobiles等同于ConstrainedOnMobiles,是两种方案的结合体,它会让UI在PC、Mac、Linux系统下自动采用PixelPerfect,而在移动设备上自动采用FixedSize。
如果没有选择FixedSize,那么必须设置另外两种缩放模式下的MinimumHeight和MaximumHeight两个值,代表最小高度和最大高度。
UI Panel组件
UI Panel有很多属性。其中,Alpha属性顾名思义是透明度,默认为1不透明。它将控制它旗下所有Widget(所有的UI控件都将带有Widget,因此它们都集成自Widget)的透明度,也就是它会让它的子物体里的所有UI控件都一起发生透明度变化,可以用来做整个UI的淡入淡出以及隐藏等。
Depth深度属性。在NGUI中,每一个Panel都有Depth,每一个Widget控件也有Depth,Depth将决定渲染的顺序,直接影响了UI之间的前后重叠关系。Depth越高的控件将会显示在视野的上层,Depth越高的Panel也会显示在视野的上层。但是Panel的Depth权重远远高于Widget,也就是说,在大部分情况下,属于低Depth的Panel的控件,不管这个控件本身的Depth为多少,它都将显示在高Depth的Panel的控件后面。当有多个Panel的时候,此时尽量保证这些Panel不要共用同一个Depth,因为这将导致NGUI在渲染时无法以1个DrawCall完成,会以增加DrawCall的方式来保证渲染顺序不混乱,这样就增大了性能的开销。不过NGUI在碰到Panel有共有Depth的情况时会做出提醒。
Clipping是剪辑视窗的功能,它将可以让一个面板只显示某一块区域。
在高级选项中,Render Q可以理解为渲染顺序,默认为自动设置。这个选项在和粒子系统结合使用时会有影响。如果该Panel下的UI需要被灯光影响到(NGUI的UI是默认不接受灯光照射效果的),需要勾选Normals。如果该Panel下面所有的UI控件都不会被移动,那么可以勾选Static来将它们设置为静态的,这样会导致该Panel下所有的控件都将忽略位置、旋转、缩放的操作,永远保持不动。虽然这样可以提高一些性能,但是慎重使用。
UI Camera组件
UI Camera这个组件的核心作用是:让带有这个组件的摄像机渲染出的物体能够接收NGUI的事件。如果自己创建了一个物体,并且希望对这个物体使用一些NGUI中的事件,例如OnPress()、OnDrag()等,就需要为渲染这个物体的摄像机添加UI Camera组件。
在UI Camera中,它让事件支持多点触摸、鼠标键盘触摸屏等事件的接收。但是要注意的是EventMask这个选项,这个EventMask和相机中的CullingMask非常相似,相机的CullingMask是为了选择渲染哪些层的物体,这里的EventMask是为了选择接收哪些层的物体的事件。UI Camera会默认只接收创建UI时被自动设置的那个layer,但是,如果在制作UI过程中,在创建UI后因为某些原因修改了UI的层,一定要将UI Camera的EventMask修改过来,否则将会发现,单击UI没有反应,因为它接收不到这个layer的物体的事件。
创建第一个UI的更多相关文章
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 制作第一个UI字体
为什么要制作UI字体 一般来说,会有系统默认字体共我们使用,但是出于以下两个原因我们经常会需要制作独特的字体. 1.系统字体的风格和美观程度等无法满足需求. 一般来说,系统字体都比较死板.生硬,风格单 ...
- 制作第一个UI图集
按钮分有两种形式,一种是普通按钮,也就是一张没有文字的按钮图片,在需要用时,就在上面写上不同的.当前所需要的文字.量一种按钮则是图片按钮,这种按钮的特点是整个按钮就是一张图片,它既是按钮也是图片. 在 ...
- Qt初学——我的第一个UI
第一次打开Qt的时候,我是一脸懵逼的.没学过c++,里面的程序都看不懂.按照套路,我开始看教程,上手实践.连着搞了3天之后,我开始渐渐明白怎么写UI. 我现在的理解是:UI = 界面设计 + 信号槽响 ...
- SAPUI5实例一:来创建Web应用UI
试试SAPUI5.这是SAP比较重要的一个UI库.完全通过HTML5实现,可以作为Web和移动应用的UI开发. 现在已经开源了.在这里可以下载: http://sap.github.io/openui ...
- (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...
- (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...
- 用qt creator创建可继承ui类
https://jingyan.baidu.com/article/5d368d1efa2dd73f60c05786.html 用qt creator创建可继承ui类 听语音 | 浏览:1657 | ...
- 第三章 Odoo 12 开发之创建第一个 Odoo 应用
Odoo 开发通常都需要创建自己的插件模块.本文中我们将通过创建第一个应用来一步步学习如何在 Odoo 中开启和安装这个插件.我们将从基础的开发流学起,即创建和安装新插件,然后在开发迭代中更新代码来进 ...
随机推荐
- 【转】使用Beaglebone Black的I2C (二)——使用C语言和i2c-dev驱动
在本博客的<使用Beaglebone Black的I2C(一)>中,介绍了BBB上无需编程对i2c总线进行读写操作的方法,本文将介绍如何在c语言程序中使用i2c-dev驱动来操作i2c设备 ...
- Android_CntextMenu_example_textSize
menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item ...
- Adroid_Spinner_ArrayAdapter
XML布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
- AppScan在项目中的使用流程
AppScan在项目中的使用流程 http://www.docin.com/p-829022229.html
- 关于文件的复制(用InputStream和OutputStream)
作业:将c盘的一个文本文件复制到d盘. 分析:复制原理:读取c盘文件中的数据,将这些数据写入到d盘当中,连读带写. /* * 需求:作业:将c盘的一个文本文件复制到d盘. * 思路: * 1,需要读取 ...
- 关于Ajax的实现
AJAX:Asynchronous Javascript And XML.异步的JavaScript和XML. 同步请求: 异步请求: 1.1.1 XMLHttpRequest对象的介绍: 方法 ...
- 读jQuery官方文档:数据方法与辅助方法
数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...
- nopCommerce的配置以及汉化
这里给大家一些链接,是关于nopCommerce的一些介绍: nopCommerce的源代码 关于nopcommerce Nopcommerce中文资源 第一步 配置nopCommerce 先上一张 ...
- Extjs4使用iframe注意事项
"video" : { render : function(panel, eOpts) { // 因为iframe在video // panel渲染的时候就已经完全移动到video ...
- ReactiveCocoa入门教程——第一部分(转)
作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...