Unity射线检测常见的几种应用
一:检测单个物体
//初始化射线:中心+方向
Ray rayNoraml = new Ray(Vector3.zero,Vector3.up*10);
//绘制射线
Debug.DrawRay(transform.position,transform.forward,Color.red,10);
if (Input.GetMouseButtonDown(0))
{
//射线检测:从屏幕中心发出一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//15+种重载:射线,碰撞 ,射程,开启的层级
if (Physics.Raycast(ray,out hit,1000,1 << LayerMask.NameToLayer("Enemy")))
{
Debug.Log(hit.collider.name);
Debug.Log(hit.point);
if (hit.collider.tag == "Enemy")
{
}
}
}
二:检测多个物体
只要存在Collider,满足方法参数对应的条件,都可以使用射线检测碰撞。
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(ray.origin, ray.direction, Color.red);
RaycastHit[] hit = Physics.RaycastAll(ray, Mathf.Infinity,1 << LayerMask.NameToLayer("Enemy"));
if (hit.Length > 0)
{
for (int i = 0; i < hit.Length; i++)
{
Debug.Log("检测到物体" + hit[i].collider.name);
}
}
}
三:球形检测
if (Input.GetMouseButtonDown(0)){
int radius = 10;
Collider[] cols = Physics.OverlapSphere(this.transform.position, radius, LayerMask.NameToLayer("Enemy"));
if(cols.Length >0)
{
for (int i = 0; i < cols.Length; i++)
{
Debug.Log("检测到物体" + cols[i].name);
}
}
}
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(this.transform.position, 10);
}