unity为什么unity射线碰撞检测2d投射到UI上面会返回空

这次用案例讲解unity射线碰撞检测2d碰撞我们要模仿,一个小物体快速碰撞一个大物体时的碰撞效果新建一个3D工程,场景中新建一个cube位置是(00,500)给cube添加tag为cube。再新建一個Sphere位置是(0,00);给Sphere添加刚体组件,取消重力再添加脚本,名为SphereSpeed并编辑:

这个代码很简单,大家应该能看懂我就不解释了。
这裏有一个小技巧去截这种图就是先按下暂停按钮,然后按run游戏就会在第一帧后暂停,然后点击暂停旁边的下一帧就可以一帧一帧执荇了。
但是大家有没有发现这个时候,并没有打印出Log这个好像是Unity自身的问题,但假如我们有正好需要这样的实现又该怎么做呢?
这裏有两个比较常用的方法1:增加球体的碰撞体体积。2:使用unity射线碰撞检测2d检测碰撞这里我们就采用第二种。修改脚本:

现在运行游戏就会有信息打印了。

但是假如现在cube前面有一个物体的话会怎么样呢
unity射线碰撞检测2d是当碰撞到一个物体时就会消失,所以他会打印第一個碰到的物体的名字那该怎么做呢?
既然这样我们就让他只碰撞某一个物体就好了。Unity中使用层级关系来来解决这个问题给cube添加一个Layer洺字就叫做cube(随便取也行)。
我们规定unity射线碰撞检测2d只需要碰撞这一层的东西就行了现在修改代码:

然后再外面选择上刚刚给cube添加的层

現在运行游戏,按下键盘就能看见只碰撞到了cube。

项目工程: 密码:ditb

参考资料

 

随机推荐