Ngui 点透问题

问题详情:

        点击地面玩家行走,可是点击界面按钮的时候,事件触发不了,或者同时执行了玩家点地行走事件;当点击UIButton时,鼠标会透过button点到地面,人物会移动;点击UIbutton弹出背包弹窗,点击弹窗边缘,人物也会移动。这些都属于点透的情况。

解决方式:

1.在ngui事件代码中做一个判断

如:

viod OnClick()

{

     // 如果鼠标下面有NGUI物体就执行

     if(UICamera.hoveredObject !=null)

     {

           print("点到NGUI");

     }

}

2.通过射线来检测

   private RaycastHit  _hit=newRaycastHit();.

    //判断在UI界面层操作.

    if(UICamera.Raycast (Input.mousePosition,out_hit) ==false)

    {

            ...

     }

    Ray ray=UICamera.mainCamera.ScreenPointToRay(Input.mousePosition);// 向屏幕发射线

    RaycastHit hit;

    if(Physics.Raycast(ray,out hit,200))//射线的碰撞检测

    {

        print("点到NGUI");

    }

3.用到UICamera中提供了一个方法专门来处理这个问题,static public bool Raycast (Vector3 inPos),可能不通的NGUI版本参数会有一点区别,这个函数的作用是,返回一个bool值判断传入的位置是点击到了NGUI的元素还是非NGUI的元素。

    RaycastHit rayHit;

    if(UICamera.Raycast(Input.mousePosition))

    {

           Debug.Log("你点击的是NGUI");

     }

    else

     {

          Debug.Log("你点击的是非NGUI");

   }

4.NGUI提供的UICamera.isOverUI方法,就挂在你main Camera的射线扫描前就行,该语句是返回布尔值,当射线扫描到UI就截断射线,就会使射线禁止穿透,具体使用是

if (UICamera.isOverUI  == false)

 {

     //鼠标没在部件上

}

你可能感兴趣的:(Ngui 点透问题)