【Unity】射线检测

射线检测,发射一条射线检测射线是否碰撞到物体,同时可以获取物体的相关属性

射线可以是有长度的,也可以是不限长度的

 

射线检测的条件,物体必须有碰撞器

 

实现射线检测的简单代码,将脚本挂在物体上,当物体前方出现其它物体时,则会检测到物体

检测是否碰撞

private void Update()
{
    Ray ray = new Ray(transform.position, transform.forward);
    bool isCollider = Physics.Raycast(ray);

    Debug.Log(isCollider);
}

指定射线长度

bool isCollider = Physics.Raycast(ray,1);

获取碰撞物体的相关信息RaycastHit

private void Update()
{
    Ray ray = new Ray(transform.position, transform.forward);

    bool isCollider = Physics.Raycast(ray, out RaycastHit hit);

    Debug.Log(isCollider);
    //碰撞物体
    Debug.Log(hit.collider.gameObject);
    //碰撞点
    Debug.Log(hit.point);
}

指定碰撞物体的层级

private void Update()
{
    Ray ray = new Ray(transform.position, transform.forward);

    bool isCollider = Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity,LayerMask.GetMask("Layer1","Layer2"));

    Debug.Log(isCollider);

    if (isCollider)
    {
        //碰撞物体
        Debug.Log(hit.collider.gameObject);
        //碰撞点
        Debug.Log(hit.point);
    }
}

 

Physics.Raycast只是获取碰撞到的第一个物体,Physics.RaycastAll可以获取碰撞到的所有物体

 

通过Camera的ScreenPointToRay绘制射线

//屏幕坐标转为射线,检测物体碰撞,判断鼠标点击到哪个物体上
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//绘制射线
Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100);

 

 

相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页