首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之获取UI子节点在Canvas的2D坐标(十二)
2015
05-12

UGUI研究院之获取UI子节点在Canvas的2D坐标(十二)

今天一个同事问我怎么样获取UI在Canvas下的2D坐标。我查了一下API,其实很简单。如下图所示,UI比较复杂了子节点会很多,假设我想获取某个子的子节点的2D坐标。

UGUI研究院之获取UI子节点在Canvas的2D坐标(十二) - 雨松MOMO程序研究院 - 1
首先我们要搞清楚 transform.postion 和 rectTransform.anchoredPosition  这两个坐标是完全不一样的。前面的是3D坐标,后面的是2D在Rect里的坐标,并且还是相对坐标,那么节点深了坐标就更不好换算了。

所以上述代码就是用UI元素的世界坐标和canvas的RectTrasform再加上UI摄像机,换算出元素在Canvas的2D坐标。

最后在想需要赋值的UI 用 rectTransform.anchoredPosition = pos 就可以了。。

今天有朋友问我,怎么通过鼠标的坐标在屏幕上移动来更新UI的显示位置。代码如下

 

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 当看到大神这么写的时候,还纳闷一下,为啥应该填屏幕坐标的参数位置填世界坐标?经测试,当相机为canvas.camera的时候,世界坐标与屏幕坐标是相等的.canvas的范围就是摄像机的范围,同时左下角又是世界坐标系原点,也是屏幕坐标系原点.这样就不用将世界坐标转换成屏幕坐标了,加快了效率.

  2. 雨松 大神,有一点不明的地方,ScreenPointToLocalPointInRectangle ()里面的参数不应该是 RectTransform ,Vector2,camera,out 吗,怎么你这里的第三个参数可以是 Vector3 呢?