ugui源码_UGUI 源码笔记(一)文件结构和部分组件使用
![](/assets/blank.gif)
这是我阅读 UGUI 源码记录的相关笔记,共三部分、文件结构和部分组件使用、输入事件、核心部分
ZeroyiQ:UGUI 源码笔记(一)文件结构和部分组件使用
ZeroyiQ:UGUI 源码笔记(二)输入事件
ZeroyiQ:UGUI 源码笔记(三)核心部分
一、UGUI
1. Define
通过 3D 网格系统构建的 UI 系统。源码地址
1.1 实现
使用 UGUI 制作一个图元(图片、按钮...),会先构建一个方形网格,然后绑定材质球,材质球里存放了要显示的图片。
1.2 问题
材质球和网格的渲染,性能开销过大,drawcell 过高。
1.3 解决
- 减少材质球:一部分类型相同的图片,进行合图。多个图元可以只是用一个材质球,改变模型顶点上的 UV 就能显示不同的图片了。
- 合并网格:将有相同材质球(图片、shader)和相同层级的网格,进行合并。
2. 源码文件结构(v2019.1)
- EventSystem 输入事件
- EventData 事件数据
- InputModules 输入事件捕捉模块
- Raycasters 射线碰撞检测
- EventHandle 事件处理和回调
- Animation 动画
- CoroutineTween 补间动画
- Core 渲染核心
- Culling 裁剪
- Layout 布局
- MaterialModifies 材质球修改器
- SpecializedCollections 特殊集合
- Utility 工具集
- VertexModifies 顶点修改器
二、部分组件
1. Canvas
类似于画画的画布。Canvas 包含了上述解决步骤中的合并网格的功能。
1.1 Render Mode
- Screen Space - Overlay:不与空间上的排序有任何关系,常用在纯 UI。Sort Order 值越大,显示越前面
- Screen Space - Camera:依赖 Camera 的平面透视,能够加入非 UGUI的元素到 UI 中。【常用】
- World Space: UI 物体会放出现在世界空间中,常在世界空间中与普通3D物体一同展示,列如场景中对象的血条。
2. Canvas Scale
缩放比例组件,用来指定 Canvas 中元素的比例大小。
2.1 UI Scale Mode
- Constant Pixel Size:指定比例大小。
- Scale With Screen Size:以屏幕基准自动缩放,能设置以宽还是以高。【手游项目常用】
- Constant Physical Size:以物理大小为基准。
2.2 ScreenMatchMode.MatchWidthOrHeight
根据屏幕高宽匹配。使用对数空间转换能够有更好的表现。
float logWidth = Mathf.Log(screenSize.x / m_ReferenceResolution.x, 2);
float logHeight = Mathf.Log(screenSize.y / m_ReferenceResolution.y, 2);
float logWeightedAverage = Mathf.Lerp(logWidth, logHeight, m_MatchWidthOrHeight);
scaleFactor = Mathf.Pow(2, logWeightedAverage);
![](/assets/blank.gif)
e.g. 设备和游戏屏幕比例,宽是 10/5 = 2,高是 5/10 = 0.5,匹配值设定为 0.5。
正常空间平均值计算:(2+0.5)* 0.5 = 1.25,会放大 Canvas。
对数空间平均值计算:2^((log2(2)+log2(0.5))*0.5) =2^((1+-1)*0.5) = 1 ,Canvas 比例不变。
3. Image 、RawImage
对于图片、图集展示的组件。
3.1 区别
- Image:展示图集中的图元,能够参与合并。
- RawImage:能展示单张图片,不能合并。
3.2 选择
图片尺寸小,能够打成图集 -> Image
图片尺寸大,合图效率低 -> RawIamge
图片相同类型数量多,合并图集太大,实际展示图片又很少 -> RawIamge
4 RectTransForm
虽然 RectTransform 是 UnityEngine 下的类,但是在 UGUI 中大量使用,也需要有所了解。
简单来说,UGUI 通过 RectTransform 来定义 UI 的位置、大小、旋转。
4.1 Anchors
锚点:子节点相对于父节点的对齐依据。数值为相对于父节点的比例。
100X100的图片,全展 Anchors,父节点 120X120 效果如下。
![](/assets/blank.gif)
Anchors Presets 工具,列出了常用的 Anchor 布局。按住 Shift 可以连同 Pivot 一同改变,按住 Alt 可以连同位置一同改变,在子节点铺满父节点的时候非常好用。
![](/assets/blank.gif)
4.2 Pivot
物体自身的支点,影响物体旋转、缩放、位置。
![](/assets/blank.gif)
ugui源码_UGUI 源码笔记(一)文件结构和部分组件使用相关推荐
- ugui获取坐标_UGUI源码解析(六)Raycast
Raycast 编程小技巧: Mathf.Approximately(0.0f, projectionDirection); 比较两个float值,如果他们在很小的相差(Epsilon)内,返回tru ...
- 《Java修炼指南:高频源码解析》阅读笔记一Java数据结构的实现集合类
一.Arrays工具类 来自java.util.Arrays,用来处理数组的各种方法. 1.1 List asList(T- a) 用来返回由自定数组支持的固定大小列表,虽然这里返回了一个List,但 ...
- Unity UGUI图文混排源码(二)
Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...
- Unity UGUI图文混排源码(三) -- 动态表情
这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...
- 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记
生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...
- CNN入门详解及TensorFlow源码实现--深度学习笔记
CNN入门详解及TensorFlow源码实现–深度学习笔记 ##一.卷积神经网络 ###1.简介 卷积神经网络是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出 ...
- 《Python源码剖析》读书笔记
<Python源码剖析>电子书下载 http://download.csdn.net/detail/xiarendeniao/5130403 Python源码在官网有下载链接,用ctags ...
- animation基础练习源码_用vue简单写一个音乐播放组件「附源码」
作者:vipbic 转发链接:https://segmentfault.com/a/1190000022980992 前言 上次小编也分享一个关于Vue 开发过音乐播放对项目: 基于 electron ...
- java 头尾 队列_源码|jdk源码之栈、队列及ArrayDeque分析
栈.队列.双端队列都是非常经典的数据结构.和链表.数组不同,这三种数据结构的抽象层次更高.它只描述了数据结构有哪些行为,而并不关心数据结构内部用何种思路.方式去组织. 本篇博文重点关注这三种数据结构在 ...
最新文章
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
- CentOS 6.6 x86_64升级内核到最新版2.6.32-642.3.1.el6.x86_64
- Python之自动单元测试之一(unittest使用实例)
- Activiti部署报错
- 采用web技术开发PC应用
- 详解GAN的谱归一化(Spectral Normalization)
- leetcode 643 Maximum Average Subarray I
- 汇编语言-010(循环移位ROL,ROR 、进位循环进位RCL,RCR 、有符号数溢出 、双精度移位SHLD,SHRD、SHL和ADD计算 、位运算应用)
- java找不到符号类socket,编译报错+解决方法:错误: 找不到符号
- np.memmap读取大文件
- andorid 录音去噪音
- [Data Structure Algorithm] 有向无环图的拓扑排序及关键路径
- vue.js 常用语法总结(一)
- SBCL 使用中文时的错误记录 --close 问题已经解决
- linux 忘记原来的myql的root的密码
- JAVA输入jdb,解决 JAVA 单步调试键盘输入被 JDB 占用的问题
- 分解质因数(包括证明的详解)
- 毕设题目:Matlab人脸识别
- Scratch 模拟病毒传染小程序
- CSS font-family常见中文字体对应的英文名称