测试代码:
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影响