
UGUI 源码注解
文章平均质量分 73
NRatel
道阻且长,行则将至
展开
-
UGUI 源码之 GridLayoutGroup
一、重点:1、GridLayoutGroup继承自LayoutGroup2、布局所需参数:⑴ StartCorner,从哪个角开始排布。⑵ StartAxis,从哪个轴开始排布。⑶ Constraint,列数或行数上的约束,可以指定行列数,也可以根据Content大小自适应。⑷ Spacing,间距、Padding,边距。⑸ CellSize,元素大小。其中,⑴、⑵ 可以确定出八种排布方向。...原创 2022-04-09 16:30:37 · 3703 阅读 · 0 评论 -
UGUI 源码之 LayoutGroup
一、重点:1、LayoutGroup 继承自UIBehaviour,可以利用其生命周期方法设置脏标记。2、LayoutGroup 实现了两个接口 ILayoutElement, ILayoutGroup,说明它既是一个布局元素,又是一个布局控制器。3、CalculateLayoutInputHorizontal() 为子类提供一个通用的、计算有效的 m_RectChildren(没有实现 ILayoutIgnorer 接口的子物体 和 实现了 ILayoutIgnorer 接口,但 ignor.原创 2022-03-05 21:03:45 · 4368 阅读 · 0 评论 -
UGUI 源码之 布局相关接口和类的关系及标记更新
UGUI 源码之 布局相关接口和类的关系及标记更新原创 2022-03-05 16:23:11 · 388 阅读 · 0 评论 -
UGUI 源码之 ILayoutElement、ILayoutController、ILayoutGroup、ILayoutSelfController、ILayoutIgnorer
必须先搞清UGUI自动布局系统的设计思想,才能理解这些接口的用意。一、基本思想自动布局系统基于布局元素 和布局控制器两个概念。1、布局元素一个布局元素是具有矩形变换以及其他可选组件的游戏对象。(必需RectTransform)布局元素对自身应具有的大小有一定的了解。(由布局元素自身提供布局属性,可实现接口ILayoutElement)布局元素不直接设置自身的大小,而是可由用作布局控制器的其他组件使用布局元素提供的信息来计算布局元素要使用的大小。(布局元素的最终大小和位置由布...原创 2021-07-18 23:18:21 · 764 阅读 · 0 评论 -
UGUI 源码之 IndexedSet
List 和 Dictionary,是最常用的数据结构之二。先来看看List 和 Dictionary的优缺点:1.遍历,List可以 for 可以 foreach 还可以.ForEach(),而 Dictionary只能foreach (Unity某些版本使用foreach会由于拆装箱产生GC)。List的遍历顺序就是元素的添加顺序,Dictionary是Hash方式存储的,所以遍历时无法...原创 2018-03-09 23:06:00 · 1502 阅读 · 0 评论 -
UGUI 源码图形更新及遮罩部分小结
具体请看博客专栏:https://blog.youkuaiyun.com/nratel/category_11133596.htmlGithub UGUI 注释(未完):https://github.com/NRatel/uGUI。1、UGUI Canvas元素更新基础2、UGUI RectMask2D+MaskableGraphic 工作原理3、UGUI Mask+MaskableGraphic 工作原理4、UGUI Mask 和 RectMask2D 的更新...原创 2021-06-26 21:57:09 · 303 阅读 · 0 评论 -
UGUI 源码之 MaskableGraphic
一、MaskableGraphic 的实质。1、MaskableGraphic 继承自 Graphic,并通过RectMask2D 和 Mask 实现 “可遮罩的图形”。2、最终RectMask2D 是通过 canvasRenderer.cull = cull; 实现剔除。通过调用canvasRenderer.EnableRectClipping(clipRect); 或canvasRenderer.DisableRectClipping(); 开启或关闭裁剪。3、最终 Mask 是通...原创 2021-06-26 21:36:26 · 895 阅读 · 0 评论 -
UGUI 源码之 StencilMaterial
这是一个模板测试材质管理类。可为每个 Graphic 动态地创建其自定义的模板测试材质。其实就是从性能上考虑,将相同参数的模板测试材质缓存起来,使用者自己进行添加、移除。-------------------------------------------------------------------------目前,UGUI 中只有 Mask 组件在进行遮罩时用了它。实际上,还可以利用它做一些其他的、模板测试可以做的炫酷效果,这里暂不研究。-----------------------.原创 2021-06-26 20:17:33 · 691 阅读 · 0 评论 -
UGUI 源码之 Mask、IMaterialModifier、IMaskable
一、Mask 的实质1、Mask 通过模板测试进行遮罩的。模板测试在渲染流水线的 光栅化阶段/逐片元操作时。如图:Unity模板测试文档:https://docs.unity3d.com/cn/2020.1/Manual/SL-Stencil.html2、Mask 组件在 OnEnable() 时将同级关联的 CanvasRenderer 的hasPopInstruction 字段置为 true。3、Mask 组件会在 GetModifiedMaterial 方法(实现自IM..原创 2021-06-26 20:05:16 · 1359 阅读 · 2 评论 -
UGUI 源码之 MaskUtilities
全注释:using System.Collections.Generic;using UnityEngine.EventSystems;namespace UnityEngine.UI{ // Mask related utility class. This class provides masking-specific utility functions. // Mask 相关的工具类。该类提供了特定于 Mask 的工具函数。 // Mask 相关指:Mask 和 .原创 2021-06-19 22:35:30 · 469 阅读 · 0 评论 -
UGUI 源码之 RectMask2D、Clipping、RectangularVertexClipper
using System;using System.Collections.Generic;using UnityEngine.EventSystems;namespace UnityEngine.UI{ [AddComponentMenu("UI/Rect Mask 2D", 13)] [ExecuteAlways] [DisallowMultipleComponent] [RequireComponent(typeof(RectTransform))] .原创 2021-06-19 22:32:49 · 872 阅读 · 0 评论 -
UGUI 源码之 ClipperRegistry、IClipper、IClippable、
已知:1、目前实现了接口 IClipper的只有RectMask2D 。2、目前实现了接口 IClippable 的只有MaskableGraphic 。所以,这两个接口其实就是在描述RectMask2D 将通过怎样的方式对MaskableGraphic 产生裁剪或剔除效果。namespace UnityEngine.UI{ // Interface that can be used to recieve clipping callbacks as part of th...原创 2021-06-13 20:54:22 · 722 阅读 · 0 评论 -
UGUI 源码之 CanvasUpdateRegistry、ICanvasElement
UGUI 主要利用CanvasUpdateRegistry 对实现了 ICanvasElement 接口的元素进行布局和显示更新。大致更新步骤:一、注册更新1、实现 ICanvasElement 的类,都有LayoutUpdate(布局更新) 或 GraphicUpdate(图形更新)需求。2、实现 ICanvasElement 的类,都要将自身注册/取消注册到CanvasUpdateRegistry上。3、其中,继承于UIBehaviour 的类, 利用其生命周期,在元素各种状态改..原创 2021-06-13 20:44:10 · 1095 阅读 · 0 评论 -
UGUI 源码之 Graphic
Graphic 是 UGUI 图形组件的基类。看见1000行的代码不要头疼,阅读步骤参考 如何阅读源码:先看 Ggraphic 的字段、属性;再看其构造方法、重写的 UIBehaviour 的生命周期方法;再看其实现的接口 ICanvasElement;再看其关联的类CanvasUpdateRegistry、GraphicRegistry、LayoutRebuilder。还有一些出现的工具类 TweenRunner、ListPool、ObjectPool。------------..原创 2021-06-13 20:23:21 · 1075 阅读 · 0 评论 -
UGUI 源码之 UIBehaviour
UIBehaviour 中的生命周期要理解通透。因为其众多子类的行为严重依赖其生命周期。可以实际测试,因为光看命名可能有歧义,很容易理解错误。注意:源码中OnCanvasHierarchyChanged 的部分注释写到了IsDestroyed 上(错误)。更多 UGUI 注释已放入https://github.com/NRatel/uGUI。namespace UnityEngine.EventSystems{ // Base behaviour that has pro...原创 2021-06-13 20:06:03 · 569 阅读 · 0 评论