NGUI中深度depth和z轴关系的小试验

来源:互联网 发布:淘宝入门视频教程 编辑:程序博客网 时间:2024/05/27 00:48
<ul big_img="" j_gallery_list"="">










  • 其实上面的东西总结出来就一句话:(啰嗦那么多,总结却这么少,好没成就感,呵呵)
    在相同Panel下,相同Atlas中的Sprite才受Depth控制,其他情况则受z轴控制,但同时又受前者影响。 
     
    列个表的话就是:
    1、相同panel    相同atlas     sprite受depth控制
    2、相同panel    不同atlas     sprite受z轴控制    (同时受1的影响)
    3、不同panel    相同atlas     sprite受z轴控制    (同时受1的影响)
    4、不同panel    不同atlas     sprite受z轴控制    (同时受1的影响)

         不过要特别注意的是,虽然depth控制的范围看似较少,但它却占主导地位,是最常被用到的,这是因为NGUI基于Atlas,只有在1无法达到目的的时候,才会去用其他的。 而且在较复杂的情况时它也是易被忽略的,也就是2、3、4括号中的“同时受1的影响”。比如在2中,相同panel下,有三个sprite:A、B、C,但A和B的Atlas是相同的,C是的Atlas是另一个,此时即使用z轴控制,也无法将C放到AB之间,这也是上楼中3中所提到的问题。

    此外关于字体,感觉要分两方面,一个是英语等外语,一个是中文。

    对于英文,因为就那些有限的字母(因为只会点英语,所以不知道是不是有的外语制作起来也很繁杂),所以可以和图片sprite放到一起,官方的atlas中就是这样的分布,把字体和图片打包在了一起。这种情况下我感觉字体和图片是在同一个atlas里面的,使用起来也只是占1个drawcall。而同一个atlas中的sprite,则可用depth来调整深度。比如上面1234例子里的Label就是英文字体,它是和Dark这个图片同在SiFi图集中,所以在相同panel下可用depth来控制显示顺序。但此时想再插入一个其他atlas中的sprite到他俩之间的话,就会不成功,因为他俩是一个atlas中的。
    而不同的panel下就只能用z轴来控制了。比如用SiFi的Label,此外再用wooden图集的button,他俩只用depth是没法控制的。如下图中,后缀表示label的depth是10,而button的depth是0,但button还是挡住了label,这和上面说的第4条一样。




    此外对于将文字打包到Atlas中,是在制作字体是,在FontMaker中选择目标Atlas,此时就会将文字打包到了此Atlas中。不过要注意,这个操作会修改Atlas,所以不要弄错了
    如下图,就是将官方的Arimo14字体打包到了DiShuTest图集中,也就是在Output选项中选择Atlas。而or select这项中的字体会被替换掉,可以不选,当然Atlas在不打包字体的时候也可以不选


    而对于中文,文字因为不能像英文那样用单个的字母来组成,所以为了能显示大多数的常用字,一般都是用单独的UIFont来制作,可看做是一个atlas,这种情况下,字体的atlas和其他的atlas就是在不同的图集了。此时可用z轴来控制。
    比如下图中,用了3个Atlas,都放到同一个panel下,后缀表示的depth,注意左边的那4个是参照,只为了能看清都是那些东西。分别是:
    Atlas1,使用一个sprite,人物为程咬金,depth为3
    Atlas2,实际是一个中文Font字体的label,也看做是图集,depth是2
    Atlas3,最后两个精灵都是用的Sift中的,depth是0和1
    然后把它们都放到一个panel下,而你做试验的时候可能显示的顺序不一样,但不要紧,我们关注的是它们是不是以depth的顺序排列了,而看一下就知道,它们并没按顺序排列,比如NGUI的depth是1,但它却显示在了最上面。

    现在用z轴控制他们的显示顺序和depth一样,很容易就做到了。

    这些试验都是在比较简单的情况下做的,所以可能并不真的对,所以如果有错误的地方请指出。
  • 0 0