16个重载方法...emmmm
Ray ray = new Ray(transform.position+transform.forward,transform.forward);//发射点,发射方向
Debug.DrawRay(ray.origin,ray.direction*100,Color.yellow);//射线画线
bool isCollider = Physics.Raycast(ray);//射线无限长
bool isCollider = Physics.Raycast(ray,10);//射线长度
//==============================================================
RaycastHit hit;
bool isCollider = Physics.Raycast(ray,out hit);//射线,返回碰撞器
bool isCollider = Physics.Raycast(ray,Mathf.Infinity,LayerMask.GetMask("UI","第二层") );
//射线,与某层发生碰撞
bool isCollider = Physics.Raycast(ray,out hit,10,LayerMask.GetMask("Default"));
//射线,返回碰撞物,射线长度,与xx层碰撞
print(hit.collider);//获取碰撞物体名字
print(hit.point);//在世界空间的撞击点,射线击中了对撞机。
用法2:
RaycastHit hit;
if(Physics.Raycast(transform.position+Vector3.up*0.3f,transform.forward,out hit,4)){
if(hit.collider.tag =="Obstacle"){//检测墙体
if(hit.distance>3){//判断障碍物距离
Vector3 point = hit.point;//获得射线碰撞位置
point.y = hit.collider.transform.position.y+hit.collider.bounds.size.y+0.1f;//墙的位置,墙y的高度
matchTarget = point;
isvault = true;
}
}
}