根据名字获得子物体_unity UGUI拉取方框 返回距离父物体顶点位置

本文介绍了如何在Unity UGUI中实现基于名字获取子物体并创建拉取方框的功能,用于用户标注。关键步骤包括设置RectTransform的pivot属性、生成透明图片并记录鼠标按下坐标,通过鼠标移动调整方框大小,最后计算方框与父物体顶点的距离。
摘要由CSDN通过智能技术生成

项目中有需要用户标注的地方,类似屏幕截取中的拉矩形,效果如下

9ba1cf9973c9caa507b7b42284dd1f7f.gif

实现方法很简单,首先,将你需要标注的图片的RectTransform组件下的pivot属性,设置为0,1

2e67374e3ec6a28a1096495d5a2a30e3.png

因为我们到时候返回的位置是基于左上角的,然后设置你需要生成的图片

2380cc2c5820b22b90b963a6a2964a5a.png

设置他铺满父物体,把pivot设置0,1,然后image透明度设置为0,因为我们不需要让他显示,只是让他保存距离顶点的位置

接下来就是代码部分,首先生成你的方框图片,设置他的初始值,保存你鼠标按下的坐标

if(Input.GetButtonDown("Fire1"))
        {
            img = Instantiate((GameObject)Resources.Load("动态生成的图片"));
            img.transform.position = Input.mousePosition;
            img.GetComponent<RectTransform>().sizeDelta = Vector2.zero;
            img.transform.SetParent(transform);
            startPos = Input.mousePosition;
            rect = img.GetComponent<RectTransform>();
        }

然后根据你鼠标移动的方向,设置生成图片的pivot属性,根据鼠标移动的距离,设置他的宽高

if(Input.GetButton("Fire1"))
        {
            if(Input.mousePosition.x>startPos.x)
            {
                rect.pivot = new Vector2(0, rect.pivot.y);
            }
            else
            {
                rect.pivot = new Vector2(1, rect.pivot.y);
            }

            if(Input.mousePosition.y>startPos.y)
            {
                rect.pivot = new Vector2(rect.pivot.x, 0);
            }
            else
            {
                rect.pivot = new Vector2(rect.pivot.x, 1);
            }

            rect.sizeDelta = 
            new Vector2(Mathf.Abs(Input.mousePosition.x - startPos.x), Mathf.Abs(Input.mousePosition.y - startPos.y));
        }

最后,用你方框下的子物体,判断你方框距离父物体的距离

if(Input.GetButtonUp("Fire1"))
        {
            Debug.Log("X轴距离父物体" + Mathf.Abs(transform.position.x - img.transform.Find("子物体图片").position.x) +
                "     Y轴距离父物体" + Mathf.Abs(transform.position.y - img.transform.Find("子物体图片").position.y));
            Debug.Log("img的宽" + img.GetComponent<RectTransform>().rect.width +
                "     img的高" + img.GetComponent<RectTransform>().rect.height);
        }

整体代码如下

36722f0cc24cb8e505bfea93368fa0b5.png

词不达意,敬请谅解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值