前沿:在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); } } }
这个时候我们点击重叠的物体的重叠部分,会得到下面的结果: