盐山网站建设价格桓台做网站

张小明 2025/12/27 20:22:20
盐山网站建设价格,桓台做网站,做网站搞什么流量,软件项目和网站建设的区别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进行投诉反馈,一经查实,立即删除!

flask网站开发网络推广网站制作

被安全部门约谈了一次。 原因是日志里明文打印了用户手机号、身份证号,还被导出到了测试环境。这要是出了事,GDPR罚款能让公司破产。 花了两周时间做日志脱敏,整理一下方案。 为什么要日志脱敏 日志里经常会有: 手机号、身份…

张小明 2025/12/27 17:19:23 网站建设

自己做网站挂广告在线免费解答网站怎么建

Windows驱动存储管理神器:DriverStore Explorer全面指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 在Windows系统维护中,驱动程序管理往往是用户最容…

张小明 2025/12/27 17:19:24 网站建设

全屏网站制作wordpress 静态化文件

FDTD超材料吸收器吸收光谱在当今科技飞速发展的时代,超材料以其独特的性质吸引了众多科研人员的目光。其中,FDTD(时域有限差分法)超材料吸收器的吸收光谱更是研究的热门领域。今天,咱们就一起来深入探究一番。 什么是F…

张小明 2025/12/27 10:42:57 网站建设

高端旅游定制网站珠海手机网站建设公司

MTKClient完整使用指南:快速掌握联发科设备调试技巧 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient 面对联发科设备复杂的调试需求,你是否曾经感到无从下手&#xf…

张小明 2025/12/27 17:19:25 网站建设

取名网站怎么做g宝盆网站建设优惠

Linux系统安全与软件安装全攻略 1. Linux系统安全基础 在Linux系统中,保障系统安全是至关重要的,尤其是当系统作为服务器或在网络中运行时。下面将介绍一些基本的安全技术。 1.1 限制 su 命令的使用 su 命令是Linux安全中最强大且危险的命令之一。可以通过设置文件权限…

张小明 2025/12/27 17:19:23 网站建设

网站开发常用模板网站备案以后怎么做

企业级虚拟助手开发首选:Kotaemon智能代理全面测评 在当今企业数字化转型加速的背景下,客服响应效率、内部协作流畅度以及知识利用率已成为衡量组织智能化水平的关键指标。然而,许多企业仍被困在“AI 聊天机器人只会说套话”的窘境中——面对…

张小明 2025/12/27 17:19:24 网站建设