修改RectTransform.pivot时UI位置会移动的问题(有小坑)
因为在脚本中直接改pivot会导致UI移位,就自己写了个方法,思路也很简单粗暴,就是计算距离然后把它拽回去,本以为不会出bug的...
而坑就是Unity会自作聪明地对于一些特殊的布局(比如拉伸至全屏状态时)进行自动修正,但一般的UI布局它又不修正...事实上,还有更细的一些判定条件……总之很坑……
观察后能看出Unity是只改了LocalPosition,最后修改代码如下:
// 改变一个RectTransform组件的pivot值,但是保持其实际位置不变 public static void ChangePivot(RectTransform rectTransform, float newPivotX, float newPivotY) { float originalPivotX = rectTransform.pivot.x; float originalPivotY = rectTransform.pivot.y; // 在某些特定布局下,Unity会在设置Pivot时自动调整LocalPosition以试图保持UI对象不被挪动,但这个“贴心”设定充满意外惊喜需要排除 Vector3 originalLocalPosition = rectTransform.localPosition; rectTransform.pivot = new Vector2(newPivotX, newPivotY); rectTransform.localPosition = originalLocalPosition; rectTransform.transform.position += new Vector3((newPivotX - originalPivotX) * rectTransform.rect.width, (newPivotY - originalPivotY) * rectTransform.rect.height, 0); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~