Unity中的UGUI坐标问题

测试代码:

using UnityEngine;

public class TransformTest : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            transform.position = Vector3.zero;
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            transform.localPosition = Vector3.zero;
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.GetComponent<RectTransform>().anchoredPosition = Vector3.zero;
        }
    }
}

测试的初始设定:白色为父物体,蓝色为子物体(注意父物体的锚点和Pivot的设置):
在这里插入图片描述

按下A键后结果如下图:
在这里插入图片描述
transform.position指的是物体的世界坐标,在UGUI中,世界坐标的原点在屏幕左下角,我把Pivot设置在(0,0)的位置,所以子物体的左下角对准了屏幕的左下角。

按下S键后结果如下图:
在这里插入图片描述
localPosition指的是本地坐标,父物体的Pivot在(1,1)的位置,子物体的Pivot在(0,0)的位置,所以子物体的左下角对准了父物体的右上角。
大家再看一下Inspector面板上的坐标,注意到了吗?面板上的坐标并非是(0,0),莫非Unity出错了?面板上的坐标不是本地坐标吗?

从上面的测试可以看出无论是position还是localPosition,都只与Pivot有关,与锚点无关。

按下D键后结果如下图:
在这里插入图片描述
我们看一下此时Inspector面板上的坐标,都显示为0!!!
anchoredPosition指的是锚点坐标,从这里可以看出,它和Inspector面板上的坐标是对应的,很多人会把anchoredPosition和localPosition搞混。
子物体的锚点在左上角,所以子物体的左下角,对准了父物体的左上角。

从上面的测试可知:
1、父物体的锚点定位对子物体的位置没有影响,
2、子物体的锚点会影响的是anchoredPosition,而非localPosition
3、Inspector面板上的坐标对应的是anchoredPosition
4、localPosition只受子物体和父物体的Pivot影响

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值