常见需求,点击ui的时候,不需要3d物体也作出相关响应操作

还有这个需求,3D物体有响应,2d不响应

拿一个写好的脚本来分析: MonoBehavior默认是有一个OnMouseDown()的方法

这个测试代码,就是修改颜色来着

运行游戏,点击3d物体,就可以穿透,直接变色了

然后,解析另一个写好的脚本,是给2d图片用的,继承的类和内置监听,是这些:

运行,点击,可以看到,图片点击,也是变色了,但俩都变色了

日常的一个需求,就是点2d图片的时候,3d物体应该不响应 来处理一下,先放一个物理组件到相机上

可以看到,canvas画布,是有继承这个ugui相关的射线检测

3d物体的这个脚本,可以remove移除了

勾选使用这个就好

重新运行游戏,可以看到,点击2d物体的碰撞检测,是正常了,不会也触发3d物体

可以看到,默认是勾选上这个,指的是,忽略没有关联Graphics的元素 需要注意的是,只有ugui的元素,是继承和关联Graphics基类的

换一下函数的调用

声明一个index,用三元运算符做处理

重新运行游戏,点ui,需求逻辑还是正常的,不会对3d物体产生影响

点后面3d物体,也是正常的

说明,这个接口用起来,还是比较方便的

103-解决UI和3D物体的同时响应问题

如果要实现,ui点击,和3d物体同时响应,承前启后,也是基于这个接口实现,这样在系统设计上,逻辑会比较连贯

加一个函数,其中调用的事件系统接口,是会收集所有点击到的物体,然后进行排序

补充点击的eventData数据,还有点击结果的数据,完成传参处理

继续完善逻辑,在拿到点击结果之后,遍历一下,触发一下点击事件和逻辑

然后,调用一下

之前写错地方了,那个触发全部的函数逻辑,应该放到ui逻辑里 剪切过来就好

也是调用一下就好

重新运行游戏,点击ui,3d物体也会变色了

注释掉

恢复成之前的亚子

104-解决UI和鼠标点击之间的响应问题

加了这个脚本

逻辑简单,响应鼠标左键点击,切换颜色

用图形射线做检测,先声明一下,然后实例化

写一个方法,判断是否点击中,包含ui

加到判断条件里,取false,不是ui的时候,才生效

运行,点击空白地方,也是只有3d物体变更了颜色,ui是没变化的

点ui也是单独变颜色

105-为什么要实现自己的圆形图片组件

一般单独小案例,都会创建一个独立的场景

如果要看上一个章节的内容,其实介个场景也是可以看得到的

生成圆形图片的,是介个场景

先弄一个image出来

简单设置一下尺寸

ctrl+d复制一份出来

拖曳,变成子物体

用icon1作为图片

在父物体加一个mask蒙版

这是一张圆形的纯色图,背景透明

把这个图,拖曳到父物体上

因为有蒙版,所以整个图形都变成圆形了

这就是unity自带的圆形实现,不过缺陷也比较多,其中一个就是锯齿很明显

还有一点,就是会提高unity的drawcall,可以看到,这里现在有5个 mask会极大增加drawcall

所以,需要自己写一个实现