美文网首页
Ngui 点透问题

Ngui 点透问题

作者: 豆铮 | 来源:发表于2018-08-18 14:29 被阅读30次

    问题详情:

            点击地面玩家行走,可是点击界面按钮的时候,事件触发不了,或者同时执行了玩家点地行走事件;当点击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 点透问题

          本文链接:https://www.haomeiwen.com/subject/sudfiftx.html