一、用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的更多相关文章

  1. 关于Unity中的NGUI精灵

    NGUI精灵实例 1.创建Unity项目工程和文件目录,保存场景 2.创建一个精灵NGUI---->Create---->Sprite,发现它的UI Sprite组件的贴图属性只支持Atl ...

  2. 关于Unity中的NGUI字体

    NGUI字体类型 1: UIFont字体,UIFont类实现的2: TTF动态字体的使用3: BBCode的特殊字体的使用4: NGUI字体制作5: BMFont字体制作和艺术字体的制作6: UILa ...

  3. Unity中2D和UGUI图集的理解与使用

    图集 什么是图集? 在使用3D技术开发2D游戏或制作UI时(即使用GPU绘制),都会使用到图集,而使用CPU渲染的2D游戏和UI则不存在图集这个概念(比如Flash的原生显示列表),那么什么是图集呢? ...

  4. Unity NGUI和UGUI与模型、特效的层级关系

    目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...

  5. 关于Unity中的UGUI优化,你可能遇到这些问题

    https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...

  6. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

  7. NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...

  8. NGUI研究之在Unity中使用贝塞尔曲线

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...

  9. 关于Unity中NGUI图片精灵响应鼠标的方法

    我在Unity里做NGUI的时候发现一个问题. 在Unity2D场景当中,一个精灵图片只要加上了Box Collider或者Box Collider2D,就可以相应OnMouseEnter和OnMou ...

随机推荐

  1. Android studio 如何让包有层次显示

    Android studio中我新建的包在原来包名后面显示,而我想让包名能层次展示: 方法: 点击如图部分,在弹出框中 去掉 ”compact empty middle package“前面勾

  2. linux内存碎片防治技术

    Linux kernel组织管理物理内存的方式是buddy system(伙伴系统),而物理内存碎片正式buddy system的弱点之一,为了预防以及解决碎片问题,kernel采取了一些实用技术,这 ...

  3. [转] 基本RS触发器

    在触发器中,最简单的触发器是基本RS触发器,它由两个与-非门(或者两个或-非门)来组成. 图5.2.1(a)是由与-非门构成的基本RS触发器,由图看出,基本RS触发器有两个输入端(和)和两个输出端(和 ...

  4. Kali 2.0最新国内源:阿里云,中科大

    版权声明:本文为博主原创文章,转载请注明来源. https://blog.csdn.net/liushulin183/article/details/51519628  刚刚要给kali装个中文输入法 ...

  5. win7上安装theano keras深度学习框架

    近期在学习深度学习,需要在本机上安装keras框架,好上手.上网查了一些资料,弄了几天今天终于完全搞好了.本次是使用GPU进行加速,使用cpu处理的请查看之前的随笔keras在win7下环境搭建 本机 ...

  6. textureCache中的等价路径问题

    自己的引擎里做了个简单的TextueCache,每次新创建一个纹理,先到TextureCache里查找有没有路径相同的,如果有就直接返回纹理,如果没有加载图片创建纹理并将图片路径缓存起来.另外为了标准 ...

  7. 解决fonts.googleapis.com不能访问,导致网页打不开

    最近,访问linode.com网站,突然发现网速好慢,老是打不开网页.分析一下网页才知道,原来使用了fonts.googleapis.com 打不开的原因就很明显了,咋办呢?百度啊,百度,最后,终于找 ...

  8. [k8s]容器化node-expolore(9100)+cadvisor(8080)+prometheus(9090) metric搜集,grafana展示

    Prometheus 的核心,多维数据模型 传统监控工具统计数据方式 指标多 - 需求1,统计app1-3,的(总)内存,则定义3个指标 container.memory_usage_bytes.we ...

  9. 【Android】3.7 UI控制功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 简介:介绍开关手势功能和显示隐藏UI控件 详述: (1)地图操作开关:平移.缩放.双击放大.双指操作 ...

  10. nyoj592 spiral grid

    spiral grid 时间限制:2000 ms  |  内存限制:65535 KB 难度:4   描述 Xiaod has recently discovered the grid named &q ...