
ngui源码学习日志
cbbbc
这个作者很懒,什么都没留下…
展开
-
NGUI源码分析(一) 核心类UIDrawCall
前阵子一直想研究一下NGUI的源码,打开一看代码很多代码很庞大不知道从何入手,然后我看代码的方法搞错了,总想一下子就把类之间的关系理清楚,看到局部的代码没看懂又老是不自觉的沉陷其中,结果是这里看懂一点,那里又没看懂,搞的我一知半解又一头雾水,结果我放弃了。后来无意中有个网友告诉我,研究代码一开始不能思路铺的太开,一开始应该从最核心的部分看起,然后一层一层的向外围展开,一次只看一个类或一个方法,别想转载 2017-04-28 16:39:45 · 2967 阅读 · 0 评论 -
Unity在NGUI中默认动态字体Arial字体显示不完整解决方案
Unity工程中的动态字体使用很方便,在一开始的工程中,为了减小游戏包的大小,我们使用的是Unity内置的默认Arial字体,但是在游戏上线测试后,很多玩家反馈个别机型字体显示不完全,主要集中在 小米1代,OPPO,金立,中兴等个别机型中。刚开始以为是NGUI的问题,经过几天的问题排查,发现原来是Arial字体惹的祸。Arial字体是西文字体,并不包含中文字库,在Unity中如果使用默认的转载 2017-05-05 20:23:29 · 1942 阅读 · 0 评论 -
NGUI所见即所得之UIPanel
之前在NGUI所见即所得之UIWidget , UIGeometry & UIDrawCall 文中就这样用过这样的一个例子: UIGeometry好比为煮菜准备食材,UIDrawCall好比是煮菜的工具(锅,炉子等),UIPanel就是大厨了决定着什么时候该煮菜,UIWidget(UILabel,UISprite和UITexture)是这道菜怎么样的最终呈现。转载 2017-05-05 19:12:40 · 531 阅读 · 0 评论 -
NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层
之前项目中用的NGUI的版本是3.0.7 f3,开始的时候感觉没有什么问题,直达最近项目UI的完成度比较高时,就突然出现掉帧很严重的现象,即使只有一个UI打开(其他都是active = false的情况下),打开profier,发现UIPanel LateUpdate 竟然占了CPU使用率的50%左右,这太恐怖了,虽然之前看到过有吐槽NGUI的机制的,但是我觉得为了保证通用牺牲一些性能还是在所难免转载 2017-05-05 17:36:19 · 887 阅读 · 0 评论 -
UIWidget是所有UI组件的抽象基类,作为基类当然定义了必须的成员变量和函数,接触过MFC或其他UI组件开发,想必都知道有一堆参数设置,尤其是Visual Studio的可视化界面,
UIWidget是所有UI组件的抽象基类,作为基类当然定义了必须的成员变量和函数,接触过MFC或其他UI组件开发,想必都知道有一堆参数设置,尤其是Visual Studio的可视化界面,简直太丰富了,UIWidget要当UI组件的爹就必须得具备这些,下面就一一介绍: Pivot Pivot,这个枚举,其实定义了GameObject中心坐标在整个组件的位置,这个跟UIStre转载 2017-05-05 17:03:45 · 924 阅读 · 0 评论 -
NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)
上图是一个简要的NGUI的图形工作流程,UIGeometry被UIWidget实例化之后,通过UIWidget的子类,也就是UISprit,UILabel等,在OnFill()函数里算出所需的Geometry缓存(顶点数,UV,Color,法线,切线)。PS:之所以要生成这些数据,是为了之后生成mesh来渲染而UIPanel,通过遍历自己子类下所有的UIWidget组件(已经按深度排序),先创转载 2017-05-05 16:30:42 · 652 阅读 · 0 评论 -
NGUI源码分析(七) Panel,Widget,DrawCall 三者之间的关系
前几篇介绍了分别介绍了Panel,Widget,DrawCall等,但是它们之间的关系具体是怎样的没有仔细讲,下面通过一个测试来说明它们之间的关系。测试非常简单:1.新建一个UIRoot ,添加几个Panel和几个Sprite,结构如下:其中sprite1-4分别属于4个不同的图集点击UIRoot的Panel属性下的"Show Draw Calls"会发现此时pan转载 2017-05-03 17:53:22 · 1440 阅读 · 0 评论 -
NGUI源码分析(六) UIProgressBar和UISlider
UISlider继承于UIProgressBar 它们是非常重要和实用的类,UIProgressBar它实现了进度条的功能,UISlider在UIProgressBar的基础上实现了拖拽 UIProgressBar 介绍:一.重要属性: //方向:左到右,右到左,下到上,上到下 public enum FillDirection { LeftToRight,转载 2017-05-03 17:50:27 · 879 阅读 · 0 评论 -
NGUI源码分析(五) UIPanel
UIPanel可以看成一个集合,一个Panel可以包含多个Widget.负责排序和更新widget,同时控制widget在什么时候绘制图形。下面具体看看是如何实现的.一.重要属性:static public List list = new List(); //保存所有的panel public RenderQueue renderQueue = RenderQueue.A转载 2017-05-02 20:33:46 · 1407 阅读 · 0 评论 -
NGUI源码分析(四) 关于Anchor
老版NGUI的Example 1里面提供演示NGUI中使用UIAnchor组件实现GUI对齐功能,新版本的NGUI的Example例子貌似不再使用UIAnchor了,而是演示Widget内置的Anchor的新功能,我学Uinty3d的时候,NGUI已经是比较新的版本了,所以这里分析一下新Anchor的功能.Anchor其实并不复杂,Anchor的意思就是锚点或抛锚,只要设置了UIWidget的An转载 2017-05-02 19:41:11 · 1198 阅读 · 0 评论 -
NGUI源码分析(三) UISprite
Sprite继承了UIWidget,一个Sprite就是图集里面的一个基本元素,是一个非常重要和经常使用的类重要属性:UIAtlas mAtlas;//当前Sprite用到的图集UISpriteData mSprite; //Sprite数据 记录Sprite在图集中的位置,和大小,边距等信息 Material material //材质 如果图集不为空 使用图集的材质 一转载 2017-05-02 17:35:49 · 1093 阅读 · 0 评论 -
NGUI源码分析(二) UIWidget
UIWidget是所有UI组件的基类,持有UI组件的大小,锚点,顶点,颜色,Alpha等所有跟渲染相关的属性。关键属性: protected Pivot mPivot //锚点 protected Color mColor; //颜色 protected int mWidth;//组件宽度 protected int mDepth = 0;//显示转载 2017-05-02 16:53:32 · 1782 阅读 · 0 评论 -
分析游戏项目中NGUI的组织结构
前些天做完了自己的练手项目,发现做的好乱,特别是UI部分,结构很混乱,一个Panel下面放了N多个widget,也没用把组件保存为Prefab。这两天看了一下款商业项目的UI部分的代码,发现比我的合理多了,特此总结一下这款游戏的UI结构。 1.保存方式: 所有的面板,弹出窗口等都保存为prefab,并且按模块来划.比如: 竞技场下模块下有3个窗口,就划分为3个prefab转载 2017-04-28 17:38:21 · 582 阅读 · 0 评论 -
Unity3D开发(七):NGUI之UICamera控制触摸,鼠标事件
1. UICamera 功能介绍主要包括UI事件的监听,分发,覆盖范围为此Camera渲染的所有GameObject。事件源包括:鼠标,触摸,键盘,手柄。事件包括:悬停,按下/抬起,选中/取消选中,点击,双击,拖拽,释放,文本输入,Tips显示,滚轮滑动,键盘输入。 2. UICamera 实现流程(1)属性 Event Type:包括UI,World,用于转载 2017-05-06 12:04:31 · 955 阅读 · 0 评论