找到画布的左上角位置

问题描述 投票:0回答:2

获取物体的位置:

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

但它返回对象的center的位置。

如何获取左上角位置?

c# canvas unity-game-engine position
2个回答
5
投票

mainCanvas.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 位于本地空间,而不是世界空间


0
投票

你应该像这样得到左上角:

Vector3[] worldCorners = new Vector3[4];
mainCanvas.GetComponent<RectTransform().GetWorldCorners(worldCorners);
Vector3 topLeft = worldCorners[1]; 

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

© www.soinside.com 2019 - 2024. All rights reserved.