arm*_*ong 7 c# position rect unity-game-engine
我在使用 Unity 的 UI rectTransform 进行编程时发现了一个非常令人困惑的问题:
在检查器中,我们可以发现 RectTransform 的位置被设置为 (0,0,0)

但是在 中的代码中Start(),当我打印位置时:
parentObject = transform.parent.gameObject;
Debug.Log("parentObject rectTransform :" + parentObject.GetComponent<RectTransform>().localPosition);
Run Code Online (Sandbox Code Playgroud)
这会给我一个位置:
parentObject rectTransform :Panel: (0.0, -562.5, 0.0)
UnityEngine.Debug:Log(Object)
NewWorkerController:Start() (at Assets/Scripts/NewWorkerController.cs:60)
Run Code Online (Sandbox Code Playgroud)
当我们尝试使用position代替时,事情会更加混乱localPosition:
parentObject rectTransform :Panel: (621.0, 1365.5, 0.0)
UnityEngine.Debug:Log(Object)
NewWorkerController:Start() (at Assets/Scripts/NewWorkerController.cs:60)
Run Code Online (Sandbox Code Playgroud)
我还在 playMode 期间检查了这个 rectTransform 的 posX 和 posY,这表明它没有被改变(一直显示(0,0,0))
那有什么问题?
您在RectTransform组件中看到的不是本地位置。手册上说:
定位 UI 元素
UI 元素通常使用其矩形变换进行定位。如果 UI 元素是布局组的子元素,它将被自动定位并且可以跳过定位步骤。
在定位 Rect Transform 时,首先确定它是否具有或应该具有任何拉伸行为是很有用的。当 anchorMin 和 anchorMax 属性不相同时,就会发生拉伸行为。
对于非拉伸矩形变换,通过设置 anchoredPosition 和 sizeDelta 属性最容易设置位置。anchoredPosition 指定枢轴相对于锚点的位置。sizeDelta 与没有拉伸时的大小相同。
对于拉伸矩形变换,使用 offsetMin 和 offsetMax 属性设置位置会更简单。offsetMin 属性指定矩形左下角相对于左下锚点的角。offsetMax 属性指定 rect 右上角相对于右上角的角
来源:https : //docs.unity3d.com/Manual/HOWTO-UICreateFromScripting.html
在您的情况下,您有一个非拉伸的矩形变换。因此,尝试打印锚定位置:
parentObject = transform.parent.gameObject;
Debug.Log("parentObject rectTransform :" + parentObject.GetComponent<RectTransform>().anchoredPosition);
Run Code Online (Sandbox Code Playgroud)