网站建设推广重要性,河北高端网站建设,wordpress换数据库,网站建设?首选百川互动目录 主要内容
拓展#xff1a; 主要内容
Raycast函数有很多重载(函数的重载根据函数的参数来决定)
这里只涉及这个重载,其余重载可以很方便得在Visual Studio中看源码获取#xff1b; public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit…目录 主要内容
拓展 主要内容
Raycast函数有很多重载(函数的重载根据函数的参数来决定)
这里只涉及这个重载,其余重载可以很方便得在Visual Studio中看源码获取 public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask){return defaultPhysicsScene.Raycast(origin, direction, out hitInfo, maxDistance, layerMask);}
关于第四个参数:int layerMask;
一开始时我认为这里的int 就是在Inspector里图层的索引
如下图被红色圈起来的就是图层的索引 我实现的这个射线检测无论怎样都无法检测出Player图层 Physics.Raycast(CharacterCamera.transform.position, transform.TransformDirection(Vector3.forward),out hitInfo, maxShootDistance, 6); 其实这里第四个参数其实对应的是2^(索引);
如果要获得Player图层的话第四个参数应该填上2的6次方也就是64才对
使用LayerMask.GetMask(Player)代替64也是同样的效果因为它的返回值就是64
Physics.Raycast(CharacterCamera.transform.position, transform.TransformDirection(Vector3.forward),out hitInfo, maxShootDistance, LayerMask.GetMask(Player)); 拓展
如果要检测多个图层的话直接用LayerMask.GetMask(图层名1“图层名2”“图层名3”....);
返回值是各个图层对应的LayerMask.GetMask的返回值相加得到的和; LayerMask.GetMask(图层名1“图层名2”“图层名3”) 等价于 LayerMask.GetMask(图层名1)LayerMask.GetMask(“图层名2”)LayerMask.GetMask(“图层名3”); 因为unity的图层使用int32来表示的也就是2的32次方公有32个图层(0~31),如图 图层相加的值能被唯一分解
假设图层和是65的话那么能确定图层分别是图层0和图层6,就是(2^02^6); 另外可以用LayerMask.NameToLayer(图层名)获取图层的索引;
例如
LayerMask.NameToLayer(Player) 等于 6; 所以上面的代码可以替换
1.位运算右移 LayerMask.GetMask(Player) 等价于 1LayerMask.NameToLayer(Player) 2.右移位运算和按位或图层都有32位每个图层都只有一位为1其余都为0在这个条件下按位或运算等于加法 LayerMask.GetMask(图层名1“图层名2”) 等价于 1LayerMask.NameToLayer(图层1)|1LayerMask.NameToLayer(图层2)