在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作。在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累。

1、NGUI图集的使用。

此次是第一个自己正儿八经的制作完整图集的项目,感受颇深。在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量。最好就是自始至终都只使用同一个图集中的元素,这样的话,在界面制作上drawcall的消耗就只会受到Panel的划分以及字体与图集的混合使用这两部分的影响。

在制作图集时,可以分为两个制作方向。一是以NGUI自带的某一图集为基础,将自己需要使用的元素添加到该图集中。这样做的好处是可以在界面制作时使用NGUI提供的一些元素。再一个方向就是制作一个全新的图集。这适合于对界面进行整体设计的情况,全部的界面元素都进行重新设计,然后制作成图集来使用。

另外,在使用NGUI自带的图集时,要注意在该图集的副本上进行新元素的添加、删除操作,避免对NGUI自身造成不必要的影响。

2、界面元素深度的设置与drawcall的控制。

在使用NGUI制作界面时,如果我们自始至终都使用唯一的图集,界面上的文字使用动态字体制作,那么drawcall的消耗数量就只与Panel的划分以及同一个Panel下图集元素与字体元素的深度设置排列有关了。

我们知道,在NGUI中,它消耗的drawcall是以每个Panel为独立计算单位进行计算的。所以我们只要把一个Panel下的drawcall计算方式搞明白,然后再对Panel的划分加以控制,就能都达到有效控制drawcall的目的了。

在同一个Panel之下,如果所有的界面元素都使用同一个图集来制作,而且没有动态字体的“干扰”,那么该Panel消耗的drawcall数量就是1。这可以通过鼠标选中UIPanel的游戏对象来查看drawcall的使用情况,如图所示(只消耗了1个drawcall)

还是在同一个Panel之下,如果在图集使用过程中,还配合使用了动态字体,或是使用了不同的图集,那么该Panel下drawcall的计算就和其下元素的深度设置密切相关了。一句话总结就是:为同一图集的元素设置一段独立的深度值区间,不同的图集元素或动态字体使用不同的深度值区间,尽量不要穿插。举例说明:

在同一个Panel之下,假设

深度值区间 (-200, -100),图集1元素使用;

深度值区间(-100, 0),图集2元素使用;

深度值区间(0, 100),图集3元素使用;

深度值区间(100, 200),图集4元素使用;

按照上述情况计算,该Panel的drawcall值为4。但是,如果我们在使用时,不同的图集或动态字体的深度值出现了穿插,那么drawcall会出现猛增的情况,因为这里的drawcall计算方式是在使用的整个深度区间上,每遇到一个不同的图集,drawcall就会加1,不论该图集之前是否使用过,与此没有关系,都会加1。这就要求我们,在不影响功能实现的前提之下,对界面元素的深度值进行合理的排布设置。

3、动态字体的使用。

这是一个自己还没有解决的问题,就是把字体也融入到图集之中,就像NGUI使用的方式那样。因为如果这么做,那么drawcall的消耗数量就又能降低不少了,相当于从使用两个图集变成只使用一个图集。

(转)最近一个项目中关于NGUI部分的总结(深度和drawCall)的更多相关文章

  1. eclipse中将一个项目作为library导入另一个项目中

    1. github上搜索viewpagerIndicator: https://github.com/JakeWharton/ViewPagerIndicator2. 下载zip包,解压,eclips ...

  2. 解决tomcat下面部署多个项目log4j的日志输出会集中输出到一个项目中的问题

    在一次项目上线后,发现了一个奇怪的问题,经过对源码的阅读调试终于解决,具体经过是这样的: 问题描述:tomcat7下面部署多个项目,log4j的日志输出会集中输出到一个项目中,就算配置了日志文件的绝对 ...

  3. 当一个项目中同时存在webroot和webcontext时

    当一个项目中同时存在webroot和webcontext时,注意一定要删除那些没在使用的.还有要发布其中一个想要的目录到服务器中,具体方法是  选择相应工程-----properties-----de ...

  4. VS编译linux项目生成静态库并在另一个项目中静态链接的方法

    VS2017也推出很久了,在单位的时候写linux的服务端程序只能用vim,这让用惯了IDE的我很难受. 加上想自己撸一套linux上的轮子,决定用VS开工远程编写调试linux程序. 在window ...

  5. vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

    vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 ...

  6. 一个项目中:只能存在一个 WebMvcConfigurationSupport (静态文件失效之坑)

    一个项目中:只能存在一个 WebMvcConfigurationSupport 在一个项目中WebMvcConfigurationSupport只能存在一个,多个的时候,只有一个会生效. 静态文件访问 ...

  7. 解决:一个项目中写多个包含main函数的源文件并分别调试运行

    自己在学c++的时候,一个项目中的多个cpp文件默认不允许多个main函数的出现,但是通过选项操作能够指定单个cpp文件进行运行,如下: 1.此时我就想运行第二个cpp文件,我们只需要把其他的两个右键 ...

  8. Python计算一个项目中含有的代码行数

    最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...

  9. C#.NET常见问题(FAQ)-程序如何把窗体文件从从一个项目中复制到另一个项目

    一个窗体有三个文件,全部拷贝到新的项目中   在新的项目中点击显示所有文件,然后右击导入的文件,点击包括在项目中,会自动修改颜色(此时还没有被识别为窗体)   重启这个项目,三个文件已经被识别出来了 ...

随机推荐

  1. Android 内存泄露测试数据处理--procrank,setprop,getprop(转)

    1.Android内存测试常用的几个概念. VSS--virtual set size 虚拟耗用内存(包含共享库占用的内存)RSS--Resident set size实际使用的物理内存(包含共享库占 ...

  2. 树莓派 Windows10 IoT Core 开发教程

    入门指引 现在让我们把LED连接到安装了Windows10 IoT Core 的硬件设备,并创建一个应用程序来让它们闪烁. 在Visual Studio中加载工程 首先在这里找到例程,这里有C++和C ...

  3. JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件,事件参数

    本篇体验JavaScript事件的基本面,包括: ■ 事件必须在页面元素加载之后起效■ 点击事件的一个简单例子■ 为元素注册多个点击事件■ 获取事件参数 ■ 跨浏览器事件处理 □ 事件必须在页面元素加 ...

  4. ASIHTTPRequest-断点续传需要原网站支持!

    转:http://zyc-to.blog.163.com/blog/static/17152400201110221114526/ 从0.94版本开始,ASIHTTPRequest可以恢复中断的下载 ...

  5. Oracle的tnsnames.ora 监听配置文件详解

    监听配置文件 为了使得外部进程 如 CAMS后台程序 能够访问 Oracle 数据库 必须配 置 Oracle 网络服务器环境 配置 Oracle 网络服务器环境是通过配置 listener.ora ...

  6. PlaceholderTextView

    PlaceholderTextView 效果 源码 https://github.com/YouXianMing/UI-Component-Collection 的 PlaceholderTextVi ...

  7. 如何选择JAVA培训机构,兼议什么样的人适合培训机构

    首先,利益相关,本人就是培训机构创办者兼讲师,但这不妨碍我对此发表看法. 我们先来看什么样的人适合培训机构?要回答这个问题,需要先换个角度.这个角度就是,你学习一门语言的动机是什么?99%的人的回答是 ...

  8. Linux Shell 裡一些很少用到卻很有用的指令

    Linux Shell 裡一些很少用到卻很有用的指令 2009年11月30日 13:53:00 yaoyasong 阅读数:414   Linux Shell 裡一些很少用到卻很有用的指令 你是不是已 ...

  9. 单元测试利器 JUnit 4

    引言 毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果.单元测试正是验证代码行为是否满足预期的有效手段之一.但不可否认,做测试是件很枯燥无趣 ...

  10. ImportError: No module named caffe.proto解决办法

    原文   https://blog.csdn.net/lanyuelvyun/article/details/73628152 在用自己的数据训练基于caffe的SSD模型的时候,我们需要将图片数据转 ...