美文网首页Unity小功能
跟诸子学游戏 unity3d 使用NGUI需要注意的问题

跟诸子学游戏 unity3d 使用NGUI需要注意的问题

作者: 诸子百家谁的天下 | 来源:发表于2018-03-06 10:45 被阅读19次

    问题总结:

    (1)如果已经导入了NGUI的一个版本的资源包了,那么在此导入NGUI资源包会有什么后果呢?

    这个会根据路径替换掉同名文件,并额外导入新的文件

    (2)导入解压后,并没有弹出资源包内容预览窗口,而是在Unity编辑器窗口报错了怎么办?

    具体看什么错误了,一般出现无法解压包的报错的时候,大家就需要检查下导入的路径是否包含了中文,这个是很多时候都会出错的问题。

    (3)如何创建两个UIRoot

    NGUI中严格意义上是不能直接创建两套UI的,如果已经创建了一个UI,不管是3D还是2D的UI,那么,Unity顶部NGUI菜单中创建UI的选型都会变灰无法再创建。但是,也许会碰到需要两套UI的情况,这个时候可以把场景中已有的UI关闭,就是去掉激活的勾选按钮,然后再进行创建即可。一般情况下使用2套UI,一个UIRoot进行制作,UI替换使用NGUI中的图集切换以及纹理(图片)切换,如下图 

    将所有需要使用图集,纹理切换的控件打上tag,获取之后整体切换atlas和texture.

    NGUI多套UI切换原理

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

    NGUI中,渲染的层级关系是由Depth决定的,但是最本质的还是有渲染的RenderQueue决定的,这是一个shader中常见的参数,在NGUI中,每一个Panel上也有一个RenderQ的设置项,RenderQ越高的将会越上层显示。

    粒子系统的RenderQ一般是3000,所以,如果希望粒子处于两个Panel之间的话,只需要将其中一个Panel的RenderQ改为StartAt模式,将值设为3000以下的值,然后将另一个Panel的RenderQ设为3000的以上的值,就可以让粒子在两个Panel之间显示了。当然如果只需要让粒子显示在最上层,最简单的办法就是加入一个摄像机,给这个粒子设置一个单独的Layer,让新加入的摄像机只渲染粒子所在的Layer,将这个摄像机的ClearFlag设为Depth Only,然后将渲染的Depth值设为最高的即可。

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

    有时候一个父物体下面有多个子物体,可以利用父物体上的动画带着子物体一起缩放和位移,但是有时候透明度动画却不会带着子物体一起变为透明,这是因为透明度是属于颜色的一种,它是集成了NGUI中Widget的控件才有的属性,例如sprite,label等,如果父物体身上没有任何组件集成Widget,则改变透明度不会影响到子物体,这种情况下,如果又不能故意为父物体赋予一个Sprite,Texture,Label组件的话,那么可以给父物体增加一个Widget组件,增加的方式,是AddComponet,NGUI,UI,NGUIWidget,然后父物体身上的透明度动画就会带着物体一起变化了。

    (6)动画为什么有时候播放一遍之后无法再次正常播放

    首先动画Tween如果是Once类型的,那么它播放一遍之后,这个动画就永远结束了,它的信息就永远是终点信息了,不管怎样去关闭再激活这个动画组件,它都无法再次进行播放。如果要多次播放动画,可以实现将动画组件关闭,然后在需要播放的地方使用代码去对它进行手动播放,具体操作为在unity3d引擎中将组件的enabled设置为false

    ,在实际项目中如果要使用Tween动画,如果这个动画是Once类型并且需要多次调用,那么最好事先将动画组件关闭禁用,然后用代码进行控制,可以更好的控制动画。

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

    遇到这种情况,需要检查UIRoot的缩放类型和标准分辨率设置,看是否和美术人员作图使用的分辨率是一致的,一个游戏项目中一定会有一个标准的参照分辨率。同时在NGUI的某些版本中的3DUI中,会明显的出现这个问题,在这种情况下,只需要将NGUI的Camera的Filed Of View设为75即可,UI分辨率需要在项目开启时和美术人员讨论,开工之后整体分辨率一般不做修改.

    (8)UI为什么不收灯光影响

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

    (9)为什么3D模型放到UIRoot下就变得看不见了

    图片的单位是像素,而Unity是个3D引擎,在Unity的世界里单位是米,而不是像素。为了让图片能再Unity中按照像素级别进行显示,就需要UIRoot这个组件来对整个UI进行放缩,原理就是将米转换为像素,所以把一个长宽高为1米的放到UIRoot下就被渲染成1个像素了,所以看不见了。

    (10)为什么Depth更大的图片反而被Depth小的图片遮住

    在NGUI中,如果遇到上面的情况,首先检查一下这两个图片是不是属于不同的Panel,因为不论两个图片的Depth怎么设置,具有更高的Depth的Panel的图,会永远遮挡住更低的Depth的Panel的子物体。如果Panel的Depth的图片本身的Depth的关系都没有问题,那么检查一下RenderQ的值.

    (11)怎么判断点中的是UI

    if(UICamera.IsOverUI){//鼠标光标在UI上,不能影响其他的内容}

    (12)文字不清晰明亮怎么解决呢?

    使用Label时,发现文字不论调多大都不够清晰,明亮,有可能是以下几种情况。

    a.使用的静态字体,因为静态字体就像调用Sprite一样,所以当字体太大时,图片放大了自然就会模糊,所以一般我们还是使用动态字体或者把静态字体分辨率调更好这样可以获得更好的效果。

    b.把字体的渐变去掉

    c.调整项目质量,就是我们的Quality设置。

    (13)为什么创建的物体有BoxCollider却无法接收事件

    凡是需要触发事件的,都基本需要boxcollider,但是如果boxcollider无法接收用户操作了那么我们就需要检查如下的内容了

    a.看看物体的layer是否被UICamera所在的相机渲染到

    b.检查这个物体的Layer在UICamera组件中的EventMask中是否被屏蔽了

    c.检查这个物体上层是否有另一个具有BoxCollider的控件给挡住了

    d.检查我们的事件监听逻辑是否写得正确

    (14)关于ScrollView滑动的问题为什么滑动了没有反应?

    a.检查一下ScrollView下包含的内容是否有BoxCollider并能够正常接收事件,如果没有BoxCollider或者BoxCollider不能正常接收事件,则无法拖动ScrollView下的内容来滚动浏览。

    b.检查ScrollView下包含的内容是否有DragScrollView组件,ScrollView要正常工作,必须要内容物体上有这个组件,这个组件和BoxCollider缺一不可.

    (15)ScrollVIew的滑动方式和效果不是自己想要的

    滑动时,希望它不要弹一下,或者到合适的程度不能滑动了等,可以在ScrollView组件中进行设置.

    相关文章

      网友评论

        本文标题:跟诸子学游戏 unity3d 使用NGUI需要注意的问题

        本文链接:https://www.haomeiwen.com/subject/yljlfftx.html