2017-05-09 93 views
4

的左上位置获取对象的位置:查找帆布

Vector3 mainCanvasPosition = mainCanvas.GetComponent<RectTransform>().position; 

但它返回的对象中心的位置。

我怎样才能得到左上角的位置? enter image description here

+0

你是指屏幕的左上角位置还是画布? – Programmer

+0

@Programmer只是画布(拿着绿色面板) – David

回答

5

mainCanvas.GetComponent()。rect.xMin为您提供了在canvas空间中的最小x位置,而不是在世界空间中。因此,如果将xMin添加到画布的x位置,则会在世界空间中获得最小的x画布位置。对y也一样。

所以;

float minX = mainCanvas.GetComponent<RectTransform>().position.x + mainCanvas.GetComponent<RectTransform>().rect.xMin; 
float maxY = mainCanvas.GetComponent<RectTransform>().position.y + mainCanvas.GetComponent<RectTransform>().rect.yMax; 
float z = mainCanvas.GetComponent<RectTransform>().position.z; 

Vector3 topLeft = new Vector3(minX, maxY, z); 

会给你画布的左上角

编辑:https://docs.unity3d.com/ScriptReference/RectTransform-rect.html

如果你看一下统一的参考,你应该看到RectTransform.rect是在局部空间,而不是在世界空间

+2

我的网络有问题,无法回复。至于我的解决方案,你用'TransformPoint'将本地转换为世界空间,这根本不是问题。实际上,我是通过现场视图来测试我的,所以我没有注意到这一点。 – Programmer