| 
 
 有时候可能会遇到需要用UGUI或者FGUI上的UI元素与相机里面的元素进行碰撞的需求     这里的做法只限于进行单个物体和屏幕上的元素进行碰撞检测,不适用于多个3d对象与UI元素进行碰撞检测  
首先先在UI上面绑几个空节点,做好自适应之后,先求出3d物体坐标转换为屏幕坐标之后的Z轴的值     然后用此方法求出转换成3d节点里面的坐标位置,因为获得了z轴,因此从ui元素坐标点转换为3d世界坐标之后  
 Vector3 ReturnPos(Vector3 aim) {
        Vector3 vec = Vector3.zero;
        Vector3 pos = Camera.main.WorldToScreenPoint(你所需要转换的3d物体的坐标);
        Vector3 mousePos = new Vector3(aim.x, aim.y, pos.z);
        vec = Camera.main.ScreenToWorldPoint(mousePos);
        return vec;
    }
  
转换完之后,在对应的位置生成gameobject,手动添加一下boxCollide,并且设置size为2d场景里面的宽高即可,  
  private void DrawLine()
    {
        Vector3 boundPos1 = ReturnPos(pos1.position);
        Vector3 boundPos2 = ReturnPos(pos4.position);
        Debug.Log("posCheck = " + boundPos1 + "=====" + boundPos2);
        float height = Mathf.Abs(boundPos2.y - boundPos1.y);
        float width = Mathf.Abs(boundPos2.x - boundPos1.x);
        float posX = (boundPos2.x + boundPos1.x) / 2;
        float posY = (boundPos2.y + boundPos1.y) / 2;
        objScreenCollider.transform.position = new Vector3(posX, posY, boundPos1.z);
        objScreenCollider.GetComponent<BoxCollider>().size = new Vector3(width, height, 1);
    }
  
这个gameobject可以自己提前创建预制,并且添加上包围盒,然后在预制上绑定脚本,脚本时间里面可以挂在触碰之后的逻辑。  最终结果    
                
                
                
        
    
 
 |