一、用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. FA_资产成批报废(流程)

    2014-06-08 Created By BaoXinjian

  2. PLSQL_标准删除的方式Delete/Drop/Truncate区别和比较(概念)

    2014-06-02 Created By BaoXinjian

  3. Linux内存初始化(一)

    一.前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众.另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成 ...

  4. Unix环境高级编程(九)信号

    信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法.每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号). ...

  5. ELK系统搭建流程

    ELK系统搭建流程 1. Logstash 1.1 安装 注:安装在需要收集日志的机器上. cd /data/softs sudo wget https://download.elastic.co/l ...

  6. hibernate validator工具类

    一.相关的gradle配置文件 // https://mvnrepository.com/artifact/javax.el/javax.el-api compile group: 'javax.el ...

  7. Spring 中属性配置

    1 注册自定义属性编辑器,方法一.使用BeanFactory, 则用户需要手动调用 registerCustomEditor(Class requiredType, PropertyEditor pr ...

  8. 怎么使用 ab.exe 测试多个url。 how to use ab.exe test many url

    from a commandline in windows: for /F %q in (list.txt) DO ab -n 1000 https://test.com/search?%q   I ...

  9. kernel生成针对x86架构的tags和cscope数据库

    最近下载了kernel的最新源码4.15版,但下载后的linux内核不仅包含了x86架构的函数还包含了如:arm.powerPC等等其他架构的函数,如果直接生成tags文件,将来查找时,多种架构的同名 ...

  10. 【Android】3.23 示例23--瓦片图功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 地图SDK自v3.6.0起,新增瓦片图层(tileOverlay), 该图层支持开发者添加自有瓦片数 ...