-
EventSystem.current.IsPointerOverGameObject(),返回值表示的含义是当前鼠标所在的位置,有没有UI(UGUI)元素,该脚本所在的对象不算。(这个函数的作用是为了弹出的UI面板,鼠标点击时,穿透UI面板而触发面板下面物体OnMouseEnter的问题。)
-
UGUI的碰撞检测方法:
-
禁止使用Box Collider + OnMouseEnter()的方法, 因为OnMouseEnter()不管有没有覆盖物体,都会被触发。如果你不想在对象Mono被覆盖的时候,还能触发该函数,就不要使用这种方法。
-
UGUI使用继承接口的方式,使用EventSystem系统,此方法UI元素不需要添加Collider组件:
-
IPointerEnterHandler,
IPointerExitHandler,
IPointerDownHandler,
IPointerClickHandler
3. UGUI元素添加EventTrigger组件 ,以拖拽的方式添加事件方法给EventTrigger
4. 添加Button脚本
5. 组合型UGUI:父亲是个EmptyGameObject, 有 Image1和Image2两个孩子,若父亲挂有脚本,且脚本内使用方法B或C, 则孩子们视为整体,任意孩子发生点击行为,父亲脚本内的OnPointerEnter()都会触发,并且能得到被点击的UI对象。
6 . 在E的基础上,使用卡牌举例,使用空物体作为顶层父亲,顶层父亲下面会挂载ImagCardFram,ImagCardSkill,TxtCardName等;首先,需要在顶层空物体上添加Image组件,该Image不做显示,只作物理范围限制(可调节RectTransform的长和宽),其次,需要取消所有子UI物体的RayCast Taeget。
7. 在F的基础上,顶层父亲可以添加Canvas和GraphicRender,来设定Sording Layer和Ordering Layer.
3. U2D使用Box Collider + OnMouseEnter()的方法,但是要注意,如果该U2D对象上方弹出了UGUI的面板或者上方有UI元素,即使鼠标落在上层的UI元素上,此时的OnMouseEnter()还是会触发,即产生了穿透现象。解决方法是在OnMouseEnter()内第一行加上判断:if (EventSystem.current.IsPointerOverGameObject()) return;//若鼠标所在的地方,不管是上层还是下层,检测到有UI元素存在,则退出。该方法有很大的局限性。
4. U2D的两种常用的判断点击的方法:

5. UGUI常用的EventTrigger方法:
//添加UGUI事件监听器
EventTrigger trigger = mask.AddComponent<EventTrigger>();
//添加OnClick事件
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback.AddListener(OnClick_Mask);
trigger.triggers.Add(entry);
本文介绍了UGUI和U2D中处理鼠标事件的方法,包括EventSystem.current.IsPointerOverGameObject()的使用,避免鼠标穿透UI的策略,以及UGUI中使用IPointerEnterHandler等接口和EventTrigger组件来响应鼠标事件。同时,讨论了U2D中Box Collider结合OnMouseEnter()的注意事项和解决方案。
2166

被折叠的 条评论
为什么被折叠?



