`
modabobo
  • 浏览: 502463 次
文章分类
社区版块
存档分类
最新评论

Unity3D开发(七):NGUI之UICamera控制触摸,鼠标事件

 
阅读更多

先给论坛做个广告:点击打开链接


1.UICamera功能介绍

主要包括UI事件的监听,分发,覆盖范围为此Camera渲染的所有GameObject

事件源包括:鼠标,触摸,键盘,手柄。

事件包括:悬停,按下/抬起,选中/取消选中,点击,双击,拖拽,释放,文本输入,Tips显示,滚轮滑动,键盘输入。

2.UICamera实现流程

(1)属性

EventType:包括UIWorld,用于区分UICamera处理UI事件的对象是UI控件还是3D物体。

EventMask:可以过滤掉一些不需要接受UI事件的对象

EventSources:是指需要处理的事件源,比如iPhone可能只需要TouchPC平台可能还需要MouseKeyboard勾选

Thresholds:是指事件误差的范围,比如MouseClick是指鼠标的按下和抬起两个事件在UI上的偏移误差不能大于10pixels,当大于10pixels时,则认为不是点击事件!

AxesandKeys:是指方向键/摇杆,键盘绑定

(吐槽一下,对于Horizontal这种字符串的设置,如果不小心修改了,就没办法根据字符串找到对应的变量值了,建议改成枚举类型)

(2)监听和分发

Update()中,依次处理触摸/点击,文本输入,键盘/摇杆输入,Tip

其中最主要的就是触摸/点击事件的处理了,下面以触摸事件处理ProcessTouches()来分析。

NGUI封装了一个MouseOrTouch类封装Unity3DTouch类,主要包括位置,偏移,碰撞到的GameObject,事件标志。

UICamera中,缓存着以idKey,以MouseOrTouch对象为Value的字典对象mTouches,在ProcessTouches()中,通过Unity3D提供的Input.GetTouch()获取到Touch对象,如果是新的触摸点,则缓存在mTouches中,获取当前触摸点(MouseOrTouch对象),对其属性进行计算和设置。

对于每个触摸对象,都需要通过ProcessTouch(boolpressed,boolunpressed)处理,在这个方法中,主要用于对不同事件的区分和分发。

pressedunpressed表示当前触摸对象的当前状态,这里拿常用的点击事件举例,根据对点击事件的理解,我们应该知道此时触摸对象的当前状态分别为pressed=falseunpressed=true,并且此MouseOrTouch对象的touchBegan=falsepressed!=null

我们先看pressed=false的处理,这里需要主要的是对当前MouseOrTouch“从开始到现在”偏移量,当这个偏移量大于设置的MouseClick/TouchTap时,则取消此次Click事件。

再看unpressed=true的处理,首先应该确定此MouseOrTouch对象的pressed对象不为null,然后判断当前MouseOrTouch对象的拖拽对象是否等于当前对象,并且当前MouseOrTouch对象的click事件没有在上一步取消掉,并且MouseOrTouch对象的整体偏移量小于设置的Drag值(Thresholds中设置的MouseDrag/TouchDrag),在这些条件下,则满足“点击事件”,发送给MouseOrTouch对象的pressed对象OnClick消息,此MouseOrTouch对象处理完成!

(上述分析只是对于“点击事件”,如果要分析其它事件的具体逻辑,可以先根据事件类型确定ProcessTouch()方法的两个参数,然后根据参数在不同分支中分析代码)

3.区分多种点击事件

NGUI中提供了一种对于点击事件的处理,假如我们希望添加自己的点击事件处理,并且区别于NGUI的触摸事件,举例来说,假设我们的场景中的地图和HUDUI都是可以点击的,这里用一个UIButton3DCube模拟场景

对于一次点击事件,如果点击到UI控件上,我们将取消对于自定义事件的逻辑处理;如果没有点击到UI控件上,我们需要判断是否点击到“自定义区域”,假如点击到了,则执行自定义事件的逻辑处理。

这时我们可以通过UICamera

staticpublicboolRaycast(Vector3inPos,outRaycastHithit)

的返回值来确定这次点击事件是否触发了UI事件,如果触发了,则取消对自定义事件的逻辑处理。

(这个方法将场景中所有的UICamera依次遍历判断)

PS:这样做虽然相当于做了两次UI碰撞检测,但是避免了判断自定义事件与UI事件调用Update()的顺序问题)

分享到:
评论

相关推荐

    Unity3d最好的UI插件 NGUI3.0.2 最新版

    Unity开发的朋友,做UI的时候,选择NGUI比GUI更好用。最新版本的unity3d扩展插件:NGUI+Next-Gen+UI3.0.2.unitypackage 解压后运行Unity3D,在菜单Assets中选择自定义导入。 如果无法导入时,请检查导入目录中是否...

    Unity3D教程:利用NGUI制作超链接2

    Unity3D教程:利用NGUI制作超链接 Posted on 2013年02月22日 by U3d / Unity3D 基础教程/被围观 469 次 Unit

    Unity插件 NGUI各种版本合集

    NGUI Next-Gen UI 3.6.0.unitypackage NGUI Next-Gen UI 3.12.1(u5.6.5).unitypackage NGUI Next-Gen UI 2019.3.0.unitypackage NGUI Next-Gen UI v2018.3.0.unitypackage NGUI Next-Gen UI v2018.3.0c(u2018.3.0)....

    Unity3D NGUI Next-Gen UI 2.2.2

    Unity3D NGUI Next-Gen UI 2.2.2

    Unity3D插件:NGUI对比uniSWF2

    不过不得不说的是,NGUI有个好处是消耗的DrawCalls比较少,基本就一个,所以如果做手机应用的话,NGUI肯定是比较不错的。之所看NGUI,因为自己本身也

    Unity3D插件NGUI:制作Atlas与Font与运用

    Unity3D插件NGUI中运用Atlas Front和 制作Atlas和Font的步骤 并在unity3d使用

    unity3D ui开发插件 NGUI 3.10.2

    最新版NGUI3.10.2是严格遵循KISS原则并用C#编写的Unity(适用于专业版和免费版)插件,提供强大的UI系统和事件通知框架。其代码简洁,多数类少于200行代码。这意味着程序员可以很容易地扩展NGUI的功能或调节已有功能...

    unity3d UI 插件 NGUI

    unity3d 最火UI插件,NGUI,unity3d 最火UI插件,NGUI,unity3d 最火UI插件,NGUI,unity3d 最火UI插件,NGUI,unity3d 最火UI插件,NGUI

    Unity3D 2018 最新最全800个脚本教程

    一部分的目录东西太多了 行为控制脚本 鼠标的路线 Unity3D教程:游戏玩家服务器的制作 Unity3D教程:实例化 JS脚本控制逐渐淡出的欢迎界面 Unity3D教程:界面插件NGUI的使用 (2) 脚本控制物体的变换 脚本的运行顺序...

    最新版本的NGUI插件NGUI Next-Gen UI 覆盖unity多个版本

    NGUI Next-Gen UI是一款功能强大、灵活性高的UI插件,是当前最新版本的NGUI插件。它可以覆盖Unity的多个版本,包括Unity 5、Unity 2017和Unity 2018等。与其他UI插件相比,NGUI Next-Gen UI具有高效的性能和优秀的...

    Unity3d之NGUI简单计算器入门

    Unity3d之NGUI简单计算器入门,可以作为简单的入门学习,具体步骤参照我博客http://blog.csdn.net/wyz365889/article/details/9326473

    unity3D GUI插件(NGUI+iGUI+EZGUI)

    unity3D GUI插件(NGUI+iGUI+EZGUI)

    Unity3D NGUI3.12.1适用于unity3d2018的 NGUI插件

    适用于unity3d2018的 NGUI插件 在Unity 项目中,Project视图下ASSETS文件夹上,右键 【Import Package】-->【Custom Package】,选择刚刚下好的 NGUI3.12.1插件包。然后,全部导入。

    NGUI Next-Gen UI 3.9.1

    - NEW: Added UICamera.first referencing the active NGUI event system. - FIX: Alpha should now work as expected with Linear lighting. - FIX: UICamera.isOverUI should now work properly for all types of ...

    Unity 3D NGUI实战教程.pdf(大小84.4M)

    Unity 3D NGUI实战教程.pdf(大小84.4M),有出现10几M pdf 那才36页,原书有233页

    Unity3D 插件NGUI Next Gen UI 3.9.9and3.6.8 两个版本

    Unity3D 插件NGUI Next Gen UI 3.9.9and3.6.8 两个版本了

    Unity编辑器:基于NGUI的引用检测工具

    Unity编辑器:基于NGUI的引用检测工具

    NGUI3.5.9 Unity3d UI开发神器

    unity3d 开发必备神器, NGUI最新版本3.5.9 不需要点击Play按钮就能查看结果。  在场景视图中看到的就是在游戏视图中得到的(所见即所得)。  基于组件的、模块化的特性:要让你的界面控件做什么,只需为其...

    Unity3D_NGUI实战教程

    Unity3D_NGUI实战教程

    Unity3D NGUI Next Gen UI 最新版插件

    NGUI是严格遵循KISS原则并用C#编写的Unity(适用于专业版和免费版)插件,提供强大的UI系统和事件通知框架。其代码简洁,多数类少于200行代码。这意味着程序员可以很容易地扩展NGUI的功能或调节已有功能。对所有其他...

Global site tag (gtag.js) - Google Analytics