今天来说说我在做项目中遇到的另一个问题,就是NGUI穿透的问题。(今天正好有好基友问我这个问题- -自己又进一步小研究了下。。。) NGUI穿透问题,其实就是场景中的点击事件与NGUI的Button点击事件相冲突的问题。这个问题网上已经有解决方法了,我也只是把自己学的写出来而已。
首先新建个场景。。。让场景中Cube与Button重合。。。
之后我写了一个脚本,当鼠标按下的时候,让Cube随鼠标进行移动。这个不难,我在最后贴出这部分的代码。
现在我写一个方法,触发Button点击事件。
准备工作完成了,那么进入正题。
当我运行的时候,我点击Button按钮,但同时的,后面的Cube也随着我的鼠标移动了。现在我想要的效果是,点击按钮的时候,不会触发后面的Cube移动。
我来说两种方法,其实都是NGUI自带的方法。
第一种:UIcamera.hoveredObject
这个方法的意思就是,它会检测到由UICamera发出的射线所碰触的最后一个UI。(当然别忘了加collider。。。。),你可以在Update里写个
这个更直观。
再说我们的方法,如果我想让点击Button的时候不让Cube移动,我可以在Cube移动的方法里加上一个限制条件,如下:
我想说明的一点是,我使用的NGUI版本是3.7.2,有时候在我运行的时候,我的UI Root的红色框会变得无限大。。。这个问题愁得我都睡不好觉了。。自适应老出问题。。。我也求大神帮我解答。。
顺便附上NGUI中关于hoveredObject的部分
第二种:UIcamera.isOverUI
这个方法的意思是,你的鼠标是否停留在了UI上。他是一个bool值。
现在我们将之前用hoveredObject的判定改为
我们在运行,发现当鼠标停留在了Button并点击时,发现Cube并不会移动了。当我们把鼠标移出Button的范围时(事实上是Button上collider的范围),就可以进行Cube的移动了。。完美解决穿透问题。
对于这两种方法,我更推荐后一种,后一种更好理解。但是这个方法貌似在3.6.8之前的NGUI版本是没有的,但是在3.7.2中是有的。
(P.S 现在蛮牛上都在讲UGUI的东西。。。但我接触Unity的时候,我先学的是UGUI的东西。。。所以跟大多数人比起来,,我对UGUI掌握的更好。。,写这个是不是显得有点过时了哈哈)
再说说物体随鼠标移动问题。这其实就是一个世界坐标系与屏幕坐标系的转换问题,理清了就特别容易了。我直接上代码了,应该不难理解。
附上完整脚本。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。