幻蓝博客 – 孤月蓝风

追寻互联网科技、Unity开发、AR/VR开发、游戏开发、Web前后端开发等技术。

Unity中的Raycast射线检测函数解析


在使用Unity引擎重新制作魔塔的时候,为了提高游戏性能,启用了新的方法。

其中用到了Raycast射线检测,而在最开始,检测出来总是有问题,有墙的地方检测正常,但是没墙的地方也会检测到碰撞,经过仔细查看,发现是之前太粗心,没有注意到Raycast的参数,于是记下此笔记。

Physics2D.Raycast

参数

origin 射线发射的原点
direction 射线发射的方向
distance 射线发射的距离
layerMask Layer层过滤
minDepth 射线检测Z坐标的最小值
maxDepth 射线检测Z坐标的最大值

之前由于粗心,一直以为参数和DrawLine的差不多,莫名其妙的折腾很长时间。

DrawLine的参数,第一个是起点,第二个是终点。而Raycast,第一个是起点,第二个是方向,第三个是长度。值得注意的是,方向是第二个参数的点的位置相对于起点的方向。当搞清楚这三个参数后,就简单的多了。

public bool checkTile(int x,int y)
{
    Vector2 position = new Vector2(x, y);
    RaycastHit2D hit = Physics2D.Raycast(position, Vector2.zero);
    Debug.DrawLine(new Vector3(x - 0.2f, y, 0), new Vector3(x + 0.2f, y, 0),Color.red);
    if (hit.collider != null)
    {
        print(hit.collider.gameObject.name);
        print("no");
        return false;
    }
    else
    {
        print("ok");
        return true;
    }
}