Unity3d UI控件相对于Canvas坐标

本文详细介绍如何在Unity中使用RectTransformUtility.ScreenPointToLocalPointInRectangle函数,实现UI控件及其子控件相对于Canvas坐标的转换。通过具体代码示例,展示如何从世界坐标转换为屏幕坐标,再转换为局部坐标,适用于画布为ScreenSpace-Overlay模式。

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

UI控件位置转换

在这里插入图片描述
如图获得GameObject控件及其子控件相对于Canvas的坐标,需要使用以下函数

//将屏幕空间点转换为位于矩形平面上的RectTransform的局部空间中的位置。
//rect参数是是想要获取的相对控件的坐标,即Canvas控件
//screenPoint参数是控件世界坐标转换为屏幕坐标
//cam参数是与Canvas相关联的摄像机。
//对于画布中的RectTransform设置为Screen Space - Overlay模式,cam参数应该为null。
//当从提供PointerEventData对象的事件处理程序中使用ScreenPointToLocalPointInRectangle时,
RectTransformUtility.ScreenPointToLocalPointInRectangle (
                   RectTransform rect, 
                   Vector2 screenPoint, 
                   Camera cam, 
                   out Vector2 localPoint)

创建Script,添加到GameObject物体上,代码如下

		Camera camera = GameObject.Find("Main Camera").GetComponent<Camera>();
        RectTransform canvas = GameObject.Find("Canvas").GetComponent<RectTransform>();
        Vector2 localPos = Vector3.zero;

        RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas,
               camera.WorldToScreenPoint(transform.position), camera, out localPos);
        Debug.Log(localPos);

        foreach (Transform trans in transform)
        {
            RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas,
                camera.WorldToScreenPoint(trans.position), camera, out localPos);
            Debug.Log(localPos);
        }

transform.position 物体的世界坐标,camera.WorldToScreenPoint 世界坐标转换为屏幕坐标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值