热门标签 | 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);
}

 



推荐阅读
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文将深入探讨使用IMPDP工具进行分区表导入时需要注意的事项,涵盖最佳实践和常见问题。通过详细的分析与解释,帮助读者更好地理解和应用这些知识。 ... [详细]
  • 本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 洞态IAST Java Agent 实现AOP技术详解
    本文深入探讨了洞态IAST Java Agent如何通过AOP技术实现方法调用链和污点值传播等功能,为读者提供了详细的源码分析。 ... [详细]
  • 理解与应用:独热编码(One-Hot Encoding)
    本文详细介绍了独热编码(One-Hot Encoding)与哑变量编码(Dummy Encoding)两种方法,用于将分类变量转换为数值形式,以便于机器学习算法处理。文章不仅解释了这两种编码方式的基本原理,还探讨了它们在实际应用中的差异及选择依据。 ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
  • ML学习笔记20210824分类算法模型选择与调优
    3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ... [详细]
  • 优雅实现 jQuery 折叠展开下拉菜单
    本文介绍了一种使用 jQuery 实现的优雅折叠和展开效果的下拉菜单,通过简单的 HTML 结构和 CSS 样式,结合 jQuery 脚本,可以轻松创建出美观且功能强大的下拉菜单。 ... [详细]
  • Vue 3.0 翻牌数字组件使用指南
    本文详细介绍了如何在 Vue 3.0 中使用翻牌数字组件,包括其基本设置和高级配置,旨在帮助开发者快速掌握并应用这一动态视觉效果。 ... [详细]
  • 地球坐标、火星坐标及百度坐标间的转换算法 C# 实现
    本文介绍了WGS84坐标系统及其精度改进历程,探讨了火星坐标系统的安全性和应用背景,并详细解析了火星坐标与百度坐标之间的转换算法,提供了C#语言的实现代码。 ... [详细]
  • 本文介绍了Kettle资源库的基本概念、类型及其管理方法,同时探讨了Kettle的不同运行方式,包括图形界面、命令行以及API调用,并详细说明了日志记录的相关配置。 ... [详细]
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社区 版权所有