UGUI锚点自适应问题

最近使用UGUI发现一种情况,那就是需要让锚点和ui元素的四个角对齐,但是很不幸,我从unity找了半天,也没找到这个功能,无奈之下,自己写了个插件。

想法是得到UI元素四个角的位置,然后更改锚点的位置与UI元素的位置对齐,因为锚点实际上只用min与max两个值就可以确定,所以其实我们也只需要得到UI元素的左下角和右上角的值。
在这里插入图片描述
我们得到UI元素坐标的方法有两个,一个是通过GetWorldCorners(Vector3[] fourCornersArray),这个方法可以直接得到UI元素的4个坐标,里面的四个元素分别是UI的左下角 ,左上角,右上角,右下角。

使用这个方法,可以取得UI元素四个角的世界坐标,具体使用方法,先建立一个长度为4的vector3数组,然后传进这个方法,调用一次后,数组被赋值。

在这里插入图片描述
然后我们也可以使用计算的方式来得到UI的左上角和右上角的坐标。
首先UI的这个坐标可以分成两部分来求,从锚点到UI元素的距离和(0,0)位置到锚点的距离,这两个距离加起来就是UI元素的坐标。

在这里插入图片描述
锚点到UI元素的距离可以直接使用Offset,
OffsetMax与OffsetMin
然后我们再求一下锚点到(0,0)的距离,也就是父对象的左下角,因为UGUI的距离都是从左下开始,那里是原点。
要求锚点到父对象左下角的距离,那么我们还需要了解到一个点。
那就是锚点的min和max的值是有范围的,这个范围是(0,1),为什么会有这个范围呢,因为锚点的位置是按照UI元素的父对象的百分比来确定的,emm,意思就是把UI元素的父对象的总长度(长和宽)设为1,然后锚点所在位置从左下(0,0)算起,占据百分之多少,就是锚点的距离的值。
有了这个概念,那么我们就可以用锚点距离左下的实际距离除以UI元素父对象的总长度来得到这个(0,1)的值,也就是锚点到(0,0)的距离,这个距离的范围是(0,1)。
我们把这个距离加上之前使用offset得到的锚点到UI元素的距离,就是UI元素的坐标。
在这里插入图片描述

我们来试一试
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们会发现,锚点确实已经对齐了UI元素的位置,但是UI元素却被缩放了,这是因为我们的offset,也就是UI元素与锚点的距离还存在,我们只要把OffsetMax与OffsetMin置0就可以了,(小伙伴可以试试直接将这个值置零,看锚点会不会直接对齐UI元素)
在这里插入图片描述
然后我们点击在这里插入图片描述

在这里插入图片描述
很好,成功将锚点对准了UI元素的四个角。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值