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

发表于2018-08-20
评论0 3.7k浏览
在给大家介绍射线检测中那个物体之间是否存在其他物体阻挡行为之前,需要大家先了解射线检测的原理,在通过以下两种方式让大家去检测两个物体之间是否有其他物体阻挡。

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个物体之间进行射线检测,并返回被阻挡的物体。
来自:https://blog.csdn.net/BuladeMian/article/details/80508782

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论