关于Unity中的NGUI和UGUI
一、用Unity开发2D游戏,有三套关系
1.GUI:Unity本身自带的GUI
2.NGUI:以前在Unity中广泛来做2D的,是第三方的包,需要安装
3.UGUI:Unity5.X后(其实是Unity4.6以后),Unity找到NGUI的作者,用了一年开发了UGUI,变成内置于Unity中的包,官方主推,
所有的GUI元素都在Unity的UI工具栏,右键--->UI,后来这个作者因为自己个人的原因离开了Unity
二、3D游戏是以米为单位,2D游戏是以像素为单位。所以用Unity做2D要解决这个问题。有两种解决方案:
3D做2D游戏的方法:
1: 使用正交摄像机:多大就是多大,没有什么变换。
2: 使用透视摄像机,将2D元素移动到合适的距离(Z的位置)。例如设计分辨率为 960x640, 使得在3D世界里面一个图片的大小w*h米,将这个图片移动到一定的距离(Z的位置),在Game视图里面能全屏地显示这个2D精灵。
计算方法:tag(视角*0.5) = (h/2) / zeye摄像机到精灵的距离; zeye摄像机到精灵的距离= h / (2 * tan(30));
960*640的zeye值大约是554,也就是要把Image的Z轴设置成5.54,这样才能把Image刚好覆盖整个Game视图屏幕
三、3D做2D游戏的步骤:
1.创建一个2D精灵
2.把图片的Texture Type改为Sprite
3.这时候图片属性会出现一个Pixeis Per Unit表示多少像素为一米 ,Pixeis Per Unit 100:100个像素为1米。960*640大小是9.6*6.4米
4.把图片拖进精灵的Sprite属性中
5.旋转图片90度(直接修改Inspector的Z轴参数)
6.设置精灵的Z轴的位置,使得在Game视图里面能全屏地显示这个2D精灵。这个Z轴的数值可以通过计算得出,zeye摄像机到精灵的距离= h / (2 * tan(30));,每个比例像素的Z轴大小都是不同的,其中960*640应该设置为5.54。这一步骤是为了获得这个比例。
7.如果不想改变精灵的Z轴位置,但是又想让它在Game视图里面能全屏地显示,这时候可以修改精灵的X和Y的Scale缩放比例,如果原本Z的大小为10,则X和Y应该缩放5.54,即10/5.54的比例,也就是原来的长度和宽度乘10/5.54得到现在的长宽。这个长宽比原来的大,刚好可以让它在Game视图里面能全屏地显示。这个比第六步更加灵活,更加实用,是3D做2D游戏的解决方案。
四、UGUI
底下有
1.一个Canvas管理所有的子2D的UI节点,等到要缩放的时候,只要缩放Canvas就可以缩放所以2D的UI节点。2D元素适配到3D世界。
创建的时候会自动创建一个EventSystem节点,用来专门接受管理事件。如果直接创建一个Text,系统也会自动帮我们创建一个父Canvas节点和EventSystem节点。
2.控件(Button,Label)
3.事件响应
五、Canvas节点
有四个组件,这里讲前三个
1.Rect Transform组件:不能改变,一创建就不能修改的组件,而且继承自Transform组件
2.Canvas组件(绘制2D元素的原理):
Render Mode:
(1)Screen Space (overlay):自适应屏幕空间,覆盖到屏幕上面,像电视机的菜单一样,总是在最上面,可能是使用正交摄像机实现的,因为不开源,所以猜想。
在Canvas节点下的Image精灵节点直接点击Set Native Size就会让Image节点自适应在屏幕上,在Game视图里面能全屏地显示。
Pixel Perfect:勾选的时候,显示的效果更好,subPixel技术。
Target Dispaly:绘制到哪个屏幕上,可以有多个显示器,选择一个显示器绘制。
(2)Screen Space (Camera):在没有设置Render Camera属性的时候,和第Screen Space (overlay)一样,会有黄色警告。
Plane Distance:2D和3D的遮挡关系,可以把3D物体放在2D的Canvas之前,也可以放在2D的Canvas之后,和3D物体的Z轴Position比较大小,但是至始至终Canvas在Game视图里面能全屏地显示。
(3)World Space:把它当成World空间来做,这时候Rect Transform组件可以改变。我们Canvas下面的的精灵子节点,只需要把它的Z轴的坐标改成0,就可以被换算成对应的能全屏显示在Game视图的坐标。
等于用手动设置Scale,等于之前3D做2D游戏的手动方法。Canvas Scaler组件在这种模式下没有作用,所以记得要把image的长宽改成9.6和6.4。使得2D和3D节点很好地融合在一起。
3.Canvas Scaler组件:把3维世界的物体正确地换算到2维世界中,就像上面的缩放X,Y,Z轴10米,则scale的x为10/5.54,y为10/5.54
UI Scale Mode:
(1)Constant Pixel Size:图片有多大,就把它显示到多大的窗口里面。不会对进行任何的缩放,所以如果是960*640的图片精灵,只能在960*640的分辨率窗口下显示完全,其他的不行。
(2)Scale With Screen Size:按照屏幕来进行缩放,960*640设计分辨率也可以在800*480屏幕分辨率全屏显示,这个模式比较常用。为了2D元素缩放不走样,宽度和高度都要缩放同样的比例,所以只要一个调节线就可以。
Match:不同的分辨率转换的时候的X,Y的转换因子大小,比如960*640转800*480,X,Y的比例缩放因子设置,宽度800/960=0.83,高度480/640=0.75,所以那个拉条就是在0.75到0.85之间的数值变化。
但是我们一般要么固定宽度,要么固定高度,条拉到底。分辨率成倍数的是可以完美转换的,不成的话就会有一些部分长或者宽没显示出来(很少)。
(3)Constant Physical Size:(1)是按照像素来显示的960*640,这里是按照物理尺寸4:3来显示的
注意:Imgae组件是无交互式的组件,里面的Source Sprite属性必须是Spite类型的精灵,Texture类型的不行。Image组件还可以设置颜色,也可以挂材质球(但是不适用于Screen Space (overlay)),设置贴图属性,preserve aspact保持缩放比。
关于Unity中的NGUI和UGUI的更多相关文章
- 关于Unity中的NGUI精灵
NGUI精灵实例 1.创建Unity项目工程和文件目录,保存场景 2.创建一个精灵NGUI---->Create---->Sprite,发现它的UI Sprite组件的贴图属性只支持Atl ...
- 关于Unity中的NGUI字体
NGUI字体类型 1: UIFont字体,UIFont类实现的2: TTF动态字体的使用3: BBCode的特殊字体的使用4: NGUI字体制作5: BMFont字体制作和艺术字体的制作6: UILa ...
- Unity中2D和UGUI图集的理解与使用
图集 什么是图集? 在使用3D技术开发2D游戏或制作UI时(即使用GPU绘制),都会使用到图集,而使用CPU渲染的2D游戏和UI则不存在图集这个概念(比如Flash的原生显示列表),那么什么是图集呢? ...
- Unity NGUI和UGUI与模型、特效的层级关系
目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...
- 关于Unity中的UGUI优化,你可能遇到这些问题
https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...
- 在Unity中使用UGUI修改Mesh绘制几何图形
在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...
- NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...
- NGUI研究之在Unity中使用贝塞尔曲线
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...
- 关于Unity中NGUI图片精灵响应鼠标的方法
我在Unity里做NGUI的时候发现一个问题. 在Unity2D场景当中,一个精灵图片只要加上了Box Collider或者Box Collider2D,就可以相应OnMouseEnter和OnMou ...
随机推荐
- mysql InnoDB 的行锁
表的引擎类型必须为InnoDB才可以进行此操作. 相关链接:http://www.cnblogs.com/CyLee/p/5579672.html 共享锁:单独运行前两句,然后新建一个会话使用第三句. ...
- get_class 返回对象的类名
get_class — 返回对象的类名 传一个对象,可以把这个对象的类名返回出来(字符串) 参考: http://php.net/manual/zh/function.get-class.php
- unity5 Orthographic模式相机视截体尺寸计算
一,通过编辑器中数值计算. 如图,相机为Orthographic模式,其camera size为5.57,是什么含义呢,经过测量,发现视图中视截体的高度是5.57x2. 那么视截体的宽度怎么决定呢? ...
- 禁止用户使用密码的方式登录服务器,让其使用key的方式登录
这里我的远程登录工具xshell 所以这里我要做的是 第一步是在xshell中配置公私钥 密钥类型选择为rsa,长度为2048,并点击下一步,如下所示: 继续下一步 如果给密钥设置了密码,那么在使用这 ...
- Spring Hello World
1. 概述 Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布. 1.1 依赖注入 1.2 ...
- 【Android】Java堆栈溢出的解决办法
分类:C#.Android.VS2015: 创建日期:2016-03-18 随着项目中添加的.jar和.so文件越来越多,编译MyDemos项目时,可能会出现Java堆栈溢出的错误,提示让增加Java ...
- 【Android】5.5 状态切换(Switch)和评级条(RatingBar)
分类:C#.Android.VS2015: 创建日期:2016-02-07 一.简介 1.利用Switch或者ToggleButton切换状态 如果只有两种状态,可以用ToggleButton控件或S ...
- 用c写了个后台扫描
/** * Notice: The program is not debug on internet and not use thread supervene. * date : 6-26 * aut ...
- angular学习笔记(九)-css类和样式1
本篇主要介绍通过数据绑定来给元素添加特定的类名,从而应用特定的样式 从一个最基本的例子来看: <!DOCTYPE html> <html ng-app> <head> ...
- linux命令(30):tail
linux ---tail命令 linux中tail命令---用于查看文件内容 最基本的是cat.more和less. 1. 如果你只想看文件的前5行,可以使用head命令,如: head -5 /e ...