热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

修改RectTransform.pivot时UI位置会移动的问题(有小坑)

因为在脚本中直接改pivot会导致UI移位,就自己写了个方法,思路也很简单粗暴,就是计算距离然后把它拽回去,本以为不会出bug的而坑就是Unity会自作聪明地对于一些特殊的布

因为在脚本中直接改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);
}

 



推荐阅读
author-avatar
临冬将至
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有