Unity中关于射线的运用——第01节 线段射线

  前沿:在Unity的实际开发过程中,我们将有可能会用到射线这一技术,那么这篇章节,我们将总结一下Unity实际开发过程中会遇到的几种射线,以及如何运用。

一、射线的种类以及运用的环境:

    1.线段。用途:可以拾取包裹。

    2.球形。用途:可以寻找附近的怪物,检测碰撞。

 

二、如何发射这两种射线:

    1.线段射线:

      如下图所示,当我们的鼠标右键点击球形并且抬起时,将会打印出我们点击了哪个球形。

    

    2.如何编写这段代码:

void Update
{ 
     if (Input.GetMouseButtonUp(1))
        {
            Ray ray = m_RoleCamera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            //此方法只能检测到一个碰撞信息
            //1.射线 射线信息 范围 层  
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << LayerMask.NameToLayer("Item")))
            {
                Debug.Log("找到了" + hit.collider.gameObject.name);
            }
           
        }
}

    

    3.运行结果如下:

 

    4.此时若是我们的球形的摆放位置如下图:

    也就是,Sphere00和Sphere01会有相互重合的部分。而此时我们运行代码就会发现,不管我们如何点击,时候只能获取到一个球形的碰撞信息。这个时候我们就需要修改一下脚本了。

 

    5.修改脚本,获取重叠的对象的碰撞信息:

if (Input.GetMouseButtonUp(1))
        {
            Ray ray = m_RoleCamera.ScreenPointToRay(Input.mousePosition);//此方法能检测到多个碰撞信息
            RaycastHit[] hitAll = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Item"));
            if (hitAll.Length > 0)
            {
                for (int i = 0; i < hitAll.Length; ++i)
                {
                    Debug.Log("找到了" + hitAll[i].collider.gameObject.name);
                }
            }
        }

    这个时候我们点击重叠的物体的重叠部分,会得到下面的结果:

 

posted @ 2018-03-19 16:23  Dean二十七  阅读(514)  评论(0编辑  收藏  举报