unity中关于射线的有一个非常重要的函数类Physcics类,该类有Raycast和Linecast两种射线投射方式;第一种是以起点和射线方向为参数的投射,第二种是以起点和终点为参数的投射。既然是射线碰撞,那么被射物体必须有被碰撞组件(如BoxCollider等);下面是有关鼠标点击的射线碰撞检测(Raycast方式)(如:点物体选中,点地图行走)
Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);//屏幕坐标设为射线目标位置
RaycastHit h; //射线碰撞信息
if(Physics.Raycast(r,out h,100,1<<LayerMask.NameToLayer("layer1")|1<<LayerMask.NameToLayer("layer2")))
{
if(h.collider.CompareTag("Enemy"))//敌人
{
//如果碰撞的对象是Enemy。。。
}
if(h.collider.CompareTag ("Ground"))//地形
{
//如果碰撞的对象是Ground。。。
}
}
第一行:从摄像机向鼠标点击的点发出一条射线;因为鼠标输入坐标其实就是在屏幕上的坐标,故使用ScreenPointToRay(“鼠标输入坐标”)即(屏幕坐标转射线目标位置)