关于NGUI的常见疑难问题的解答

1.NGUI的版本问题

NGUI作为世界上最流行的Unity界面制作插件,一直以来都更新迭代非常频繁,也许很多人对NGUI的版本很困扰,下面我们来了解一下于NGUI版本有关的问题
(1).我们可以在NGUI文件夹里看到有一个ReadMe的版本说明文件,在这个文件中标明了该NGUI是哪个版本(里面有NGUI最近几次版本更新的内容)。
(2).NGUI的版本,只有过一次革命性的更新,从NGUI2.X版本更新到NGUI3.X版本,NGUI3.0以后的版本只要版本号相差不远,功能几乎都一样。(需要特别说明的是,NGUI的版本不管怎么更新,它的知识点都大同小异,不用为版本担心)
(3).NGUI版本更新之后,如果要使用新版本的NGUI,可以将旧版本的NGUI删掉,导入新版本的NGUI,然后检查一下已经做好的UI有没有组件丢失的情况,如果有重新赋值一下组件。

2.导入NGUI资源包出错

(1).如果已经导入了NGUI的一个版本的资源包了,此时再次导入NGUI的资源包会有什么结果?
答:会根据路径替换掉同名文件,并额外导入新的文件。
(2).如果出错显示的是没有找到资源包就是你的资源包放在了一个有中文名称的文件夹路径下(请不要把资源包放到任何有中文名称的文件夹路径下)

3.如何创建两个UIRoot

NGUI严格意义上不能直接创建两套UIRoot,但如果碰到需要创建两套UI的情况,这是可以把场景中已经有的UI的UIRoot组件关闭(也就是把组件激活的勾去掉),然后在进行创建即可。

4. 如何让粒子在界面上正确显示

NGUI中,渲染的层级关系是由Depth决定的,但是,最本质的还是由渲染的Render Queue决定的,这是一个Shader中常见的参数。而在NGUI中每一个Panel上也有一个Render Q (设置成StartAt模式,Render Q越高的将会显示在越上层),如果想让粒子显示在两个Panel之间(粒子系统的Render Q一般是3000),只需要设置Render Q的StartAt模式,然后将值设置到3000以下,把另外一个Panel的Render Q的StartAt中的值设置到3000以上即可。
如果想粒子特效显示在最上层最好的办法是在设置一个摄像机,给这个粒子特效一个单独的Layer,让新加入的摄像机只渲染粒子所在的Layer,将这个摄像机的ClearFlags设为Depth Only,然后将渲染的Depth值设为最高的即可。

5.为什么在父物体上增加透明度动画,子物体没有跟着变化

其他动画(位移、缩放等动画)父物体都能带着子物体一起运动,但透明度动画为什么不能带着子物体一起透明呐?
因为透明度,可以理解为属于颜色的一种(RGBA4 种),他是NGUI中继承Widget的控件才有的属性,如Sprite、Texture、Label等组件,如果父物体身上没有任何组件继承Widget,则改变透明度也不会影响到子物体,这是只需给父物体增加一个Widget组件即可使父物体身上的透明度动画带着子物体一起变化了。

6.为什么动画播放一遍之后无法再次正常播放

Tween动画播放如果是Once类型的,那么他播放一次之后,这个动画就永远结束了,他的信息就永远是终点信息了,不管怎么去关闭激活这个动画组件,他都无法再次播放。
如果在项目中要多次播放但这个动画组件是Once但要多次调用,直接事先 把这个动画组件关闭禁用,然后在代码中调用播放函数进行播放,更好的深度控制动画。

7.为什么3D模型放到UIRoot下就变得看不见了

图片的单位是像素,而Unity是一个3D引擎,在Unity的世界里单位是米,而不是像素。为了让图片能在Unity中按照像素级别进行显示,就需要UIRoot这个组件来对整个UI进行缩放,原理就是将米转换为像素。
所以,当把一个长宽高一米的模型放到UIRoot下面之后,希望它被一起渲染时,会发现放到UIRoot下之后它看不见了,因为它的长宽高一米,被UIRoot变成了一个像素单位(可以理解为一米变成了一像素),所以看不见了,这个时候可以改变模型的Scale缩放比例来让它显示出足够的大小来。

8.为什么3DUI模式下,UI资源的尺寸Snap后和屏幕的大小比例不一致

有时候有这么一种情况:美术切出来一个资源源文件,它的大小按理说应该占屏幕十分之一的高度,但是放到NGUI中使用时,发现使用Snap还原它的原像素尺寸后,占屏幕的高度比例明显地比十分之一大或小,这种情况有两种原因。
(1).检查UIRoot的缩放类型和标准分辨率设置,看是否和美术人员作图使用的分辨率是一致的。一个游戏项目中一定会有一个标准参照分辨率。
(2).在NGUI某些版本中的3DUI中,会明显地出现这个问题,在这种情况下,只需要将NGUI的Camera的Filed Of View设为75即可。

9.为什么UI不收灯光影响

有时候我们希望NGUI的控件可以接收光照的影响,比如我们希望界面能够反光,但是,无论怎样调整灯光的位置和Layer,都无法影响到NGUI的控件,这是因为图片的Shader导致的,比如我们在制作图集的时候,在生成的图集的材质球默认的Shader是不受光照影响的。
我们以Sprite精灵图片为例,如果希望它受到光照影响,那么只做图集的时候,在生成图集的材质球(制作图集会生成3个文件,其中材质球就是其中一个)之后,将图集的材质球的Shader更换为一个可以反光的Shader,如Reflective等。

10.为什么创建的物体有BoxColider却无法接收事件

我们都知道NGUI接收用户操作事件几乎全部依赖于BoxCollider,但是,如果创建的物体有BoxCollider,却无法接收用户的操作事件,例如单击、拖动等,可以从一下几方面检查:
(1).检查这个物体的Layer是否被UICamera所在的相机渲染到。
(2).检查这个物体的Layer在UICamera组件中的EventMask中是否被屏蔽了。
(3).检查这个物体上层是否有另外一个具有BoxCollider的控件给挡住了。
(4).检查我们事件监听逻辑是否写的正确。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值