鼠标事件

0左键 1右键 2滚轮

鼠标点击事件实现的三种方式

  1. Input.GetMouseButton
  2. 利用事件接口,这种方式可以直接在UI上进行操作。
    UnityAction<BaseEventData> enter;
    UnityAction<BaseEventData> exit;
    UnityAction<BaseEventData> click;
    EventTrigger.Entry entry;
    EventTrigger.Entry entry1;
    EventTrigger.Entry entry2;
    EventTrigger trigger;
    void Start()
    {
        enter = new UnityAction<BaseEventData>(OnPointerEnterDelegate);
        exit = new UnityAction<BaseEventData>(OnPointerExitDelegate);
        click = new UnityAction<BaseEventData>(OnPointerClickDelegate);
        trigger = gameObject.AddComponent<EventTrigger>();
        
        entry = new EventTrigger.Entry();
        entry1 = new EventTrigger.Entry();
        entry2 = new EventTrigger.Entry();
        
        entry.eventID = EventTriggerType.PointerEnter;
        entry1.eventID = EventTriggerType.PointerExit;
        entry2.eventID = EventTriggerType.PointerClick;
        
        entry.callback.AddListener(enter);
        entry1.callback.AddListener(exit);
        entry2.callback.AddListener(click);
        
        trigger.triggers.Add(entry);
        trigger.triggers.Add(entry1);
        trigger.triggers.Add(entry2);
    }
    public void OnPointerClickDelegate(BaseEventData data){}
    public void OnPointerEnterDelegate(BaseEventData data){}
    public void OnPointerExitDelegate(BaseEventData data){}
    
  3. 挂脚本,直接实现OnMouseDown函数

进度条更新太快

不要使用onvaluechange,而要使用OnEventTriggerEvent,它表示结束拖动滚动条。

onValueChanged变化太快:

        progress.onValueChanged.AddListener(v =>
        {
            var p = videoPlayerObj.GetComponent<VideoPlayer>();
            if (p.canSetTime)
            {
                p.time = v * p.length;
            }
        });

C#中使用扩展方法为所有的UI空间指定事件回调:


public static class UIBehaviourExtension
{
    /// <summary>
    /// 添加EventTrigger事件监听
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="self"></param>
    /// <param name="type"></param>
    /// <param name="action"></param>
    /// <returns></returns>
    public static T OnEventTriggerEvent<T>(this T self, EventTriggerType type, UnityAction<BaseEventData> action) where T : UIBehaviour
    {
        var eventTrigger = self.GetComponent<EventTrigger>() ?? self.gameObject.AddComponent<EventTrigger>();
        EventTrigger.Entry entry = new EventTrigger.Entry { eventID = type };
        entry.callback.AddListener(action);
        eventTrigger.triggers.Add(entry);
        return self;
    }
}

使用的时候直接x.OnEnventTriggerEvent即可。