unity 如何判断鼠标是否在哪个UI上(两种方法)
程序员文章站
2022-03-27 11:32:32
第一种可以得到ui,再根据名字判断是不是自己自己要点击的ui其中参数canvas拖入此ui的canvas /// /// 获取鼠标停留处ui...
第一种
可以得到ui,再根据名字判断是不是自己自己要点击的ui
其中参数canvas拖入此ui的canvas
/// <summary> /// 获取鼠标停留处ui /// </summary> /// <param name="canvas"></param> /// <returns></returns> public gameobject getoverui(gameobject canvas) { pointereventdata pointereventdata = new pointereventdata(eventsystem.current); pointereventdata.position = input.mouseposition; graphicraycaster gr = canvas.getcomponent<graphicraycaster>(); list<raycastresult> results = new list<raycastresult>(); gr.raycast(pointereventdata, results); if (results.count != 0) { return results[0].gameobject; } return null; }
第二种就简单了
rect 为要判断的那个ui的recttransform
bool isui = recttransformutility.rectanglecontainsscreenpoint(rect, input.mouseposition)
补充:unity中判断鼠标或者手指是否点击在ui上(ugui)
在unity场景中,有时ui和游戏角色都需要响应触摸事件,如果同时响应可能就会出现点击ui的时候影响到了游戏角色。所以我们需要对所点击到的东西做判断,这里使用ugui系统自带的方法和射线检测的方式,判断是否点击到ui上:
第一种方法,直接在update中判断:
void update() { //判断是否点击ui if (input.getmousebuttondown(0) || (input.touchcount > 0 && input.gettouch(0).phase == touchphase.began)) { //移动端 if (application.platform == runtimeplatform.android || application.platform == runtimeplatform.iphoneplayer) { int fingerid = input.gettouch(0).fingerid; if (eventsystem.current.ispointerovergameobject(fingerid)) { debug.log("点击到ui"); } } //其它平台 else { if (eventsystem.current.ispointerovergameobject()) { debug.log("点击到ui"); } } }
第二种方式:射线检测
using system.collections; using system.collections.generic; using unityengine; using unityengine.eventsystems; public class newbehaviourscript : monobehaviour { // update is called once per frame void update() { //移动端 if (application.platform == runtimeplatform.android || application.platform == runtimeplatform.iphoneplayer) { if (input.touchcount > 0 && input.gettouch(0).phase == touchphase.began) { if (ispointerovergameobject(input.gettouch(0).position)) { debug.log("点击到ui"); } } } //其它平台 else { if(input.getmousebuttondown(0)) { if (ispointerovergameobject(input.mouseposition)) { debug.log("点击到ui"); } } } } /// <summary> /// 检测是否点击ui /// </summary> /// <param name="mouseposition"></param> /// <returns></returns> private bool ispointerovergameobject(vector2 mouseposition) { //创建一个点击事件 pointereventdata eventdata = new pointereventdata(eventsystem.current); eventdata.position = mouseposition; list<raycastresult> raycastresults = new list<raycastresult>(); //向点击位置发射一条射线,检测是否点击ui eventsystem.current.raycastall(eventdata, raycastresults); if (raycastresults.count > 0) { return true; } else { return false; } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
上一篇: 用Python提取PDF表格的方法