unity知识点 专项四 一文彻底说清楚(锚点(anchor)、中心点(pivot)、位置(position)之间的关系)

一 概述

想要使UI控件在屏幕中达到正确的显示效果,比如自适应屏幕尺寸、固定边距等等,首先要理清楚几个基本概念和设置:锚点(anchor)、中心点(pivot)、位置(position)、UI缩放模式、父物件的transform设置

二   Anchor、Pivot与Position

2.1  Anchor (结论anchor以父物件为坐标参考系)

  • anchor可以理解为是该控件所在的平面坐标系原点,在屏幕缩放或者形变的过程中,控件本身自始至终都是参照其anchor的位置进行相对移动。就像是船与船锚的关系。
  • anchor可以设置一个坐标(x, y),这个坐标的参考系是该控件所属的父层级,比如,如果直接在Canvas层级底下摆放控件,那么整个屏幕就是其父层级。不论这个父层级的比例高矮、像素多大,它的坐标范围都会被钳制在0-1之间,如果希望子物件的锚点位于父物件的正中间,那么子物件的锚点坐标需要设置为(0.5, 0.5)。

2.2 Pivot(结论pivot 以自身为坐标参考系)

  • pivot虽然被翻译为中心点,但容易造成误解,因为pivot并不一定在物体中心,甚至可以超出物件的范围。可以理解为轴点(绕该点旋转),或者是吸附点(用该点去吸附目标位置)
  • pivot也具有一个坐标 (x, y),这个坐标的参考系是控件本身(子层级),原点位于控件的最左下角,(1, 1)点位于最右上角

2.3 Position(结论 position是pivot与anchor的相对距离

这里和anchoredPosition的位置计算方法类似

  • position提供的信息是pivot与anchor的相对距离,例如坐标 (50,125)就代表:该控件的pivot位于自身anchor的x轴正方向50像素,y轴正方向125像素处。不论屏幕的比例、像素如何变化,pivot与anchor将始终保持(50, 125)的向量值
  • 通过图示可以清楚的看到,anchor以父物件为坐标参考系,pivot 以自身为坐标参考系,position代表二者的距离

三 显示窗口与属性面板

通过图2可以看到:

  1. 不论锚点、中心点位于何处,控件的显示位置依然在最中央
  2. anchor只能手动拖动到父物件的边界,它的活动范围取决于父物件的大小(如果直接设置坐标,可以超出这个范围)
  3. pivot的位置不受限制,所以前面提到,“中心点”的翻译并不贴切

                                                  图二

但是令人尴尬的事情发生了,当屏幕的比例发生变化时,控件并没有跟随屏幕自适应(图3)。不过可以注意到:

  1. 锚点依然位于父层级的左下角,锚点与父物件的相对位置没有发生改变
  2. pivot与锚点的相对位置没有发生改变
  3. 控件与pivot的相对位置没有发生改变

通过梳理他们三者的关系,可以尝试这样一种思路:1.设置锚点坐标(0.5, 0.5),使其处于父物件的中心,不论屏幕如何变化,锚点都在中心位置。2.设置pivot坐标为(0.5, 0.5),使其处于子物件中心。3.设置PosX=0, PosY=0,使锚点到pivot的向量值归零,吸附到一起。问题解决

点开Transform中的面板(图4),这里可以快速设置锚点的位置,另外两个必须要注意的按键是 shift 和 alt,可以有效提高我们的效率:shift+点击 可以同时设置锚点与pivot;alt+点击 可以同时设置锚点与position;两个键同时按下则可以快速设置三个属性

                                                                 图四

shift+alt+点击,所有属性会快速定位到对应的位置(图5)。如果我们的目标位置在某一个空白处,则可以手动拖拽anchor,然后将PosX,PosY设置为(0, 0),消除pivot与anchor的相对距离,控件便会自动吸附到锚点处。由于pivot默认在控件的中心位置(0.5, 0.5),所以不需要额外设置。

                                                               图五

四 注意点 check points

4.1 UI缩放模式

找到 Canvas-UI Scale Mode,下拉菜单中有三种选项,分别是:constant pixel size/ scale with screen size/ constant phsical size。也就是保持像素/跟随缩放/保持物理距离,该缩放模式与transform设置可以形成多种排列组合结果,所以就不举例了。如果效果不正确,记得检查该处设置即可

4.2 父物件的transform设置

通常不会将所有的UI控件都放在Canvas层级下,而是会有类似 Canvas-grandpa-father-son 的层级管理,所以应当注意之中的 grandpa、father的尺寸(宽度width*高度height),如果最底下的son控件需要根据整个屏幕自适应,那么须确保grandpa与father已填充了屏幕尺寸。(如图4所示,可以通过alt+点击最右下角,填充整个屏幕)

五 思考

5.1 题目描述

现在需要在屏幕右下角放置一个button,有两种设计模式,一种是永远保持与屏幕边框20像素;另一种是永远在屏幕右下角1/10距离处,应该如何实现?

5.2 分析方案

对于第一种模式,我们需要将pivot移动到控件的右下角(1, 0),将anchor移动到屏幕的右下角(1,0),然后将position(相对距离)设置为 PosX=-20, PosY=20, 使pivot位于锚点x轴负方向20像素,y轴正方向20像素处见下图

对于第二种模式,pivot设置为(1,0),锚点设置为(0.9,0.1),PosX=0, PosY=0,将pivot吸附到锚点如下图

六 localPosition与anchoredPosition(3D)的区别 见下面链接

unity知识点 专项一 localPosition与anchoredPosition(3D)的区别-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络连接线相关问题

问题1; 直通线为什么两头都是T568B?是否可以两台T5568A?或者任意线序,只需两头一致? 不行,施工规范规定。(原因;网线最长距离100m,实际用起来要把网线包管,走…

【分布式系统】Filebeat+Kafka+ELK 的服务部署

目录 一.实验准备 二.配置部署 Filebeat 三.配置Logstash 四.验证 一.实验准备 结合之前的博客中的实验 主机名ip地址主要软件es01192.168.80.101ElasticSearches02192.168.80.102ElasticSearches03192.168.80.103ElasticSearch、Kibananginx01192.168.80.104nginx、Logs…

iperf3: error - unable to connect to server: No route to host

1.确认iperf3版本是否统一。 2.确认防火墙是否关闭。 关闭防火墙 : systemctl stop firewalld 查看防火墙状态: systemctl status firewalld 3.重新建起链接

自动驾驶算法———车道检测(一)

“ 在本章中,我将指导您构建一个简单但有效的车道检测管道,并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入,并产生车道边界的数学模型作为输出。图像由行车记录仪(固定在车辆挡风玻璃后面的摄像头)捕获。…

【ZIP压缩大揭秘】轻松掌握ZIP分卷压缩包的高效解压秘籍!

在这个信息爆炸的时代,文件大小常常成为我们分享与存储的绊脚石。幸运的是,ZIP分卷压缩技术如同一把钥匙,巧妙地将庞然大物分解成小巧易管理的部分。但面对这一串分卷压缩包,你是否也曾迷茫于如何高效解压,恢复文件的完…

解码Python字符串:‘r‘、‘b‘、‘u‘和‘f‘前缀的全面指南

📖 正文 1 字符串前加’r’ 表示原始字符串,消除转义 print(abc\nde) # abc # deprint(rabc\nde) # abc\nde在下面这个列子中,如果不在路径字符串前面加r那么,路径中的空格就会出现问题 print(rD:\01 programming\09python\py…

全志A527 T527 cat /proc/cupinfo没有Serial问题

1.前言 我们有些客户是使用cpuinfo节点去获取系统的cpuid的,如下: cat /proc/cupinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU impleme…

系统吃swap问题排查

目录 背景 问题 分析并解决 1.控制线程数 2.更换IO组件 3.Linux进程信息文件分析 总结加餐 参考文档 背景 隔壁业务组系统是简单的主从结构,写索引的服务(主)叫primary, 读索引并提供搜索功能的服务(从)叫replica。业务线同步数据并不是平滑的&…

static的理论学习

在说到static之前,需要先明确变量类型: 而在聊到变量类型之前我们可以将变量的两个属性好好学一学 变量的两个属性 作用域(scope): 从内存的角度来看,就是变量存放在栈(stack)中&…

TypeError: Cannot read properties of null (reading ‘nextSibling‘)

做项目用的Vue3Vite, 在画静态页面时,点击菜单跳转之后总是出现如下报错,百思不得其解。看了网上很多回答,也没有解决问题,然后试了很多方法,最后竟然发现是template里边没有结构的原因。。。 原来我的index.vue是这样…

ELK+Filebeat+Kafka+Zookeeper

本实验基于ELFK已经搭好的情况下 ELK日志分析 架构解析 第一层、数据采集层 数据采集层位于最左边的业务服务器集群上,在每个业务服务器上面安装了filebeat做日志收集,然后把采集到的原始日志发送到Kafkazookeeper集群上。第二层、消息队列层 原始日志发…

Matlab手搓线性回归-非正规方程法

原理:wxb,x是输入,求得的结果与真实值y求均方误差。 采用链式法则求导 参数更新,梯度下降法(批量梯度下降) 随机生成数据: m100;生成100个数据,并添加随机噪声 clear; …

基于flask的猫狗图像预测案例

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

二次元转向SLG,B站游戏的破圈之困

文 | 螳螂观察 作者 | 夏至 2023年是B站游戏的滑铁卢,尽管这年B站的游戏营收还有40多亿,但相比去年大幅下降了20%,整整少了10亿,这是过去5年来的最大跌幅,也是陈睿接管B站游戏业务一年以来,在鼻子上碰的第…

鸿蒙语言基础类库:【@ohos.process (获取进程相关的信息)】

获取进程相关的信息 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。…

昇思13天

ResNet50迁移学习 ResNet50迁移学习总结 背景介绍 在实际应用场景中,由于训练数据集不足,很少有人会从头开始训练整个网络。普遍做法是使用在大数据集上预训练得到的模型,然后将该模型的权重参数用于特定任务中。本章使用迁移学习方法对Im…

imx6ull/linux应用编程学习(13) CMAKE

什么是cmake? cmake 工具通过解析 CMakeLists.txt 自动帮我们生成 Makefile,可以实现跨平台的编译。cmake 就是用来产生 Makefile 的工具,解析 CMakeLists.txt 自动生成 Makefile: cmake 的使用方法 cmake 就是一个工具命令&am…

怎么将aac文件弄成mp3格式?把aac改成MP3格式的四种方法

怎么将aac文件弄成mp3格式?手头有一些aac格式的音频文件,但由于某些设备或软件不支持这种格式,你希望将它们转换成更为通用的MP3格式。而且音频格式的转换在现在已经是一个常见且必要的操作。aac是一种相对较新的音频编码格式,通常…

大模型增量预训练新技巧-解决灾难性遗忘

大模型增量预训练新技巧-解决灾难性遗忘 机器学习算法与自然语言处理 2024年03月21日 00:02 吉林 以下文章来源于NLP工作站 ,作者刘聪NLP NLP工作站. AIGC前沿知识分享&落地经验总结 转载自 | NLP工作站 作者 | 刘聪NLP 目前不少开源模型在通用领域具有不错…

el-scrollbar实现自动滚动到底部(AI聊天)

目录 项目背景 实现步骤 实现代码 完整示例代码 项目背景 chatGPT聊天消息展示滚动面板,每次用户输入提问内容或者ai进行流式回答时需要不断的滚动到底部确保展示最新的消息。 实现步骤 采用element ui 的el-scrollbar作为聊天消息展示组件。 通过操作dom来实…