获取UGUI子节点在Canvas的屏幕坐标

本文介绍了在Unity中如何获取UGUI子节点在Canvas的2D屏幕坐标,针对RectTransformUtility.ScreenPointToLocalPointInRectangle函数的使用进行了解析,纠正了原作者的参数错误,并提供了正确的实现方式,通过Camera.main.WorldToScreenPoint转换3D位置到屏幕坐标,最终得到正确结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为项目需要,需要我们能够在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的文档对这个函数第三个参数的说明,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值