[Unity] 获取某个 UI 元素的世界坐标

729 阅读1分钟

测试代码:

Debug.Log(rectTransform.TransformPoint(rectTransform.rect.center));
Debug.Log(rectTransform.transform.position);
Debug.Log(Camera.main.ScreenToWorldPoint(rectTransform.transform.position));

对于 Canvas 为 Screen Space - Overlap 的情况,rectTransform.TransformPoint(rectTransform.rect.center)rectTransform.transform.position 是相同的,并且都是屏幕坐标

因此要获得某个 UI 元素的世界坐标,需要先获得他的屏幕坐标,然后转为世界坐标

这个转化可能不精确,可能需要后期自己做一些处理来调整到精确的位置,例如

Vector3 worldPos = Camera.main.ScreenToWorldPoint(rectTransform.transform.position);
worldPos.x -= worldPos.x % 0.5f;
worldPos.y -= worldPos.y % 0.5f;
worldPos.z = 0f;
targetObj.transform.position = worldPos;

这里就是把他限定在 0.5f 单位上

但是其实如果真的需要物体与 UI 完全重合的话,限定在 0.5f 单位上反而会导致不重叠……画蛇添足了