找到画布的左上角位置

4
获取对象的位置:
Vector3 mainCanvasPosition = mainCanvas.GetComponent<RectTransform>().position;

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

我怎样才能得到左上角的位置? 输入图像描述


您是指屏幕的左上角位置还是仅指画布? - Programmer
@程序员 只需要画布(用于容纳绿色面板)即可。 - David
2个回答

5
主Canvas.GetComponent().rect.xMin给出了画布在画布空间中的最小x位置,而不是世界空间中的位置。因此,如果你将xMin添加到画布的x位置上,你就得到了画布在世界空间中的最小x位置。对于y也是一样。
所以;
var canvasTransform = mainCanvas.GetComponent<RectTransform>();
float minX = canvasTransform.position.x + canvasTransform.rect.xMin;
float maxY = canvasTransform.position.y + canvasTransform.rect.yMax;
float z = canvasTransform.position.z;

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

将给你画布的左上角

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

如果你查看Unity的参考,你应该会发现RectTransform.rect是在本地空间而不是世界空间中的。


2
我遇到了互联网问题,无法回复。至于我的解决方案,你可以使用“TransformPoint”将本地坐标转换为世界坐标,这样就没有任何问题了。实际上,我是通过场景视图测试我的代码的,所以没有注意到这个问题。 - Programmer
有谁知道如何用Javascript实现这个功能? - Ujjual

0
你应该像这样获得左上角:
Vector3[] worldCorners = new Vector3[4];
mainCanvas.GetComponent<RectTransform().GetWorldCorners(worldCorners);
Vector3 topLeft = worldCorners[1]; 

如果您需要在画布中放置某些内容,可以考虑使用本地坐标(transform.localPosition),并将左上角设置为锚点:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接