首页 > 代码库 > 获取UGUI子节点在Canvas的屏幕坐标
获取UGUI子节点在Canvas的屏幕坐标
因为项目需要,需要我们能够在Canvas下获取UI子结点在2D屏幕中的坐标位置。这个子结点可以是嵌套的,如图,注意RectTransform中的Pos值
获得的2D坐标是以屏幕坐标的,比如你的Canvas是1024*768,中间的点就是(0,0),左偏移100,就是(-100,0)。在某牛看到一篇帖子给出的方案是调用
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transformasRectTransform,
transform.position, canvas.camera,out pos)
但经过试验,发现原文作者对这个函数的参数存在一定的问题。
首先来看 rectTransform.anchoredPosition。这个坐标是Canvas中的2D坐标,是轴点相对于4个锚点中心点的位置。
transform.position是3D位置坐标,世界坐标系。
但是我分析,对于RectTransform,这个坐标值并不是一个世界坐标值,因为我写了很多转换这个position的代码,在RectTransform时,都是得到莫名的结果。有清楚其原理的高人可以提出,我也学习下。
所以当你用transform.position时,这是得到的pos是一个很奇怪的值。
看Unity的文档对这个函数第三个参数的说明,
看上去应该是屏幕坐标系的点拿来运算。因此我改动了原文作者的代码为
if(RectTransformUtility.ScreenPointToLocalPointInRectangle(
cvs.transformasRectTransform,Camera.main.WorldToScreenPoint(transform.position),
cvs.worldCamera,outlocal))
{
Debug.Log(local);
}
输出结果正常了
获取UGUI子节点在Canvas的屏幕坐标
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。