当前位置: 首页 > article >正文

UGUI判断点击坐标是否在UI内部,以及子UI内部

public void GetClickArea(Vector2 screenPoint)
{
    Vector2 localPoint;
    //将屏幕坐标转化为相对rectTrans的本地坐标
    if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, screenPoint, UICamera, out localPoint))
    {
           
        if (rectTrans.rect.Contains(localPoint))
        {
            Debug.LogError("内部");
        }
        else
        {
            Debug.LogError("外部");
        }
    }
}

上面代码很好理解,用了UGUI的API把屏幕坐标点(以左下角为原点)的点转化到UI坐标点

现在有个问题来了,如果我们在rectTrans内部还有个子物体,我们想判断点在了子物体内部还是外部,那该怎么判断呢

    public void GetClickArea(Vector2 point)
    {
        Vector2 localPoint;
        //将屏幕坐标转化为相对rectTrans的本地坐标
        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, point, Camera.main, out localPoint))
        {
            //rectTrans.rect是rectTrans的本地坐标,不能rectTrans.rect.Contains(point)直接判断,必须先转为本地坐标localPoint
            //判断点击的坐标点是否在子物体内
            //屏幕坐标减去子UI的坐标很重要,否则判定错误
            Vector2 pos = localPoint - (Vector2)validArea.localPosition;
            if (validArea.rect.Contains(pos))
            {
                Debug.LogError("上部");
            }
            else
            {
                Debug.LogError("下部");
            }
        }
    }


http://www.kler.cn/a/518230.html

相关文章:

  • 运行虚幻引擎UE设置Visual Studio
  • spark sql中对array数组类型操作函数列表
  • android studio搭建NDK环境,使用JNI (Java 调 C) 二 通过CMake
  • Couchbase UI: Server
  • 期权帮|如何利用股指期货进行对冲套利?
  • AI如何改变IT行业
  • 单片机基础模块学习——按键
  • vulnhub靶场【kioptrix-3】靶机
  • HTML<kbd>标签
  • C#AWS signatureV4对接Amazon接口
  • 2025年编程AI工具概览
  • 2025美赛Latex模板可直接运行!O奖自用版
  • 蓝桥杯3522 互质数的个数 | 数论
  • c语言(转义字符)
  • Linux磁盘挂接教程
  • Prompt 提示词详解
  • ConnectionResetError: [Errno 104] Connection reset by peer
  • 2K高刷电竞显示器推荐
  • 【力扣Hot 100】普通数组2
  • 回首2024,展望2025