本篇文章和大家介绍的是NGUI中的基础组件UIWidget,UIWidget是所有UI组件的基类,持有UI组件的大小、锚点、顶点、颜色,Alpha等所有跟渲染相关的属性。

关键属性:

protected Pivot mPivot //锚点

protected Color mColor; //颜色

protected int mWidth;//组件宽度

protected int mDepth = 0;//显示深度,这个深度是相对于父节Panel的

public UIGeometry geometry;//Geometry对象用来保存顶点,位置,顶点UV,顶点颜色等信息

public UIDrawCall drawCall;//当前UIWidget所使用的绘制对象

protected bool mChanged = true;//记录所有几何和渲染属性是否发生变化 如果发生变化就要在UpdateGeometry里面重新计算顶点信息

public bool fillGeometry = true;//是否允许填充顶点信息

public override Vector3[] localCorners //get方法 获得UIWidget的4个顶点的局部坐标,顺序是:左下,左上,右上,右下

public override Vector3[] worldCorners//get方法 获得UIWidget的4个顶点的世界坐标系坐标,这个方法实际上就是将局部坐标转化为世界坐标

关键方法:

一、UpdateGeometry() 核心方法

更新UI组件的顶点信息。但是这里不并执行渲染,这个方法只是更新了UIWidget渲染所需要的数据,然后Panel会把这些数据传给DrawCall,让DrawCall执行渲染。简单说就是UIWidget负责计算数据,DrawCall把计算好的数据拿来渲染。

部分代码:

//获得通过计算的最终Alpha值,如果不为0要跟上层节点进行混合计算

float finalAlpha = CalculateFinalAlpha(frame);

//是否发生了变化

if (mChanged)

mChanged = false;

//如果Ahpha值大于最小值

if (mIsVisibleByAlpha && finalAlpha > 0.001f && shader != null)

bool hadVertices = geometry.hasVertices;

//是否允许填充顶点信息

if (fillGeometry)

//清空顶点信息

geometry.Clear();

//填充顶点信息

OnFill(geometry.verts, geometry.uvs, geometry.cols);

//是否有丁点

if (geometry.hasVertices)

if (mMatrixFrame != frame)

//通过计算得到相当于父Panel的矩阵

mLocalToPanel = panel.worldToLocal * cachedTransform.localToWorldMatrix;

mMatrixFrame = frame;

//把当前的顶点坐标 转换为相对于父Pane的顶点坐标

geometry.ApplyTransform(mLocalToPanel);

mMoved = false;

return true;

return hadVertices;

else if (geometry.hasVertices)

if (fillGeometry) geometry.Clear();

mMoved = false;

return true;

二、OnFill() 方法

填充顶点信息:计算出顶点信息,然后把顶点信息填充到geometry里面,不过在这里OnFill是空的。因为每种组件计算顶点的方式都不一样,所以OnFill由子类来实现。任何几何和渲染属性(比如锚点,大小,颜色,Alpha,位置)发生变化,都会导致这个方法被调用,通常这个方法也是最消耗cpu的。特别是一些Tween动画会导致OnFill反复调用,所以建议附加在UI上的动画时间不宜过长。感觉这个地方优化空间还是挺大的。

UIGeometry:用来保存顶点信息的类,这个类很简单,主要属性有:

public BetterList<Vector3> verts = new BetterList<Vector3>();//保存顶点位置信息

public BetterList<Vector2> uvs = new BetterList<Vector2>();//保存UV坐标

public BetterList<Color32> cols = new BetterList<Color32>();//保存颜色信息

NGUI(3) UIWidget相关推荐

  1. [cb]NGUI组件基类之 UIWidget

    UIWidget NGUI的UIWidget是所有组件的基类,它承担了存储显示内容,颜色调配,显示深度,显示位置,显示大小,显示角度,显示的多边形形状,归属哪个UIPanel.这就是UIWidget所 ...

  2. NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层原理

    NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层原理 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 之 ...

  3. Unity性能优化方法总结

    1 资源分离打包与加载 游戏中会有很多地方使用同一份资源.比如,有些界面会共用同一份字体.同一张图集,有些场景会共用同一张贴图,有些会怪物使用同一个Animator,等等.可以在制作游戏安装包时将这些 ...

  4. [UnityUINGU][UGUI]如何新建一个像《守望先锋》消息的信息框

    <守望先锋>消息的信息框,微X的聊天框也可以. 使用Unity的NGUI,就必须用到UI 中的图片自己适应 文本的大小. 也就是说调整 文本的大小,或者是文本内的文字的行数,改变 对应的背 ...

  5. NGUI全面实践教程(大学霸内部资料)

    NGUI全面实践教程(大学霸内部资料) 试读文档下载地址:链接:http://pan.baidu.com/s/1jGosC9g 密码:8jq5 介绍:NGUI全面实践教程(大学霸内部资料)本书是国内N ...

  6. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

  7. 关于Unity中NGUI的背包实现之Scrollview(基于Camera)

    基于UIPanel的scrollview实现方式在移动设备上的性能不如基于camera的方式. 因为UIPanel的scrollview实现方式要渲染很多的道具图,性能自然就降低了. 如果是用第二个摄 ...

  8. Unity+NGUI性能优化方法总结

    原文地址:http://blog.csdn.net/zzxiang1985/article/details/43339273 一共9招. 1 资源分离打包与加载 游戏中会有很多地方使用同一份资源.比如 ...

  9. NGUI渲染机制——从顶点和UV说起

    相信来到这里的你和我一样好奇NGUI是如何将我们的原始输入加工成为最终呈现出来的样子的,一言以蔽之,这个过程就是生成顶点.UV.颜色等数据并将它们传入Mesh中使用MeshRenderer进行渲染,但 ...

最新文章

  1. Openoffice 安装与配置
  2. 泰坦尼克号数据_看完泰坦尼克号生还数据之后,你还会认为是妇女和儿童先走吗?...
  3. 4.QPixmap,QTransform,绘图函数的使用
  4. Boost asio学习笔记之二—— 网络编程
  5. OSPF 多进程实验(1)
  6. mcq 队列_基于人工智能的智能体能力倾向问答(MCQ) 套装1
  7. emoji表情引发的JNI崩溃
  8. python WindroseAxes 报错 has no attribute ‘Appender‘
  9. css 实现16:9比例自适应手机尺寸,可设置任意比例
  10. SpringMVC扩展
  11. ORB_SLAM3_一张图说明ORB-SLAM中的ORB特征提取和图像匹配算法流程
  12. 深圳宝安学区房_查查吧深圳学区地图
  13. Windows 下利用cWrsync同步
  14. 计算机带来好处坏处的英语作文,关于电脑的好处与坏处的英语作文
  15. java编程进阶类_进阶Java编程(9)反射与类操作
  16. gcc编译出错collect2: error: ld returned 1 exit status的解决办法
  17. C# - 2017微软校园招聘笔试题 之 MS Recognition[待解决]
  18. Unicast RPF,单播逆向转发
  19. 电脑键盘上的灰尘如何清除
  20. TDOA的matlab仿真

热门文章

  1. Silverlight 2.0中文學習資源集萃
  2. 是什么诱发了身体炎症
  3. win7计算机u盘不显示盘符,Win7电脑插入U盘不显示盘符?电脑盘符不正常显示解决技巧...
  4. 骑士周游 JAVA实现
  5. MYSQL 中 OR 走不走索引
  6. 高维信息降维可视化常用算法比较
  7. 怎么快速学好数据分析师
  8. 那李固和众人 水浒传
  9. linux 下安装ecos开发环境,虚拟实验室eCos开发环境的配置(Linux)
  10. 激励案例:90后创办Keep,凭什么15个月用户3000万