UNITY2d检测方法OverlapCircle与Raycast详解 | 航行学园

在2d游戏中,需要很多探测检测然后触发一些代码函数,其中最多用的是 碰撞体检测,但是除了碰撞体检测外还有很多方法各有千秋,这里介绍两种自己做游戏用的比较多的方法

一 Physics2D.Raycast射线检测

很好理解,射线检测就是自定义一个初始点和方向发射一条射线,射线如果碰到自己定的LayerMask(图层),就会返回一个RaycastHit2D对象,简单点就是如果击中,返回击中的碰撞体的一个RaycastHit2D对象,这个对象有很多方法可以用,如果没击中,就会返回false

最常用的第四种重载,第一个origin指发射点,可以写成某个物体的position,第二个direction指方向,第三个指探测距离,第四个是探测指定图层(一般自己设定LayerMask对象,然后在unity中设置,如果想是private也能在Inspecter中显示,就在前面加[SerializeField])

若击中,返回的对象方法有如下

如果想让自己的探测射线一直处于可见状态,利于编程,可以使用如下的重载函数

   /*这里为了画线方便,重载函数Raycast,形参解释
   Vector2 offset画线起点(在人物锚点偏移的量)
   Vector2 rayDiraction画线方向
    float length画线的长度
    LayerMask layer画出去的线和哪一层画布检测,这里我们就用自己要攀爬的画布
    这个函数重载前两行将人物的现在移动到的坐标传给画线函数古,成为pos + offset,也就是说我们的重载函数的offset意义就是画线起点在人物锚点偏移的量
    后面三行将画线颜色改变,有利于后期改动,如果监测到碰撞红色,没有绿色
  */
    RaycastHit2D Raycast(Vector2 offset, Vector2 rayDiraction, float length, LayerMask layer)
    {
        Vector2 pos = transform.position;
        RaycastHit2D hit = Physics2D.Raycast(pos + offset, rayDiraction, length, layer);
        Color color = hit ? Color.red : Color.green;
        Debug.DrawRay(pos + offset, rayDiraction * length, color, 0.2f);
        return hit;
    }

二 Physics2D.OverlapCircle

检测某个碰撞体是不是在某个圆形区域内,返回碰撞体,如果有多个,返回z轴最小的碰撞体,若没有返回false

一般三个参数,第一个原点,第二个半径,第三个图层

如果想在编程过程中看到检测的区域,使用 OnDrawGizmosSelected方法

 private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.grey;

        Gizmos.DrawWireSphere(transform.position , CheckrotateDistance);
    }

第一行设置颜色,第二行设置画,第一个参数是圆心,和自己使用的OverlapCircle的point一致,第二个半价和自己使用的OverlapCircle的radius一致
如图

(0)

相关推荐