Unity中EventTrigger使用


  • 在Unity中,點擊場景中的模型我們往往需要檢測是否點擊在了UI上,這時我們需要進行一系列的判斷,往往效果還不好,因此我在場景中模型的點擊也使用了EventTrigger,EventTrigger我們在UI上的使用比較常見,但是它也可以用於場景點擊,並且能屏蔽點擊到UI又響應了模型的點擊事件,以下是點擊事件的組件腳本
    using UnityEngine;
    using UnityEngine.EventSystems;
    public class EventTriggerListener : EventTrigger
    {
        public delegate void VoidDelegate();
        public delegate void EventDelegate(BaseEventData baseEventData);
        public delegate void BoolDelegate(bool state);
        public delegate void FloatDelegate(float delta);
        public delegate void VectorDelegate(Vector2 delta);
        public delegate void ObjectDelegate(GameObject obj);
        public delegate void KeyCodeDelegate(KeyCode key);
    
        public VoidDelegate onClick;
        public EventDelegate onEventClick;
        public VoidDelegate onDown;
        public VoidDelegate onEnter;
        public VoidDelegate onExit;
        public VoidDelegate onUp;
        public VoidDelegate onSelect;
        public VoidDelegate onUpdateSelect;
    
    
        static public EventTriggerListener Add(Transform transform)
        {
            EventTriggerListener listener = transform.GetComponent<EventTriggerListener>();
            if (listener == null)
                listener = transform.gameObject.AddComponent<EventTriggerListener>();
            return listener;
        }
    
        public override void OnPointerClick(PointerEventData eventData)
        {
            if (onClick != null)
            {
                onClick();
            }
            if (onEventClick != null)
            {
                onEventClick(eventData);
            }
        }
    
        public override void OnPointerDown(PointerEventData eventData)
        {
            if (onDown != null)
                onDown();
        }
    
        public override void OnPointerEnter(PointerEventData eventData)
        {
            if (onEnter != null)
                onEnter();
        }
    
        public override void OnPointerExit(PointerEventData eventData)
        {
            if (onExit != null)
                onExit();
        }
    
        public override void OnPointerUp(PointerEventData eventData)
        {
            if (onUp != null)
                onUp();
        }
    
        public override void OnSelect(BaseEventData eventData)
        {
            if (onSelect != null)
                onSelect();
        }
    
        public override void OnUpdateSelected(BaseEventData eventData)
        {
            if (onUpdateSelect != null)
                onUpdateSelect();
        }
    }

     

  • 使用方法,只需要在模型對象上掛在腳本,該腳本注冊下上面的腳本事件。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class EnvironmentClick : MonoBehaviour
    {
        private void Awake()
        {
            EventTriggerListener.Add(transform).onEventClick += OnGroundClick;
        }
       public void OnGroundClick(BaseEventData data)
        {
            if (Input.GetMouseButton(1)) return;
            if (Input.GetMouseButton(2)) return;
    
           //do something
    
        } 
        
    }

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM