Unity Physics.XXXcast 深水

在使用Unity的RayCast 或者BoxCast SphereCast等函数的时候 他里面传入的layerMask参数不是简单的使用LayerMask.NameToLayer转化后直接传入的,而是还需要经过位运算。这和一些其他使用layer的情况不一样
Layer的文档
在官文里面有明确说明,但是在API文档里面没有说明,所以使用layer的人可能会踩坑
在这里插入图片描述

public static int GetRealLayer(string layerName)
    {
        int bitCount = LayerMask.NameToLayer(layerName);
        int realLayer = 1 << bitCount;//在二进制里面将1左移几位 表示1乘以2的几次方
        return realLayer;
    }

在上述函数里面进行位移操作

  • 如果XXCast里面没有传入layer参数,默认所有层都会接受检测
  • 如果传入的是GetRealLayer(“Default”),则在Default层进行检测
  • 如果传入的是~GetRealLayer(“Default”),则在除了Default层的其他层进行检测

Collider.RayCast 也需要注意,如果这个射线是从 的Collider内部发射出的 则即使与这个collider相交
也会造成不会检测到

发布了84 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43149049/article/details/103279700
今日推荐