首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之将UI的点击事件渗透下去(九十)
2016
09-05

Unity3D研究院之将UI的点击事件渗透下去(九十)

处理UI还有3D模型的点击推荐使用UGUI的这套事件系统,因为使用起来比较简洁,不需要自己用代码来发送射线,并且可以很好的处理同时点击UI和3D模型上。

1.给3D摄像机挂一个Physics Raycaster组件。Event Mask过滤掉UI.

2.用unity自带的Event Trigger 或者   http://www.xuanyusong.com/archives/3325 就可以对UI 或者 3D模型进行点击事件的监听了

3.OK 当UI与模型相互叠加的时候,优先响应UI,并且响应最前面的UI.

4.如下图所示,前面是UI后面是3D模型,被挡住的模型或者UI是不会被响应的。

Unity3D研究院之将UI的点击事件渗透下去(九十) - 雨松MOMO程序研究院 - 1

 

假如想把点击的事件透下去,让所有的UI或者模型都能正确的响应事件,怎么办呢?

代码: 把这段脚本挂在最前面的UI上。 然后当接收到点击事件后,调用PassEvent把当前的事件透下去。由于UGUI的事件有很多种,比如点击 、抬起、拖动、落下、第二个参数就是ExecuteEvents.Handler 把对应的Handler传进去就行了。

这样UI下面那些对应接收点击事件的地方都可以响应到了。。如下图所示,我点击在前面的UI后面的消息也能响应到了。

Unity3D研究院之将UI的点击事件渗透下去(九十) - 雨松MOMO程序研究院 - 2

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 我有一个小疑问,希望雨松大神解惑:在MonoBehaviour 里,有一组OnMouseEnter, OnMouseDown, OnMouseUp 方法,将写有这些方法的脚本挂在3d空间里的Mesh上,也可以检测到S是否被鼠标点击或移入的事件。如果如大神所说,建议3d的game object 也使用 UGUI的这套事件系统来做事件监听, 那么这套系统相比之前我提到的Monobehaviour里的内置方法,有什么优势?望大神指点。

  2. 这个会造成内存泄漏,能帮看看吗?头疼死了。IEnumerator GoDownLoadStart() { //Resources.UnloadUnusedAssets(); Debug.Log (“开始下载器2″+url); WWW www = new WWW (url); while (!www.isDone) { Debug.Log (string.Format(“下载中:{0}”,www.progress)); yield return null; } if (www.error != null) { Debug.Log (“下载错误:”+www.error); } else { File.WriteAllBytes(path,www.bytes); Debug.Log (“下载完成,大小:” + http://www.bytesDownloaded+ “字节”); } Debug.Log (“清除镜像”); http://www.assetBundle.Unload (false); Debug.Log (“清除垃圾”); http://www.Dispose (); Debug.Log (“清除未引用”); www = null; Debug.Log (“www=null”); Resources.UnloadUnusedAssets(); Debug.Log (“清除GC”); GC.Collect (); Destroy (this.gameObject); }

  3. 雨凇大大,我用ugui构建完ui系统后,当用鼠标点击其中一个button后,在按下键盘的方向键,就会对ui中的button进行选择,如何解决这个bug啊?