1. Inspector面板中Transform的位置信息显示的是localPosition
2. Inspector面板中RectTransform的位置信息显示的是anchoredPosition3D
- 2.1
localPosition
表示的是子物体的pivot相对于父物体的pivot的坐标 - 2.2
anchoredPosition3D
表示的是子物体的pivot相对于anchor的坐标,当anchor不是一个点时表示前3个元素(left,top,z) - 2.3 当子物体的anchor与父物体的pivot坐标重合时
anchoredPosition3D
与localPosition
相等
3. 实例验证(这里为了学习编辑器拓展,采用了编辑器拓展的方式)
- 3.1 新建两个Image用于测试,相对位置布置如图:
- 3.2 在Editor目录下新建编辑器拓展脚本
using UnityEditor;
using UnityEngine;
public class CanvasUpdate // 脚本不需要做成组件,所以不需要继承MonoBehaviour
{
private static Transform m_Tran = GameObject.Find("ImageBlue").transform;
private static void DebugPos()
{
RectTransform rect = m_Tran.GetComponent<RectTransform>();
//Debug.Log(rect.parent.localPosition);
Debug.Log(rect.localPosition);
Debug.Log(rect.anchoredPosition3D);
}
[MenuItem("CanvasUpdate/Do it! %&z")] // %代表ctrl #代表shift &代表alt
private static void UpdateCanvas() // 必须是static
{
//Canvas.ForceUpdateCanvases(); // 强制刷新所有Canvas的内容
Debug.Log("UpdateCanvas");
DebugPos();
}
}
- 3.3 调整父子物体anchor与pivot的位置,然后ctrl+alt+z(不用运行游戏)即可实时打印出
localPosition
与anchoredPosition3D
。以下为按图3.1布置两物体时的打印结果:
注意:三维物体在Canvas之外创建,Inspector面板中是Transform,在Canvas下创建则Inspector面板中是RectTransform!