Unity新手笔记(1): 矩形组件、锚点、重心点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity新手笔记(1): 矩形组件、锚点、重心点相关的知识,希望对你有一定的参考价值。
参考技术A 以前理解不到位,写的不清楚,现在重新理了一下。每个矩形组件都有锚点和重心点。
对象拥有锚点, 但是锚点的位置是对于父对象而言的 ,如下图,父对象是画布,子对象是图片。举两个栗子就能看清这两者的关系。
不同于锚点, 重心点的位置是相对于对象本身而言的 ,举三个栗子。
width, height : 显而易见是矩形的长宽
Pos X , Pos Y :以锚点为原点,向右、上为正方向的坐标系里,重心点的位置 ,举个两个栗子:
锚框: 四个小雪花不在一起,会组成一个锚框。
Top bottom left right = 矩形组件四边 相对于 锚框四边 的距离
举一个栗子:
猜测:RectTransform类的rect属性决定了RectTransform的绘制,以重心点为原点,向左和向下确定子对象矩形边的位置
1. anchoredPosition属性
① 小雪花在一起时,以锚点为原点,求重心点的相对坐标
②小雪花不在一起时,以右上角的小锚点为原点,求重心点的相对坐标
2. offsetMin属性 以左下角的小锚点为原点 求矩形组件左下角的相对坐标
3. offsetMax属性 以右上角的小锚点为原点 求矩形组件右上角的相对坐标
4. sizeDelta属性 (尺寸变化量)
① 小雪花在一起时,就是矩形组件的长宽;
②小雪花不在一起时,等于 矩形长宽 相对于 锚框长宽 的变化量:
(矩形X轴长度-锚框X轴长度,矩形Y轴长度-锚框Y轴长度)
Unity中sizeDelta的真正含义
一:前言
获取UI的长宽,可以使用sizeDelta,但是Unity官方对于sizeDelta是这样解释的:Anchors在同一点的时候,sizeDelta相当于获取长宽,但是Anchors不在同一点时,表示的只是UI真实大小比Anchors矩形大多少
offsetMax = ui矩形右上角坐标 - 锚点矩形右上角坐标
offsetMin = ui矩形左下角坐标 - 锚点矩形左下角坐标
sizeDelta = offsetMax - offsetMin;
=>
sizeDelta = ((ui矩形右上角坐标 - 锚点矩形右上角坐标) - (ui矩形左下角坐标 - 锚点矩形左下角坐标));
上面的公式其实是sizeDelta的真实含义,这就解释了为什么当Anchors在同一个点的时候相当于获取UI元素的宽高,因为当Anchors在同一个点的时候锚点矩形的右上角坐标和左下角坐标是一样的,sizeDelta相当于ui矩形右上角坐标-ui矩形左下角坐标,也就是获取UI元素的宽高
二:使用
为了避免出现与预期不符的效果,通过以下两种方法都可以正确的设置UI大小
——使用UGUI的SetSizeWithCurrentAnchors方法
public void SetRectTransformSize(RectTransform rt, Vector2 size)
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
——自己计算
public void SetRectTransformSize(RectTransform rt, Vector2 size)
Vector2 oldSize = rt.rect.size;
Vector2 deltaSize = size - oldSize;
rt.offsetMin = rt.offsetMin - new Vector2(deltaSize.x * rt.pivot.x, deltaSize.y * rt.pivot.y);
rt.offsetMax = rt.offsetMax + new Vector2(deltaSize.x * (1f - rt.pivot.x), deltaSize.y * (1f - rt.pivot.y));
三:总结
获取UI的宽高时,使用rect.height/width
设置UI的宽高时,使用以上两种方法之一
以上是关于Unity新手笔记(1): 矩形组件、锚点、重心点的主要内容,如果未能解决你的问题,请参考以下文章