最近一个项目中关于NGUI部分的总结

最近一个项目中关于NGUI部分的总结

          在自己最近的一个项目中,软件的界面部分使用了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的消耗数量就又能降低不少了,相当于从使用两个图集变成只使用一个图集。

4、滚动条的制作。

其实是挺简单的,只不过自己因为一个属性的设置不到位,所以纠结了好一会,在此也记录下来。在UIDraggablePanel脚本下,有一个Scale属性,它的(x, y, z)三个值影响了被控Panel的滚动方向,需要结合被控Panel的滚动方向进行设置。如Panel在Y轴方向上滚动,那么y = 1,其它等于0。

NGUI部分的总结就是这么多,今后要养成一个习惯,时常总结自己平时在学习与工作中,在各种技术层面遇到的、解决的问题,或深或浅,或多或少,把它们妥善安置下来,哈哈。

最近一个项目中关于NGUI部分的总结,布布扣,bubuko.com

时间: 2024-10-09 03:55:02

最近一个项目中关于NGUI部分的总结的相关文章

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

在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作.在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累. 1.NGUI图集的使用. 此次是第一个自己正儿八经的制作完整图集的项目,感受颇深.在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量.最好就是自始至终都只使用同一个图集中的元素,这样的话,在界面制作上drawcall的消耗就只会受到Panel的划分以及字体与图集的混合使用这两部分的影响. 在制作图集时,可以分为两个制作方

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

VS2017也推出很久了,在单位的时候写linux的服务端程序只能用vim,这让用惯了IDE的我很难受. 加上想自己撸一套linux上的轮子,决定用VS开工远程编写调试linux程序. 在windows下编写静态库并在另一个项目中引用很简单 新建项目的时候选择静态库,进去把代码撸好,即可编译出静态库*.lib 随后在希望使用该静态库的项目中设置一下链接器"附加库目录"为"../Debug"(和你的输出路径有关),然后添加"附加依赖项"静态库名.l

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

vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 xxx.cs的文件直接生成为DLL文件 方法二:通过visual studio2010 新建立一个项目,选择为“类库”,然后在这里可以写用户自己的类. 二.引用DLL 在项目中,打开“解决方案资源管理器”,右键“引用”-->“添加引用”-->“浏览” 然后从主机的目录中找到DLL 之后在你的项目

可考虑在你下一个项目中使用的 50 个 Bootstrap 插件

可考虑在你下一个项目中使用的 50 个 Bootstrap 插件 作者 jopen 2014-11-12 09:54:16 阅读目录 1. Bootstrap Multiselect 2. Bootstrap Dialog 3. Bootstrap Confirmation 4. Bootstrap Tag Input 5. Bootstrap File Input 6. Bootstrap WYSIWYG 7. Bootstrap Select 8. pNotify 9. Bootstrap

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

一个窗体有三个文件,全部拷贝到新的项目中 ? 在新的项目中点击显示所有文件,然后右击导入的文件,点击包括在项目中,会自动修改颜色(此时还没有被识别为窗体) ? 重启这个项目,三个文件已经被识别出来了 ? ? 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 ? 我的在线论坛: http://csrobot.gz01.bdysite.com/ ? 问题交流: QQ:910358960 邮箱:[email protected]

一个项目中如果有重复代码,如何变成一个标签使其通用?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="Web.index" %> Page:所使用的是page页面,也就是所谓的aspx页面 AutoEventWireup:是否自动关联某些特殊事件(例如:Page_Load(),)默认true CodeBehind:属性并不是一个真正的 ASP.NET

自定义Button供整个项目使用,一个项目中只用这一个Button即可

在做项目的过程中会发现经常需要自定义Button以便实现图片和文字的随意摆放,这样整个项目中就会有很多多余的类,具体的缺点我先列举几个场景. 1.一个button里面放置一个图片和一个文字,上面是图片,下面是文字,产品要求图片的尺寸必须是30*30,这时我们可以自定义一个button把图片尺寸写死.突然有一天又来了一个新的需求,图片要求40*40,又要新建一个类,突然有一天又来了一个需求,图片在下面,又要新建一个类,突然有一天又来了一个需求,图片的大小要根据屏幕的尺寸变化而变化,又新建了一个类,

将一个项目中已有的文档添加到另一个项目中的方法

我本来是在第一个项目中打开Finder,然后直接拖拽到第二个项目中的. 但发现删除第一个项目,第二个项目中直接找不到那几个拖拽过去的文档了. 所以对于我的情况,也就是从网上搞来的代码,需要打开Finder,从第一个项目的文件夹中,将需要的文件(或文件夹)拷入第二个项目的文件夹中. 然后在第二个项目的Xcode界面中点击File -> Add Files to ... -------------------------------------------------------- Xcode这种设

AS将一个项目导入到另一个项目中

需求:有项目A,B.需要将B集成到A中,作为A的一个模块. 方法: 1.将B工程的app下面的build.gradle文字中  apply plugin: 'com.android.application' 改为 apply plugin: 'com.android.library', 意思是将B作为library. 2.然后继续将build.gradle中,defaultConfig {}中的  applicationId“xxxx”   注释掉,因为一个项目只能有一个applicationI