it编程 > 开发工具 > IDE

unity里鼠标位置是否在物体上。

51人参与 2024-08-02 IDE

1. 使用raycast

如果你的图片是在ui canvas上,可以使用raycast来检测鼠标点击是否在图片上。

using unityengine;
using unityengine.eventsystems;
using unityengine.ui;

public class imageclickchecker : monobehaviour
{
    public image targetimage;

    void update()
    {
        if (input.getmousebuttondown(0))
        {
            if (ispointeroveruiobject(targetimage.gameobject))
            {
                debug.log("mouse is over the image!");
            }
            else
            {
                debug.log("mouse is not over the image.");
            }
        }
    }

    private bool ispointeroveruiobject(gameobject target)
    {
        pointereventdata pointereventdata = new pointereventdata(eventsystem.current);
        pointereventdata.position = input.mouseposition;

        list<raycastresult> results = new list<raycastresult>();
        eventsystem.current.raycastall(pointereventdata, results);

        foreach (raycastresult result in results)
        {
            if (result.gameobject == target)
            {
                return true;
            }
        }
        return false;
    }
}
 

2. 使用recttransform utility

另外一种方法是直接使用recttransformutility来进行坐标转换和检测。

using unityengine;
using unityengine.ui;

public class imageclickchecker : monobehaviour
{
    public image targetimage;

    void update()
    {
        if (input.getmousebuttondown(0))
        {
            if (ismouseoverimage(targetimage))
            {
                debug.log("mouse is over the image!");
            }
            else
            {
                debug.log("mouse is not over the image.");
            }
        }
    }

    private bool ismouseoverimage(image image)
    {
        recttransform recttransform = image.getcomponent<recttransform>();
        vector2 localmouseposition = recttransformutility.screenpointtolocalpointinrectangle(
            recttransform, input.mouseposition, null, out vector2 localpoint);
        return recttransform.rect.contains(localpoint);
    }
}
 

3. 使用collider和physics raycast

如果你的图片是3d对象,使用collider和physics raycast可以更容易实现。

using unityengine;

public class imageclickchecker : monobehaviour
{
    void update()
    {
        if (input.getmousebuttondown(0))
        {
            ray ray = camera.main.screenpointtoray(input.mouseposition);
            raycasthit hit;

            if (physics.raycast(ray, out hit))
            {
                if (hit.collider != null && hit.collider.gameobject == this.gameobject)
                {
                    debug.log("mouse is over the image!");
                }
                else
                {
                    debug.log("mouse is not over the image.");
                }
            }
        }
    }
}
 

根据你的具体需求,选择适合的检测方法。如果你的图片在canvas上,推荐使用第一种或第二种方法;如果你的图片是3d对象,推荐使用第三种方法。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

DAY22

08-02

OpenCV 图像处理 轮廓检测基本原理

08-02

Flink 数据类型 & TypeInformation信息

08-02

【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用

08-03

【鸿蒙实战开发】基于Navigation的路由管理

08-03

「硬核干货」品牌/媒体/营销/用户运营/IT系统专业英文汇编|徐礼昭

08-03

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论