- 博客(397)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 UGUI源码解析(二十四)LayoutGroup
LayoutGroup类LayoutGroup是一个抽象类,继承了UIBehaviour, ILayoutElement, ILayoutGroup。HorizontalOrVerticalLayoutGroup和GridLayoutGroup继承自它。继承自ILayoutController的方法,LayoutGroup的SetLayoutHorizontal和SetLayoutVert...
2019-03-06 10:49:42 894
原创 UGUI源码解析(二十三)AspectRatioFitter
AspectRatioFitter类调整RectTransform大小,以适应指定的宽高比。继承了UIBehaviour, ILayoutSelfController。属性:aspectMode 执行宽高比的模式aspectRatio 应用的宽高比,宽度除以高度OnEnable方法调用SetDirty(true),启动协程延时更新,延时后调用UpdateRectOnDi...
2019-03-06 10:49:36 421
原创 UGUI源码解析(二十二)ContentSizeFitter
ContentSizeFitter类继承了UIBehaviour, ILayoutSelfController,继承ILayoutSelfController,需要重写SetLayoutHorizontal和SetLayoutVertical方法。SetLayoutHorizontal方法清空DrivenRectTransformTracker,调用HandleSelfFittingA...
2019-03-06 10:49:29 1083
原创 UGUI源码解析(二十一)LayoutRebuilder
LayoutRebuilderGraphic是通过MarkLayoutForRebuild这个静态方法标记自己需要重建的。MarkLayoutForRebuild方法找到父对象中最近的ILayoutGroup类型的组件layoutRoot,并为其创建LayoutRebuilder。 从s_Rebuilders栈中Pop出一个LayoutRebuilder,s_Rebuilders是一...
2019-03-06 10:48:57 2748 1
原创 UGUI源码解析(二十)Text
TextText继承了MaskableGraphic, ILayoutElement。OnPopulateMesh方法重写Graphic的OnPopulateMesh方法,会在Graphic的Rebuild方法被调用,为CanvasRenderer的Mesh提供了顶点位置、顶点颜色、UV和三角形信息。 根据用户设置生成了一个TextGenerationSettings文本生成设置,...
2019-03-05 10:33:25 2169
原创 UGUI源码解析(十九)Image
ImageImage继承了MaskableGraphic, ISerializationCallbackReceiver, ILayoutElement, ICanvasRaycastFilter,提供了四种ImageType:Simple(普通)、Sliced(切割)、Tiled(平铺)、Filled(填充)。继承了ILayoutElement是一个布局元素,可以被各种布局组(ILayout...
2019-03-05 10:33:18 869
原创 UGUI源码解析(十八)RawImage
RawImageRawImage继承了MaskableGraphic,顾名思义,就是未经处理的图片,每个RawImage都会创建一个DrawCall,所以最好用在背景图片或是临时图形。RawImage只继承了MaskableGraphic抽象类。重写了Graphic的SetNativeSize方法,具体实现设置RectTransform的sizeDelta跟纹理Texture的大小尺寸一致...
2019-03-05 10:33:12 552
原创 UGUI源码解析(十七)Mask
MaskMask继承了UIBehaviour, ICanvasRaycastFilter,IMaterialModifier。OnEnable方法如果含有Graphic组件,设置graphic.canvasRenderer.hasPopInstruction为true,调用graphic.SetMaterialDirty()方法。然后调用MaskUtilities.NotifySten...
2019-03-05 10:33:05 713
原创 UGUI源码解析(十六)RectMask2D
RectMask2DRectMask2D继承了UIBehaviour, IClipper, ICanvasRaycastFilter维护了一个IClippable类型的列表:private HashSet<IClippable> m_ClipTargets = new HashSet<IClippable>();AddClippable方法设置m_Sho...
2019-03-05 10:32:58 1490
原创 UGUI源码解析(十五)MaskableGraphic
MaskableGraphicMaskableGraphic是一个抽象类,继承了Graphic, IClippable, IMaskable, IMaterialModifier接口,派生了RawImage,Image和Text。OnEnable方法设置重新计算模板m_ShouldRecalculateStencil为true,更新裁剪的父对象UpdateClipParent,设置Ma...
2019-03-05 10:32:51 2071
原创 UGUI源码解析(十四)Grahic
GrahicGrahic是UGUI的核心组件,负责显示图像,继承了UIBehaviour,ICanvasElement。它是一个抽象类,是MaskableGraphic(可遮罩图像)的基类,而后者是RawImage,Image和Text的基类。继承自UIBehaviour的方法:OnEnable方法调用了CacheCanvas方法,从父节点中获取Canvas列表,取得第一个激...
2019-03-05 10:32:42 1760
原创 UGUI源码解析(十三)InputField
InputFieldInputField可以提供文本输入功能,是与用户交互的一个重要手段。我们可以在编辑器里,为OnValueChanged和OnEndEdit两个事件添加监听,这样就可以获得用户输入的文本。public class InputField : Selectable,IUpdateSelectedHandler,IBeginDragHandler,IDragHandler...
2019-03-05 10:32:36 2327
原创 UGUI源码解析(十二)Dropdown
Dropdown内部类DropdownItem,继承自MonoBehaviour和IPointerEnterHandler, ICancelHandler两个接口。OnPointerEnter(当鼠标进入)方法继承自IPointerEnterHandler,调用EventSystem的SetSelectedGameObject将本对象设置为选中的对象,表现就是Item对象的背景颜色变了。...
2019-03-05 10:32:27 966
原创 UGUI源码解析(七)Selectable与Button
1、SelectableSelectable是UGUI的核心组件,除了最常用的Button,它还是Scrollbar、Dropdown、Slider、Toggle、InputField这些组件的基类。在Selectable之前,我们看到,它被添加了四个属性:[AddComponentMenu("UI/Selectable", 70)][ExecuteInEditMode] 运行在编...
2019-03-05 10:32:03 834
原创 UGUI源码解析(十一)Slider
SliderSlider继承了Selectable, IDragHandler, IInitializePotentialDragHandler, ICanvasElement。Set方法ClampValue把value限制在minValue和maxValue之间,如果value改变,且sendCallback为true,便会发送m_OnValueChanged事件。同时会调用Upda...
2019-03-04 21:13:20 854
原创 UGUI源码解析(十)ScrollRect
ScrollRectScrollRect继承自UIBehaviour,另外还继承了IInitializePotentialDragHandler, IBeginDragHandler, IEndDragHandler, IDragHandler, IScrollHandler, ICanvasElement, ILayoutElement, ILayoutGroup这些接口。OnEnabl...
2019-03-04 21:11:30 2927
原创 UGUI源码解析(九)Scrollbar
ScrollbarScrollbar,它继承自Selectable,还继承了 IBeginDragHandler, IDragHandler, IInitializePotentialDragHandler, ICanvasElementt四个接口。Scrollbar有一个float变量m_Value表示当前Scrollbar的值,变化范围在[0, 1]之间,还添加了一个UnityEven...
2019-03-04 21:06:28 1040
原创 UGUI源码解析(八)Toggle和ToggleGroup
ToggleToggle继承了Selectable, IPointerClickHandler, ISubmitHandler, ICanvasElement,(ICanvasElement,是Canvas渲染的时候调用的接口),Toggle有个重要的bool变量m_IsOn(对应成员属性IsOn),表示是否被勾选。还添加了一个UnityEvent<bool>类型的事件onValu...
2019-03-04 21:04:57 1533
原创 UGUI源码解析(六)Raycast
6、Raycast编程小技巧:Mathf.Approximately(0.0f, projectionDirection); 比较两个float值,如果他们在很小的相差(Epsilon)内,返回true。浮点不精确使得使用等号运算符比较浮点数不准确。例如,(1.0 == 10.0 / 10.0)每次都可能不会返回true。BaseRaycaster是其他Raycaster的抽...
2019-03-04 20:59:20 1034
原创 UGUI源码解析(五)CanvasUpdateRegistry
5、CanvasUpdateRegistryCanvasUpdateRegistry(画布更新注册处)是一个单例,它是UGUI与Canvas之间的中介,继承了ICanvasElement接口的组件都可以注册到它,它监听了Canvas即将渲染的事件,并调用已注册组件的Rebuild等方法。CanvasUpdateRegistry维护了两个索引集(不会存放相同的元素)://布局重建序列索引...
2019-03-04 20:58:38 978
原创 UGUI源码解析(四)输入模块
输入模块在第一部分EventSystem我们探究了事件系统,在第二部分执行事件中我们介绍了事件是如何执行的。那么事件是如何产生的呢?这就涉及到BaseInputModule、PointerInputModule、StandaloneInputModule、TouchInputModule这些类。我们就探究一下输入模块的原理。比如处理触摸事件时,EventSystem在OnUpdate()方...
2019-03-04 20:56:50 774
原创 UGUI源码解析(三)截取事件
截取事件有两种截取事件的方法:第一种,你可以扩展EventTrigger,并覆盖你感兴趣截取的事件的函数(简单常用);第二种,指定单个的委托事件。第一种方式:public class EventTriggerExample : EventTrigger{ public override void OnBeginDrag(PointerEventData data)...
2019-03-04 20:55:43 857
原创 UGUI源码解析(二)执行事件
执行事件在上面的事件系统,其中我们讲到EventSystem可以通过ExecuteEvents这个类来执行事件,那么事件是如何执行的呢?这里涉及到了两个文件EventInterface和ExecuteEvents。EventInterface类EventInterface定义了一系列的跟输入有关的接口。例如IPointerEnterHandler(指针进入事件接口)。一个组件添加...
2019-03-04 20:55:26 981
原创 UGUI源码解析(一)EventSystem系统
EventSystem系统看似名字很大,其实EventSystem处理和管理的是点击、触摸、键盘输入等事件,叫做InputEventSystem更为合适。//系统输入模块private List<BaseInputModule> m_SystemInputModules = new List<BaseInputModule>();//当前输入模块pri...
2019-03-04 20:46:47 2431
原创 Unity--计算FPS
FPS:每秒运行的帧数。using UnityEngine;public class Fps : MonoBehaviour{ private float m_LastTime; private float m_UpdateInterval = 0.5f; private float m_Frames; void Start() { ...
2019-03-03 21:08:12 578
原创 NavMesh.Raycast和NavMesh.CalculatePath的使用
一般情况下,只有主角是需要自动寻路的,其他玩家和怪物位置都是服务器转发过来的。除了主角身上有 NavMeshAgent,其他玩家和怪物对象可以不依赖 NavMeshAgent了,不用自主寻路,服务器直接下发目标点 (走线段),减少性能消耗。判断是否其他玩家或怪物对象可以直接到达目标点,使用NavMesh.Raycast判断,其他玩家或怪物对象与目标点之间存在障碍物,如果存在,使用NavMesh...
2019-03-02 23:18:01 6393
原创 C#--二叉树的遍历(递归和非递归)
二叉树的遍历包含四种遍历方式:前序遍历中序遍历后序遍历层次遍历一.前序遍历 前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。 1.递归实现// 前序遍历:首先访问根结点,然后遍历其左子树,最后遍历其右子树。 private void PreOrder(TreeNode<T> node) { if (nod...
2019-03-01 21:27:19 2211
原创 C#--事件的一个面试题
话不多说,先看代码:using System;namespace ConsoleApp2{ class Class21 { public delegate void MethodCall(); public static event MethodCall MethodHandle; static void Main(str...
2019-03-01 13:56:14 367
原创 C#--委托(Delegate)和事件(Event)
委托在本质上仍然是一个类,我们用delegate关键字声明的所有委托都继承自System.MulticastDelegate。后者又是继承自System.Delegate类,System.Delegate类则继承自System.Object。委托是一种类型安全的函数回调机制, 它不仅能够调用实例方法,也能调用静态方法,并且具备按顺序执行多个方法的能力。1. 委托也好,事件也好最初的起源是C/C...
2019-03-01 12:31:29 658
原创 C#--静态构造函数
静态构造函数是在构造函数方法前面添加了static关键字之后形成的,并且没有修饰符(public,private),没有参数。静态构造函数的特点:静态构造函数没有修饰符修饰(public,private),因为静态构造函数不是我们程序员调用的,是由.net 框架在合适的时机调用的。 静态构造函数没有参数,因为框架不可能知道我们需要在函数中添加什么参数,所以规定不能使用参数。 静态构造函...
2019-02-28 22:22:27 1665
原创 C#--字符串常量池
在介绍字符串常量池之前,先看一段简单的代码:using System;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { string a = "123"; string b = "...
2019-02-27 22:42:13 3222 3
原创 C#--反汇编工具ildasm.exe
通用中间语言(Common Intermediate Language,简称IL)是一种属于通用语言架构和 .NET 框架的的人类可读的编程语言。目标为 .NET 框架的语言被编译成CIL(基于.NET框架下的伪汇编语言),这是一组可以有效地转换为本机代码且独立于 CPU 的指令。CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的,它运行在CLR上。ildasm.exeildasm...
2019-02-27 22:30:30 2612
原创 Unity用户手册-UGUI合批
UGUI合批合批过程是指Canvas合并UI元素的网格,并且生成发送给Unity渲染管线的命令。Canvas使用的网格都是从绑定在Canvas上的CanvasRenderer获得,但是不包含子Canvas的网格。UGUI的层叠顺序是按照Hierarchy中的顺序从上往下进行的,也就是越靠上的组件,就会被绘制在越底部。所有相邻层的可合批的UI元素(具有相同材质和纹理),就会在一个DrawCall...
2019-02-26 10:36:16 1723
原创 Unity用户手册-正向渲染和延迟渲染
Forward Rendering(正向渲染)发生在渲染管线的顶点处理阶段,会计算所有的顶点的光照。全平台支持。规则一:最亮的几个光源会被实现为像素光照 规则二:然后最多4个光源会被实现为顶点光照 规则三:剩下的光源会被实现为效率较高的球面调谐光照(Spherical Hamanic),这是一种模拟光照规则一补充说明:最亮的那盏光一定是像素光照 Light的Rend...
2019-02-25 13:47:57 987
原创 Unity用户手册-Texture
TexturePower of 2 (贴图宽高要是2的幂的长度):根据不同平台,选择合理的纹理压缩格式,iOS选择RGBA ASTC 4* 4 block(从iOS9开始支持,显示效果更好,不需要把图片设置成方形),Android选择RGBA ETC 2 8bitsAndroid平台:如果有一个贴图大小为200 * 512,会被变成256 * 512。如果贴图大小为257 *...
2019-02-25 12:42:21 628
原创 Unity用户手册-Shader
ShaderGPU上的渲染程序。渲染管线的流程:几何阶段:顶点着色器(Vertex Shader):主要工作是坐标变换,逐顶点光照和输出后续阶段所需的数据。所有的几何体,以顶点的形式,先经过顶点着色器,进行顶点的坐标转换,把顶点坐标从模型空间转换到齐次裁剪空间,正向渲染(Forward Render)会对顶点进行光照计算,得到顶点的光照。VBO(Vertex Buf...
2019-02-25 12:41:23 563
原创 Unity用户手册-NavMesh导航系统
NavMeshNavMesh基于A*算法的扩展,基于场景的可行走和不可行走区域,把场景分成众多不规则的三角形,计算某两个点所在的三角形Mesh的距离,根据区域不同的Cost,采用广度优先的遍历,找到一条最短路径。广度优先搜索(Breadth First Search,简称BFS)从某个节点出发,首先访问这个节点,然后找出这个节点的所有未被访问的邻接点(或是孩子节点),访问完这些邻接...
2019-02-25 12:33:29 905
原创 Unity用户手册-Camera
Camera属性:Clear Flag:确定屏幕的哪些部分将被清除。Skybox:天空盒,擦除上一帧的颜色和深度并先用Skybox渲染在最底层,Depth大的Camera,将会清除Depth小的Camera绘制的内容。Solid Color:固定颜色,擦除上一帧的颜色和深度并先用固定颜色渲染在最底层,Depth大的Camera,将会清除Depth小的Camera绘制的内容。De...
2019-02-25 12:31:03 321
原创 Unity用户手册-动画系统Animator
动画系统Animator动画类型Legacy 基础的动画Generic 动画,包含动画状态机Humanoid 人形动画,包含动画状态机Update ModeNormal 动画播放将与Update同步更新,动画播放的速度与当前的TimeScale相匹配,如果TimeScale变慢,动画播放速度也会变慢Animate Physics 动画播放将与FixedUpdate...
2019-02-25 12:30:11 649
原创 Unity用户手册-Physics物理系统
Physics物理系统碰撞的基本原理场景管理器会把场景划分成很多区域,通常用二叉树,四叉树或八叉树来划分,先划分几个大的区域,然后大的区域内,又分成几个小的区域,小的区域又分成更小的区域。场景中的GameObject会处在特定的区域内,而每个区域存在树的节点中。当需要做碰撞检测时,只需要检测GameObject所在的区域内的碰撞关系。 判断两个GameObject是否碰撞,实质上就是检测...
2019-02-25 12:28:46 1182
Unity——VideoPlayer完整运行实例
2018-05-30
cudnn-8.0-windows10-x64-v5.1.zip
2017-09-16
调用委托后,只打印了Method方法,为什么没有调用MethodA???
2019-03-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人