Unity模拟鼠标点击

 

废话:

woc····累死我了,搞了一下午,颈椎都要折了。。。赶紧趁热打铁记录一下。


有点用的铺垫:

为什么要写这篇博客呢?模拟鼠标点击又是什么意思呢?

先来理解鼠标点击,比如,你在浏览某些网站的时候,突然看到一张劲爆的美女图,心血来潮你想要看的更仔细是不是?于是你移动鼠标点了点美女,进入了新的页面,顿时看到了高清无码的美女图。爽!这是你人为控制的鼠标点击。

但是有些时候,我不想人为控制鼠标去点击某些东西,我想要程序内部给个坐标点,然后在该点模拟鼠标点击。比如我输入了该美女在屏幕坐标系下的位置,我想要程序替我点击了,从而进入新的页面。这就是我理解的模拟鼠标点击。

恩。。。为什么又在打擦边球啊摔!


继续废话:

好了言归正传。在实现该功能之前,我翻阅了我都不知道多少篇博客,但是恕我直言,各位大大都讲的太不详细了啊!!今天本博就来手把手讲述那些年在工地搬砖的故事。


重要!乖乖坐好看:

先上Demo,打开你的Unity,然后创建一个Button,让这个Button至于Canvas的中间

相信聪明的你应该已经知道我们要干啥了吧。

没错我们就是要让程序点击这个Button,而不是我们鼠标去点击这个Button!!!

亲爱的你,来思考一下,如果是你,你会怎么写这个程序?

前提:很明显,我们要知道这个Button的位置坐标,虽然在Unity中都各种坐标系:屏幕坐标、世界坐标、视口坐标。但是它们的转换都是Unity封装好的函数,直接调用就行了,所以我就不赘述了。这里我们假设Button的坐标,我们已知的是屏幕坐标

思考:首先我们知道在Unity中并没有封装好的模拟鼠标点击的函数,但是在Windows下有封装好的模拟鼠标点击的函数,那就是SetCursorPos()&&mouse_event()。因此我们要想办法调用这两个函数。来看看这两个函数,要用它们必须导入user32.dll:

[DllImport("user32.dll")]
private static extern int SetCursorPos(int x,int y); //设置光标位置
[DllImport("user32.dll")]
private static extern bool GetCursorPos(ref int x,ref int y); //获取光标位置
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); //鼠标事件

到了这里,也许你开始激动了,我现在知道Button的屏幕坐标了,那我直接把这个坐标传给SetCursorPos不就行了吗?

非也非也。这里还牵扯到一个知识点,那就是Unity的屏幕坐标系和系统的桌面坐标系是不一样的,请看:

相信你可以看到,Unity的屏幕坐标系是从左下角开始,而桌面的屏幕坐标系是从左上角开始

也许你看到这里又开始激动了,我直接拿Screen.Height-Pos.y不就把Unity坐标转换到桌面坐标了吗?非也非也。也许Unity不是在全屏模式下呢?

<

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

keneyr

老爷~给小的赏点盘缠吧555~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值