射线碰撞检测是游戏中使用频率非常高的一种碰撞检测,常见应用场景有UI交互、人物移动等。
几乎可以说,所有通过鼠标点击实现的功能都依赖于射线碰撞检测。
//声明射线ray,ScreenPointToRay方法返回一条以主摄像机为起点,以方法参数为终点的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButtonDown(0))
{
//ray射线检测到碰撞,则Raycast方法返回true,同时将与射线发生碰撞的物体的属性值赋值给变量hit
if (Physics.Raycast(ray, out RaycastHit hit))
{
//打印碰撞物体的坐标
print(hit.point);
}
}
从上述代码可以看出,实现一个简单的射线碰撞检测,关键代码只有两行。
①生成一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
②检测碰撞,获取碰撞物体的信息
Physics.Raycast(ray, out RaycastHit hit)