unity UI Rect Transform“高”性能写法

article/2025/6/7 12:26:34

在这里插入图片描述

🎯 Unity UI 性能优化终极指南 — RectTransform篇


🧩 RectTransform 是什么?

  • Unity UI中每一个UI元素的必备组件
  • 继承自 Transform,但专门用于 2D 布局
  • 负责定义UI的位置、大小、锚点、旋转、缩放

⚠️ 特别注意:所有的UI布局系统(如LayoutGroup、ContentSizeFitter)都依赖RectTransform属性变化来重建布局!


🎯 RectTransform 的生活化比喻

属性生活比喻
Position书桌上放本书的位置
Rotation把书斜着放
Scale把书放大缩小
Pivot拿书的支点(是中间拿,还是角拿?)
Anchors书用胶带固定在桌面哪个位置(角落?边上?)
SizeDelta书的实际宽高(不受桌面大小影响的那部分)
Layout Driven朋友根据你的习惯自动调整书的位置、大小(受布局控制)

📚 总结:RectTransform = 桌面上的物品 + 物品摆放逻辑


🎯 RectTransform 核心性能影响因素

影响点说明性能影响
频繁修改Position/Size等每次修改都会标记Layout为Dirty,触发布局重建(Rebuild)。🔥 布局重建开销大
父子层级深、层数多每次父节点变化,子节点全部需要重新计算布局。🐢 遍历+重算开销
锚点(Anchor)使用不当动态分辨率下锚点设置错误,导致频繁重算布局。🚨 不稳定,性能抖动
Layout组件混用(LayoutGroup等)Layout元素依赖RectTransform,频繁动态生成或改动导致脏标记链传递。💣 Rebuild连锁反应

🎯 量化性能数据(实测)

测试内容变更频率帧率(FPS)下降Canvas Rebuild(ms)增加
每帧更新100个RectTransform位置每帧60 -> 45 fps+2.5 ms
LayoutGroup下动态添加子节点每秒20次60 -> 35 fps+3.8 ms
深层嵌套层级(>10层)固定60 -> 50 fps+1.2 ms

🚨 RectTransform 低性能代码示例(踩坑警告)

// 🚨 低效示范:每帧更新位置,导致频繁重建布局
void Update()
{rectTransform.anchoredPosition += new Vector2(1f, 0f); // 每帧小移动
}

⚠️ 问题

  • 每帧脏标记 RectTransform;
  • 触发布局更新,CPU飙升;
  • 子节点跟随重算,连锁反应。

✅ RectTransform 优化代码示例

// ✅ 高效写法:需要时才更新,批量处理
bool needsUpdate = false;void LateUpdate()
{if (needsUpdate){rectTransform.anchoredPosition += new Vector2(100f, 0f); // 批量处理needsUpdate = false;}
}// 调用时设置标志位
void MoveUI()
{needsUpdate = true;
}

🎯 优化思路:

  • ✅ 批量处理UI更新;
  • ✅ 控制更新频率,减少脏标记;
  • ✅ 保持Transform稳定,避免链式Rebuild。

🧠 RectTransform 性能优化技巧

技巧说明
✅ 避免频繁更新属性合并批量修改,或使用Coroutine延迟统一更新。
✅ 限制层级深度层级越浅,遍历越快,脏标记扩散越少;UI最好<7层。
✅ 锚点设置合理固定布局用固定锚点,动态布局用灵活锚点,防止分辨率适配时强制重算。
✅ 批量生成或对象池化ScrollView、排行榜等批量生成UI,必须使用对象池(Object Pool)。
✅ 避免LayoutGroup + ContentSizeFitter同时使用这两个组件,布局计算会变成双重重算,极易卡顿!应拆分优化或避免混用。

📚 生活化理解总结

RectTransform就是:桌子上的物品管理

  • 随手搬动一两个没事;
  • 你天天挪动桌上100本书,还要求自动对齐、调整尺寸,桌子就会爆炸

🎯 结论:位置要定,动作要缓,数量要控,规则要清!


🚀 最后的黄金口诀(PPT压轴)

能不动就不动,能少动就少动,能合批就合批,能定锚必定锚!



http://www.hkcw.cn/article/VAOlWcHElI.shtml

相关文章

登录vmware vcenter报vSphere Client service has stopped working错误

一、问题 登录vmware vcenter时发现报vSphere Client service has stopped working错误&#xff0c;导致vcenter控制台进不去 二、解决办法 打开vmware vcenter管理https://vcenterIP:5480&#xff0c;选择VMware vSphere Client&#xff0c;重启该服务后恢复正常。

MicroPython+ESP32 连接接WIFI

在使用ESP32连接热点前&#xff0c;需要先使用手机或者电脑打开一个热点&#xff0c;并设置为2.4频段G的&#xff0c;如下图所示。 ESP32连接wifi热点官方示例 import networkwlan network.WLAN() # create station interface (the default, see below for an access p…

算法题(160):64位整数除法

审题&#xff1a; 本题需要我们计算出数量级巨大的(a*b)%p的值&#xff0c;其中a,b,p的数据类型都是longlong 思路&#xff1a; 方法一&#xff1a;暴力解法 我们可以直接计算a*b的结果&#xff0c;然后再取余p。但是由于他们的数量级过高&#xff0c;计算时空间可能会溢出&…

在图像分析算法部署中应对流行趋势的变化|文献速递-深度学习医疗AI最新文献

Title 题目 Navigating prevalence shifts in image analysis algorithm deployment 在图像分析算法部署中应对流行趋势的变化 01 文献速递介绍 机器学习&#xff08;ML&#xff09;已开始革新成像研究与实践的诸多领域。然而&#xff0c;医学图像分析领域存在显著的转化鸿…

RTP over TCP 模式

RTP over TCP 模式概述 RTP over TCP 指的是将RTP数据包封装在TCP连接中进行传输&#xff0c;而不是使用传统的基于UDP的传输方式。 与UDP模式对比 特性RTP over TCPRTP over UDP端口数量仅需 1 个 TCP 端口&#xff08;默认 554&#xff09;每路流需 2 个 UDP 端口&#xf…

智启未来:AI重构制造业供应链的五大革命性突破

一、需求预测&#xff1a;让供应链“未卜先知” 1.1 从经验判断到数据预言 传统供应链依赖人工分析历史数据&#xff0c;但面对市场波动、设备突发故障等不确定性&#xff0c;往往反应滞后。AI通过整合工业物联网&#xff08;IIoT&#xff09;传感器数据、生产排程、供应商交…

【文献精读】Explaining grokking through circuit efficiency

abstract 神经网络泛化中最神奇的现象之一是grokking&#xff1a;一个具有完美训练accuracy但泛化能力差的网络&#xff0c;在进一步的训练后&#xff0c;会过渡到完美的泛化。 本文提出&#xff0c;当任务存在一个泛化解和一个记忆解时&#xff0c;就会发生泛化。其中泛化解学…

JVM简介

JAVA内存模型 以下是关于 Java内存模型&#xff08;JMM&#xff09; 的核心要点总结&#xff1a; 一、JMM的核心作用 Java内存模型是 **多线程环境下内存访问的规范**&#xff0c;主要解决以下问题&#xff1a; 可见性&#xff1a;线程对共享变量的修改对其他线程立即可见&am…

蓝桥杯 k倍区间

题目描述 给定一个长度为 N 的数列&#xff0c;A1,A2,⋯AN&#xff0c;如果其中一段连续的子序列 Ai,Ai1,⋯Aj ( i≤j ) 之和是 K 的倍数&#xff0c;我们就称这个区间 [i,j] 是 K 倍区间。 你能求出数列中总共有多少个 K 倍区间吗&#xff1f; 输入描述 第一行包含两个整数…

linux批量创建文件

文章目录 批量创建空文件touch命令批量创建空文件循环结构创建 创建含内容文件echo重定向多行内容写入 按日期创建日志文件根据文件中的列内容&#xff0c;创建文件一行只有一列内容一行有多列内容 批量创建空文件 touch命令批量创建空文件 # 创建文件file1.txt到file10.txt …

[蓝桥杯]高僧斗法

高僧斗法 题目描述 古时丧葬活动中经常请高僧做法事。仪式结束后&#xff0c;有时会有"高僧斗法"的趣味节目&#xff0c;以舒缓压抑的气氛。 节目大略步骤为&#xff1a;先用粮食&#xff08;一般是稻米&#xff09;在地上"画"出若干级台阶&#xff08;…

C++语法系列之类型转换

前言 类型转换是经常存在的情况&#xff0c;类型转换分为隐式类型转化 和 显式类型转化 隐式类型转化&#xff1a;编译器在编译阶段自动进行&#xff0c;能转就转&#xff0c;不能转就编译失败 double i 3.3; int b i; //隐式类型转化 double -> intC搞出来了四种强制类…

Python----循环神经网络(BiLSTM:双向长短时记忆网络)

一、LSTM 与 BiLSTM对比 1.1、LSTM LSTM&#xff08;长短期记忆网络&#xff09; 是一种改进的循环神经网络&#xff08;RNN&#xff09;&#xff0c;专门解决传统RNN难以学习长期依赖的问题。它通过遗忘门、输入门和输出门来控制信息的流动&#xff0c;保留重要信息并丢弃无关…

工作自动化——工作自动提炼--智能编程——仙盟创梦IDE

工作自动化中的自动提炼、自动比对代码生成日志&#xff0c;为软件开发与项目管理带来诸多好处。 自动提炼能从复杂代码中精准提取关键信息&#xff0c;节省人工梳理时间&#xff0c;开发人员可快速把握核心逻辑&#xff0c;加速项目熟悉进程。自动比对代码则及时发现版本间差异…

运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录

Windows的换行符为\r\n&#xff0c;而linux换行符为\n。先查看一下文件是什么格式的 :set ff --查询一下格式是什么 由于使用nodepad新建的脚本&#xff0c;首选项中格式设置成了windows&#xff0c;上传到linux中报错。 解决方法 1、nodepad中【设置》首选项】修改为unix&am…

6. 基础IO

0.背景 a.访问一个文件&#xff0c;都必须先把对应的文件打开&#xff08;打开文件就是把它从磁盘加载到内存中&#xff09; b.如果一个文件&#xff0c;压根就没有被打开&#xff0c;那么它就在磁盘上 c.谁来打开&#xff1f;&#xff1f;用户通过bash&#xff0c;启动进程…

碰一碰发视频-源码系统开发技术分享

#碰一碰营销系统# #碰一碰系统# #碰一碰发视频# 架构设计哲学&#xff1a;近场通信的优雅平衡 一、核心通信技术选型 1. 双模协同传输引擎 技术协议栈延迟控制适用场景NFCISO 14443-A<100ms精准触发场景BLE 5.0GATT Profile300-500ms中距传输场景 工程决策依据&…

动态规划之网格图模型(二)

文章目录 动态规划之网格图模型&#xff08;二&#xff09;LeetCode 931. 下降路径最小和思路Golang 代码 LeetCode 2684. 矩阵中移动的最大次数思路Golang 代码 LeetCode 2304. 网格中的最小路径代价思路Golang 代码 LeetCode 1289. 下降路径最小和 II思路Golang 代码 LeetCod…

QUIC——UDP实现可靠性传输

首先我们要知道TCP存在什么样的痛点问题 TCP的升级很困难TCP建立连接的延迟网络迁移需要重新建立连接TCP存在队头阻塞问题 QUIC就是为了解决以上的问题而诞生了, 下面我会介绍QUIC的一些特性和原理 QUIC对比TCP优势: 握手建连更快 QUIC内部包含了TLS, 它在自己的帧会携带TL…

PyTorch——线性层及其他层介绍(6)

线性层 前面1,1,1是你想要的&#xff0c;后面我们不知道这个值是多少&#xff0c;取-1让Python自己计算 import torch import torchvision from torch import nn from torch.nn import Linear from torch.utils.data import DataLoader# 加载CIFAR-10测试数据集并转换为Tensor格…