【Unity3D】Raycast使用

来源:互联网 发布:微谱数据库怎么检索 编辑:程序博客网 时间:2024/06/06 13:24
1.鼠标点击控制移动
1)获得点击坐标,
2)根据坐标设置朝向
3)沿着朝向向前移动
4)当坐标与点击坐标距离小于规定值时停止移动
   void Update () {
      //点击瞬间改变朝向     
     
if(Input.GetMouseButtonDown(0)&&UICamera.hoveredObject == null){
            Ray ray  Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if(Physics.Raycast(ray,out hitInfo)){
                if(hitInfo.collider.tag == tags.ground){
                    showClickEffect(hitInfo.point);
                    isMoving true;
                    changeFaceTo(hitInfo.
position);
                }
            }
        }
        if(Input.GetMouseButtonUp(0)){
            isMoving false;
        }
       //实时改变朝向
       
if(isMoving){
            Ray ray  Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if(Physics.Raycast(ray,out hitInfo)){
                if(hitInfo.collider.tag == tags.ground){
                    changeFaceTo(hitInfo.point);
                }
            }
        }
    }

2.NGUI击穿判断
与Camera不同,UICamera可以直接检测鼠标点击是否在NGUI控件上,不需要自己构造ray

if (!UICamera.Raycast (Input.mousePositionouthitInfo)){

}

3.任意碰撞检测
常规方法,创建自定义Ray,通过Ray是否与其他物体碰撞进行碰撞检测
Raycast(射线源头坐标,射线方向,碰撞信息,射线长度);
【注意】
1)直接以transform.position为射线源头坐标,可能会因为模型中心在模型脚底下方,使得无法触发碰撞,要检查模型中心坐标
2)射线碰撞检测不管被碰撞物体的collider的isTrigger是否勾选都能检测到

    if(Physics.Raycast(rayOriginal.position,dir,out hitInfo,0.4f)){
        if(hitInfo.collider.name == "Back Wall"){
            Dead();
        }
    }

0 0
原创粉丝点击