[Unity][射线检测]检测两个物体之间是否有其他物体阻挡

1.用Physics.Raycast进行射线检测

物体必须有Collider碰撞组件。

//定义一条射线,起点为GO1的物体坐标,终点为GO2的物体坐标
Ray ray = new Ray(GO1.transform.position, GO2.transform.position - GO1.transform.position);

 //定义一个光线投射碰撞 
 RaycastHit hit; 

 //发射射线长度为100 
 Physics.Raycast(ray, out hit, 100); 

        if (hit.transform != null)
        {
            Debug.Log("blocked:" + hit.transform.name);
        }

//在Scene中生成这条射线,起点为射线的起点,终点为射线与物体的碰撞点
 Debug.DrawLine(GO1.transform.position,GO2.transforme.position);

如果射线是以GO2的物体的坐标,终点为GO1的物体的坐标,就得写成以下的方式。

Ray ray = new Ray(GO2.transform.position,GO1.transform.position - GO2.transform.position);


2.用Physics.Linecast进行射线检测


int layA = LayerMask.NameToLayer("Character");
        LayerMask bricksLayer = 1 << LayerMask.NameToLayer("Character");//LayerMask bricksLayer = 1 << layA;
        RaycastHit hit;
        if (Physics.Linecast(GO1.transform.position, GO2.transform.position, out hit, (1 << layA)))
        {
            Debug.Log("blocked:"+hit.transform.name);
        }
        Debug.DrawLine(transform.parent.gameObject.transform.position, _player.transform.position);


下面这句话的意思是 射线遮罩,只对物体 的 Layer 是“Character”的物体,进行检测。

Physics.Linecast(GO1.transform.position, GO2.transform.position, out hit, (1 << layA)


总结:以上2种方法都能够 对2个物体之间 进行射线检测,并返回 被阻挡的物体。


参考文章:

1.

How to check if the collision line between two objects is free?

2.

Physics.Linecast

3.

Unity检测目标是不是在攻击范围内

4.

unity射线检测忽略某层的方法

5.







unity射线检测忽略某层的方法

猜你喜欢

转载自blog.csdn.net/bulademian/article/details/80508782