【学习目标】 能够通过光线检测进行碰撞判断 能够通过玩家点击屏幕来检测选中的物体【光线检测】
【3D世界的光线】
由线段一端无限延伸形成的直线,由起点和方向两个关键属性组成
在代码中创建一个射线对象
在代码中创建一个射线对象
注意:这里画的线段是用来看射线的方向的。真实的光线是从起点到方向的无限延伸【屏幕发出的光线】
根据玩家在屏幕上的点击位置发射光线
在代码中创建屏幕光线
在代码中创建屏幕光线
【雷总结】
单独的ray对我们没有意义,必须和其他模块配合使用
【光线碰撞检测】
Unity 提供的物理课程
物理
提供射线检测相关的方法
以上是Physics类提供的射线检测方法。我们选择几种最常用的方法来解释。学完之后材质材料,你就基本学会了所有的方法【例子】
在游戏界面点击鼠标unity射线检测检测不到物体,点击Panel时,射线检测成功游戏运营,并打印其名称
在游戏界面点击鼠标,当点击红色方块时,射线检测会穿透方块和平面,所以会打印2个名字信息(前提是maxDistance足够大
通过射线检测进行碰撞判断
能够通过玩家点击屏幕来检测选定的对象
【关键参数layerMask】
此参数允许射线检测仅检测指定级别的对象
将场景中的 Cube 级别更改为 Cube(无需在 Add Layer 上创建新的自定义层)
给刚才的代码加个参数
这时候你会发现只会打印Cube的名字。
面板没有被光线检测到unity射线检测检测不到物体,这是因为我们填充了图层蒙版参数
↓↓↓↓
↓↓↓↓
LayerMask.NameToLayer(图层名称)
是Unity提供的一种根据层名将层名转换为层号的方法
↓↓↓↓
↓↓↓↓
层数是多少?
Unity中最多可以有32层,编号从0到31
↓↓↓↓
↓↓↓↓
我们通过LayerMask.NameToLayer(层名)得到一个0到31的层号,然后左移1到“层号”位。也就是说从0到31的每一层都对应一个唯一的二进制数,这个数是2的n次方。
你只需要记住
是固定拼写
通过它来确定层
↓↓↓↓
↓↓↓↓
如果要检测多层怎么写?
由于二进制的特性,如果要检测多个隔间,只需要对不同的层进行位或操作即可。
【总结】
更多干货关注唐老师