EventTrigger接管所有事件导致 在ScrollRect中,点击不能滚动

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

今天有朋友问我,在ScrollRect 中 使用了 EventTrigger ,然后发现 鼠标按住 物体 的情况下不能拖着滚动了,但是鼠标按在空白处是可以拖动的。

这个问题是因为 EventTrigger把所有的事件都接管了,查看 EventTrigger 代码就会发现它 实现了所有的事件接口

EventTrigger接管所有事件导致 在ScrollRect中,点击不能滚动_第1张图片


然后当我们点击到 上层物体 的时候,Drag 事件被 上层物体 中的 EventTrigger 接管了,但是我们又没有对 Drag 事件进行处理,相当于抛弃了。所以鼠标按住上层物体的时候是不能拖动的。

转自http://www.thisisgame.com.cn http://blog.csdn.net/huutu

在之前的笔记

Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案                   


中有说道,因为 Coroutine 的问题,所以用 EventTrigger 这种形势来写按钮点击处理。

而我当时候就是直接 继承了 EventTrigger 来写 按钮点击处理的。

using UnityEngine;using System.Collections;using UnityEngine.EventSystems;public class EventTriggerListener : UnityEngine.EventSystems.EventTriggerpublic delegate void VoidDelegate(GameObject go,object data)public VoidDelegate onClick; private object m_Param=nullpublic static EventTriggerListener Get(GameObject go{  EventTriggerListener listener=go.GetComponent();  if(listener==null)  {   listener=go.AddComponent();  }  return listener; } public void SetParam(object data{  m_Param=data; } public override void OnPointerClick (PointerEventData eventData{  base.OnPointerClick (eventData);  if(onClick!=null)  {   onClick(gameObject,m_Param);  } }}

这样就会导致 拖不动的情况。


其实我们要处理点击事件的话,只要实现 点击事件的接口就可以了。

修改如下 PointerClickListener:

using UnityEngine;using System.Collections;using UnityEngine.Events;using UnityEngine.EventSystems;public class PointerClickListener : MonoBehaviour,IPointerClickHandler{    public delegate void VoidDelegate(GameObject go);    public VoidDelegate onClick;    public object parameter;    public object parameter1;    static public PointerClickListener Get(GameObject go)    {        PointerClickListener listener = go.GetComponent<PointerClickListener>();        if (listener == null) listener = go.AddComponent<PointerClickListener>();        return listener;    }    public  void OnPointerClick(PointerEventData eventData)    {        if (onClick != null)        {            onClick(gameObject);        }    }}

这样就可以了。

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

你可能感兴趣的:(EventTrigger接管所有事件导致 在ScrollRect中,点击不能滚动)