自己在学习UGUI背包系统时用到了,而且遇到一些问题,所以在这里写一下这两个接口的简单说明。
继承IPointerEnterHandler和IpointerExitHandler这两个接口后可以实现两个方法。Void OnPointerEnter(PointerEventData eventData);和Void OnPointerExit(PointerEventData eventData),分别在光标进入某UI时和离开某UI时调用。
需要说明:
1.进入和离开的UI必须是代码所在UI或所代码所在UI的子对象。
2.进入某UI时调用了OnPointerEnter(),在没有离开此UI时又进入了另一个UI,则不会触发这个方法OnPointerEnter(),比如:
上图是一个简单的背包,有很多的小格子(Grid),有一个大的背景(GridPanel),其中Grid是GridPanel的子对象,我把继承了借口的脚本放在了GridPanel上,这样光标进入任意格子以及进入背景都会调用借口中的方法,但是!!光标进入背景后会直接再进入到格子中,光标在进入背景没有离开背景的情况下进入格子是不会再次调用接口方法的。
我的解决方法很简单,取消勾选GridPanel上Image组件的RaycastTarget选项,这样就不会检测到光标进入背景了。
但是我在做背包的时候,我需要检测是否把物品拖到了两个格子之间,所以还是需要让背景接受射线检测的,所以我就新建了一个和背景一模一样的Image,这个Image可接受射线检测,且不会调用接口方法(在接口方法中可以查看光标下的UI是哪个UI)。
3. 关于接口方法参数的说明,
eventData.pointerEnter指光标下的对象,如eventData.pointerEnter.tag可以查看光标下对象的tag.
eventData.button指发生事件时按下的是鼠标的哪一个键,与上面讲到的两个接口类似的还有几个,如这三个有关拖拽的接口IDragHandler,IEndDragHandler,IBeginDragHandler,实现了有关在UI上拖拽的方法,如eventData.button == PointerEventData.InputButton.Left这条语句判断拖拽时按下的是不是鼠标左键。