原文 NGUI三大基础机制:https://gameinstitute.qq.com/community/detail/109914

本文介绍以NGUI的版本是3.6.0版本为基础

基础介绍

  NGUI的UIWidget, UIDrawCall,UIGeometry和 UIPanel等基础脚本。

Ø  UIWidget是UI的基础组件(UILabel,UISprite)的基类,含有组件的基本信息(width,Height,color 锚点等)

Ø  UIGeometry是UIWidget的几何数据,记录了顶点坐标,贴图的UVs和颜色等信息

Ø  UIDrawCall是将多个UIWidget的UIGeometry组合起来一起绘制

Ø  UIPanel 用于管理UIWidget、UIDrawCall等,实现界面的渲染裁剪、更新。

Ø  UIRoot  UI界面的根目录,用于分辨率适配和事件广播。

MeshFilter 和Mesh介绍:

  MeshFilter网格过滤器用于从你的资源中获取网格信息(Mesh)并将其传递到用于将其渲染到屏幕的网格渲染器当中。MeshFilter 与 Mesh 联合使用,使模型显示到屏幕上。要想在场景中看到这个网格(mesh),还需要为游戏对象(GameObject)添加一个网格渲染器(MeshRenderer),它应该是自动被添加的。但是如果你将它从你的对象中移除。你必须手动重新添加它。如果网格渲染器(MeshRenderer)不存在,这个网格仍将存在于你的场景中。但是它将不会被绘制。

  NGUI的渲染机制

  要详细的了解NGUI渲染机制,首先需要打开NGUI隐藏的渲染节点,秘密就在在UIDrawCall.Create(string name) 中的HideFlags.HideAndDontSave, typeof(UIDrawCall));这一行代码。打开在UIDrawCall.cs文件,打开SHOW_HIDDEN_OBJECTS宏定义。就可以看到在渲染过程中,每一个UIDrawCall对应一个把UIDrawCall作为组建的节点【在编辑器可见】如图所示:

从上面的图就可以看出来,NGUI渲染实际上就是对通过对Mesh的渲染实现的。整个NGUI的渲染过程就把图片和文字按照一定顺序和规则组织成一系列的Mesh,然后通过Unity自身的渲染流程实现渲染。

  NGUI的渲染流程

  渲染过程开始的地方UIPanel.LateUpdate:在这个函数有函数调用Updateself 。

  Updateself中:UpdateWidgets:更新UIWeight的位置信息、可见性[含Alpha]、UV信息,是否渲染刷新。UIsprite就是继承于UIWeight的OnFill函数实现多样的化的填装方式(即把UIWeight所需要的数据处理到UIGeometry节点中),如:拉伸、九宫格等等。

FillAllDrawCalls:全体DrawCall节点刷新。

FillDrawCall:单个DrawCall节点刷新。

  首先介绍FillDrawCall:顾名思义,这个函数是刷新单个的Drawcall节点

找到属于这个DrawCall的UIWeight,然后对找到的每个UIWeight处理UV数据的组装,而这个UIWeight的数据就保存在自身的UIGeometry节点上。然后把这个Draw的数据刷新到Mesh上面去即采用UIDrawCall.UpdateGemetry。

  其次是FillAllDrawCalls:顾名思义,这个函数是刷新所有的的Drawcall节点,及重建Drawcall即节点。第一步:删除已经存在的Drawcall节点。第二步:对所有的UIWeight经行排序主要按照深度值和材质。第三步:逐个顺序处理UIWeight,把相邻且具有相同的材质的UIWeight的UIGeometry数据添加到同一个UIDrawCall上来,然后把数据刷新到Mesh上。

NGUI 必读1 NGUI渲染基础机制相关推荐

  1. LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用

    LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用. ...

  2. 浏览器内核之渲染基础

    微信公众号:爱写bugger的阿拉斯加 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 此文章是我最近在看的[WebKit 技术内幕]一书的一些理解和做的笔记. 而[WebKit 技术内幕] ...

  3. UE4实时渲染基础及深入探究

    实时渲染基础:link 实时渲染深入探究:link 目录 实时渲染基础 目标帧率与毫秒 帧时间与GPU/CPU 最常见的四大性能问题 实时渲染深入探究 延迟渲染与前向渲染 渲染之前和遮挡 CPU和GP ...

  4. DirectX12(D3D12)基础教程(七)——渲染到纹理、正交投影、UI渲染基础

    目录 1.前言 2.渲染到纹理 3.调试支持 4.正交投影 5.UI渲染基础 6.本章完整代码链接 1.前言 记得那是在差不多10多年前,我在工作中认识了一位好兄弟小杨.那时他刚毕业,跟我是同一所大学 ...

  5. 理解WebKit和Chromium: WebKit渲染基础

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7292131 # WebKit渲染基础 ## 概述 WebKit是一个渲染引擎,而 ...

  6. UE官方教程笔记01-实时渲染基础上

    对官方教程视频[官方培训]01-实时渲染基础上 | 陈拓 Epic的笔记 部分没听懂的地方就按自己的理解瞎写了 介绍 实时渲染(Real-Time Rendering,RTR)是指在计算机上快速生成图 ...

  7. keyshot渲染图文教程_KeyShot渲染基础教程,教你五个步骤实现焦散线效果

    KeyShot渲染基础教程,教你五个步骤实现焦散线效果 想要渲染效果好,逼真,KeyShot渲染技巧不可少,品索搜集最新最权威KeyShot渲染教程,只为帮助广大KeyShot渲染爱好学习者们!想要有 ...

  8. SSR -- 服务端渲染基础

    前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:建议通过左侧导航栏进行阅读 服务端渲染基础 基本概述 随着前端技术栈和工具链的迭代成熟,前端工程化.模块化也已成为了当下的主流技术方案,在这波前端 ...

  9. 多个html页面拼接成一个页面_浏览器渲染页面机制以及如何减少DOM操作

    为了能更好.更快的为用户呈现出他们想要的页面,基于浏览器的渲染机制,我们在开发中应该了解浏览器,了解浏览器的运行机制,以及在开发中我们能更好的提高性能,虽然现在市面上流行的VUE和react,但也应该 ...

  10. 咸鱼Maya笔记—渲染基础

    咸鱼Maya笔记-渲染基础 渲染的概念 渲染算法 渲染器公用属性 在场景或角色材质灯光环节结束后,接下来可以将三维场景中的场景模型.角色模型和光影效果等转化输出成最终的图片或者视频,这就需要用到May ...

最新文章

  1. Android 自定义View之3D骰子旋转
  2. signature=066eaf4ada3cc7a99cb8d41fb298a3d4,Video Fusion Display Systems
  3. 清华大学医学院张明君团队招聘脑机接口与微纳医学交叉领域博士后
  4. Java 取得文件名的后缀
  5. 三星手机Android9和10的区别,三星开始在Galaxy Note 9上测试Android 10
  6. 成功解决Please use the NLTK Downloader to obtain the resource:
  7. 【攻防世界004】dmd-50
  8. ios markdown 解析_Shortcuts 教程:正则表达式修改 Markdown 链接
  9. ListModel QML类型
  10. sql serve 数据库游标的使用
  11. HTML 传输 字符转换 进制转换 15位 18位 时间戳 转换
  12. day1---python的基础特性
  13. 从Java执行可执行的命令行
  14. iOS NSString 与NSData转化
  15. Elasticsearch Curator使用
  16. Linux 网络服务之FTP 文件传输
  17. 20144303《Java程序设计》第10周学习总结
  18. 能源36号文解读_电机暴露细节!春风发布新能源品牌:ZEEHO极核
  19. java开发常用的工具类_java开发常用工具类
  20. LibFetion v0.2.0版发布

热门文章

  1. Unix操作系统的原理、优点与缺点
  2. MySQL数据库基础教程(视频)
  3. matlab怎么实现循环码,利用Matlab实现循环码编码
  4. java编程自学app_Java编程自学软件
  5. 小甲鱼鱼c论坛python作业_[全套55讲]鱼C论坛小甲鱼Python课后题试题.doc
  6. Eclipse主题插件之DevStyle
  7. python实现设计模式
  8. 如何创建C语言的项目
  9. 数据结构(java语言描述)课后答案_数据结构JAVA语言描述习题答案(刘小晶等主编)pdf总复习.ppt...
  10. 人人商城小程序服务器根目录,人人商城前端小程序如何配置 人人商城搭建教程...