佛山新网站制作渠道盐城网站开发公司

张小明 2026/3/2 21:47:50
佛山新网站制作渠道,盐城网站开发公司,广州市城乡建设局,做网站一排文字怎么水平对齐UGUI重建流程和优化 参考文献#xff08;五#xff09;UGUI源码分析之Rebuild#xff08;布局重建、图形重绘#xff09;_ugui rebuild-CSDN博客(99 封私信 / 83 条消息) UGUI源码解析#xff08;二十一#xff09;LayoutRebuilder - 知乎(99 封私信 / 83 条消息) UGUI源…UGUI重建流程和优化参考文献五UGUI源码分析之Rebuild布局重建、图形重绘_ugui rebuild-CSDN博客(99 封私信 / 83 条消息) UGUI源码解析二十一LayoutRebuilder - 知乎(99 封私信 / 83 条消息) UGUI源码解析五) CanvasUpdateRegistry - 知乎(99 封私信 / 85 条消息) UGUI UI重建二三事(一) - 知乎(99 封私信 / 85 条消息) UGUI UI重建二三事(二) - 知乎总体流程简述首先我们对UI进行修改时如修改其大小改材质等很多情况下UI会将自己标记为脏然后放进一个队列中。在相机即将渲染时会处理这个队列的元素进行布局的重新计算称作布局重建。然后重新生成graphic的网格称为网格重建。重建过程的主要接口ICanvasElement接口标记此组件需要参与重建。主要是Rebuild方法会在此节点需要重建时调用参数表面重建过程。CanvasUpdate.// 标记了重建过程Prelayout,Layout,PostLayout,PreRender,LatePreRender,MaxUpdateValue,LayoutComplete在布局完成时调用GraphicUpdateComplete在网格重建完成时调用实现情况1.Graphic实现用来生成网格。即网格重建过程。2.LayoutRebuilder实现用来进行布局。即布局重建过程。3.InputField、ScrollRect、Scrollbar、Slider、Toggle实现主要是根据重建过程实现自己的功能。ILayoutElement接口标记此节点需要参与布局重建。给出布局重建时节点的宽高参数。有宽高的minpreferredflexible用于布局。此外layoutPriority标记布局优先级。CalculateLayoutInputHorizontalCalculateLayoutInputVertical这两个方法计算自己的理想宽高。实现情况Image、Text、InputField实现preferredWidthpreferredHeight会返回最合适的大小。ScrollRect实现了所有参数但都返回-1仅供布局系统调用。LayoutElement实现了所有参数并开放到编辑器供配置。ILayoutController接口设置子节点的位置宽高。实现两个方法SetLayoutHorizontal、SetLayoutVertical。作用是设置自己的子节点。实现情况有三个类实现GridLayoutGroupHorizontalLayoutGroupVerticalLayoutGroup重建框架执行流程CanvasUpdateRegistry处理重建的类。待重建元素列表m_LayoutRebuildQueue保存需要更新布局的队列m_GraphicRebuildQueue保存需要更新图形的队列队列元素的类型都是ICanvasElement此接口为布局元素的基类。元素如何加入到重建列表向布局重建队列添加元素的方法为CanvasUpdateRegistry.MarkLayoutForRebuild //将需要重建的元素加入重建列表。实际调用下面的CanvasUpdateRegistry.MarkLayoutRootForRebuild //将需要重建的布局根节点加入重建列表一般情况下各个组件在布局需要修改时调用MarkLayoutForRebuild将自己加入重建列表。比如 OnEnable、OnDisable、OnRectTransformDimensionsChange等向图形重建队列添加元素的方法为CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild重建总入口CanvasUpdateRegistry实现单例模式单例的构造函数就向Canvas.willRenderCanvases注册了PerformUpdate函数因此PerformUpdate为重建过程的总入口。PerformUpdate执行逻辑首先调用CleanInvalidItems清理无效布局组件。m_PerformingLayoutUpdate标记了正在进行布局重建。使用SortLayoutList排序。排序依据为父物体层数少的在前。依次对m_LayoutRebuildQueue列表中元素调用Rebuild参数分别是Prelayout、Layout、PostLayout。这就等于进行了重建的三个步骤。其中Layout进行了实际布局重建。最后调用每个元素的LayoutComplete方法。清理m_LayoutRebuildQueue列表。布局重建完成然后进行网格重建。此过程与上面布局重建基本一致。先调用ClipperRegistry.instance.Cull()不用排序依次对m_LayoutRebuildQueue列表中元素调用Rebuild参数分别是PreRender、LatePreRender。最后调用每个元素的GraphicUpdateComplete方法。清理m_GraphicRebuildQueue列表。可以看到基本就是依次通知每个元素重建了。具体行为是让组件自己实现的即调用Rebuild函数每个组件都会重写来实现不同行为。重要组件的具体重建行为Graphic.Rebuild 网格重建实现网格重建即生成图片和文本网格的部分Graphic会在PreRender时检查网格刷新检查材质刷新。生成网格方法是OnPopulateMesh。值得注意的是网格生成后可通过IMeshModifier对网格进行调整实现网格特效。如Shadow。Graphic基类中网格生成是直接创建面片显示纯颜色。Image重写了OnPopulateMesh方法实现了一些特殊填充就是SlicedTiled那些。这部分实现没有技巧全是硬编码Text重写了OnPopulateMesh方法改成文本的网格生成。其实现未开源。不过可以通过m_TempVerts访问到每个字符生成完毕的网格数据。可以用这个做超链接RawImage实现和Graphic基本一致区别在没有主贴图时不会生成网格。ILayoutElement.Rebuild布局重建所有加入布局重建中元素都是RectTransform加入列表时会包一个LayoutRebuilder。LayoutRebuilder在Rebuild的Layout阶段时计算了自己理想宽高。过程PerformLayoutCalculation递归后续遍历所有子节点。即先子节点再自己。会对每个ILayoutElement节点执行一个委托CalculateLayoutInputHorizontal作用是计算自己的最终宽高。随后PerformLayoutControl递归后续遍历所有子节点。即先子节点再自己。会对每个ILayoutController节点执行一个委托SetLayoutHorizontal作用是设置自己的子节点。特别的有时需求会需要我们获取布局完成后的组件位置可调用这个方法立即进行此元素的布局重建。之后可正确获取最佳宽高值。LayoutRebuilder.ForceRebuildLayoutImmediate其实现是创建一个此节点的LayoutRebuilder然后以CanvasUpdate.Layout为参数立即调用一次Rebuild。也就是立即触发一次布局重建。调用参数为布局根节点。总结LayoutGroup的重建过程包括GridLayoutGroupHorizontalLayoutGroupVerticalLayoutGroup调用CalculateLayoutInputHorizontal时LayoutGroup会收集所有子物体保存在m_RectChildren中。有ILayoutIgnorer且ignoreLayout都是false的除外。HorizontalLayoutGroup中重写CalculateLayoutInputHorizontal计算自己宽高。SetLayoutHorizontal执行过程随后SetChildAlongAxisWithScale时设置子节点位置。优化思路可修改源码检查上文提到的两个队列来查看重建情况。重建优化思路基本就是减少重建的触发以减少重建次数。即减少UI元素位置大小图片材质等修改减少mask矩形区域的变更。少用布局组件不会变化的布局组件删除或者关掉。不要频繁修改布局组件元素。OnRectTransformDimensionsChange可观察到此函数在网格需要变化时触发布局重建。如修改AnchorAnchoredPositionPivotSizeDelta大概率导致网格变化产生重建。而如果仅改变ScaleRotationPosition不会发生重建。因此可考虑用scale改变代替enable避免重建。摘抄大佬的笔记总结触发rebuild的情况https://zhuanlan.zhihu.com/p/448293298Text控件 文本的内容及颜色变化、设置是否支持富文本、更改换行模式、设置字体最大最小值、变更文本使用的对齐锚点、设置是否通过几何对齐、变更字体大小、变更是否支持水平及垂直溢出、修改行间距、变更字体样式(正常、斜体.....)。Image控件 颜色变化、变更显示类型(Simple、Sliced、Tiled、Filled)、变更是否应保留Sprite宽高比(Image.preserveAspect属性的变更)FillCenter属性变更(是否渲染平铺或切片图像的中心)、变更填充方式(Horizontal、Vertical、Radial360....)、变更图像填充率(fillAmount)、变更图像顺逆时针填充类型(Image.fillClockwise)、变更填充过程的原点(Image.FillOrigin)。RawImage控件 设置Texture、变更纹理使用的UVRcet、Shadow效果 改变效果的距离(effectDistance)及颜色(effectColor)、变更是否使用Graphic中的Alpha透明度(useGraphicAlpha)。Mask控件 设置是否展示与Mask渲染区域相关的图形(showMaskGraphic),enable发生变化所有继承MaskableGraphic的控件(Image、RawImage、RectMask2D、Text) 设置此图形是否允许被遮盖、enable发生变化、父节点发生变化(TransFromParentChanged)、在Hierachy面板上发生改变(HierachyChanged)。所有继承自BaseMeshEffect的效果类(目前只看到Shadow及PositionAsUV1)的enable变化及应用动画属性的操作。所有继承自Graphic的UI控件材质(material)发生变化。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

如何做网站链接使用深圳哪里可以做网站

Excalidraw商标使用规范:品牌保护边界 在开源工具日益普及的今天,一个名字往往不只是代码的代号,更承载着用户信任、社区共识和长期积累的技术声誉。以手绘风格著称的虚拟白板工具 Excalidraw,自诞生以来便因其简洁直观的设计理念…

张小明 2026/3/2 19:45:37 网站建设

做网站和做电脑软件差别大吗杭州设计企业网站高端公司

第一章:Open-AutoGLM到底有多强?3个真实案例看懂自动流程生成黑科技Open-AutoGLM 作为新一代的自动化流程生成引擎,融合了大语言模型与工作流编排能力,正在重新定义企业级任务自动化。其核心优势在于能根据自然语言描述自动生成可…

张小明 2026/1/21 4:28:19 网站建设

一流的上海网站建设公sql数据库查询网站模板

Langchain-Chatchat在航空航天技术档案检索中的高精度要求应对 在现代航空航天工程中,一个看似简单的故障排查可能牵涉上百份技术文档——从飞行测试日志到适航认证报告,再到嵌入式系统通信协议。工程师往往需要耗费数小时甚至数天时间,在分散…

张小明 2026/1/21 4:27:48 网站建设

网页编辑与网站编辑wordpress最多多少用户

老牌钢铁龙头柳钢集团,如何通过钉钉实现技术降维与全员共创,让AI从一线发烧友,生长为覆盖全员的生产力工具。 文|周享玥 游勇 编|赵艳秋 广西柳钢集团冷轧厂管理层的“数字驾驶舱”内,生产数据实时跳动&…

张小明 2026/1/21 4:27:18 网站建设

高端网站设计公司番禺外贸网站建设

文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言 🌞博主介绍:✌全网粉丝15W,CSDN特邀作者、211毕业、高级全…

张小明 2026/1/21 4:26:47 网站建设

永川做网站phython 做的网站

如何快速掌握侧边注解:MarginNotes完整使用指南 【免费下载链接】marginotes Quick, cool margin notes with jQuery 项目地址: https://gitcode.com/gh_mirrors/ma/marginotes 在阅读网页内容时,您是否希望有一种简单的方式来添加注释和说明文字…

张小明 2026/1/21 4:26:16 网站建设