中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EventTrigger如何在Unity中使用

發布時間:2021-04-12 15:46:10 來源:億速云 閱讀:412 作者:Leah 欄目:開發技術

EventTrigger如何在Unity中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

namespace UnityEngine.EventSystems
{
    [AddComponentMenu ("Event/Event Trigger")]
    public class EventTrigger : MonoBehaviour, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IBeginDragHandler, IInitializePotentialDragHandler, IDragHandler, IEndDragHandler, IDropHandler, IScrollHandler, IUpdateSelectedHandler, ISelectHandler, IDeselectHandler, IMoveHandler, ISubmitHandler, ICancelHandler
    {
        //
        // Fields
        //
        [Obsolete ("Please use triggers instead (UnityUpgradable) -> triggers", true)]
        public List<EventTrigger.Entry> delegates;
        //
        // Properties
        //
        public List<EventTrigger.Entry> triggers {
            get;
            set;
        }
        //
        // Constructors
        //
        protected EventTrigger ();
        //
        // Methods
        //
        private void Execute (EventTriggerType id, BaseEventData eventData);
        public virtual void OnBeginDrag (PointerEventData eventData);
        public virtual void OnCancel (BaseEventData eventData);
        public virtual void OnDeselect (BaseEventData eventData);
        public virtual void OnDrag (PointerEventData eventData);
        public virtual void OnDrop (PointerEventData eventData);
        public virtual void OnEndDrag (PointerEventData eventData);
        public virtual void OnInitializePotentialDrag (PointerEventData eventData);
        public virtual void OnMove (AxisEventData eventData);
        public virtual void OnPointerClick (PointerEventData eventData);
        public virtual void OnPointerDown (PointerEventData eventData);
        public virtual void OnPointerEnter (PointerEventData eventData);
        public virtual void OnPointerExit (PointerEventData eventData);
        public virtual void OnPointerUp (PointerEventData eventData);
        public virtual void OnScroll (PointerEventData eventData);
        public virtual void OnSelect (BaseEventData eventData);
        public virtual void OnSubmit (BaseEventData eventData);
        public virtual void OnUpdateSelected (BaseEventData eventData);
        //
        // Nested Types
        //
        [Serializable]
        public class Entry
        {
            public EventTriggerType eventID;
            public EventTrigger.TriggerEvent callback;
            public Entry ();
        }
        [Serializable]
        public class TriggerEvent : UnityEvent<BaseEventData>
        {
            public TriggerEvent ();
        }
    }
}

這是官方的API中的類,

接下來用不同的方式來看EventTrigger的用法:

1.通過編輯器中添加

在Inspector中添加EventTrigger的componnent組件,然后點擊Add New Event Type按鈕添加一個基本的事件,主基本事件如下圖:

EventTrigger如何在Unity中使用

當我們選擇一個事件的時候,就相當于將要于此事件綁定了,例如當我們選擇Pointer Click的時候,綁定了這個組件的物體將接受Pointer Click 事件的消息,當我們在物體上按下鼠標的時候,(當然空間中的物體我們是無法通過鼠標點擊的,但是當我們可以通過射線碰撞的方法,來實現Pointer Enter,Pointer Exit等事件的觸發)這里我們用來綁定這個EventTrigger 的是一個UI Panel 這樣便可以讓它接受我們自定義的單擊事件了

EventTrigger如何在Unity中使用

這里的1是我們之前選擇的Pointer click 事件,2處是將我們3處要執行我們想要的觸發函數所在腳本的gameobject托入這里,然后才能選擇這個gameobject對象上的腳本來執行,當點擊了panel的時候就會觸發MyClick這個函數(這是我們自定義的函數),編輯器中的方法基本就是這樣了。

2.接下來便是如何在腳本中實現剛才的功能

using UnityEngine;
using System.Collections;
using System.Collections.Generic;using UnityEngine.Events;
using UnityEngine.EventSystems;
public class GameManager : MonoBehaviour {
        void Start()
        {
                UnityAction<BaseEventData> click = new UnityAction<BaseEventData> (MyClick);
                EventTrigger.Entry myclick = new EventTrigger.Entry ();
                myclick.eventID = EventTriggerType.PointerClick;
                myclick.callback.AddListener (click);
                EventTrigger trigger = gameObject.AddComponent<EventTrigger> ();
                trigger.triggers.Add (myclick);
        }
        public void MyClick(BaseEventData data)
        {
                Debug.Log ("點擊");
        }}

將這個腳本添加到Panel上面,然后運行,點擊Panel,便打印出了“點擊”。

補充:Unity中使用EventTrigger點擊場景中的物體

突然發現,原來以為做一遍以為就不會忘記的東西慢慢就忘了,看來隨著年齡的增大記憶力還是慢慢不如從前 了。那就勤動手,把一些需要的東西記下來吧。

今天使用unity的EventTrigger組件,實現點擊3D物體。

使用Unity版本:5.4

按照記憶中的方法首先添加事件:

 EventTrigger et = gameObject.GetComponent<EventTrigger>();
 if (et == null)
 {
     et = gameObject.AddComponent<EventTrigger>();
 }
 et.triggers = new List<EventTrigger.Entry>();
 EventTrigger.Entry enter = new EventTrigger.Entry();
 enter.eventID = EventTriggerType.PointerDown;
 enter.callback = new EventTrigger.TriggerEvent();
 UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnPointerDown);
 enter.callback.AddListener(callback);
 et.triggers.Add(enter);

然后我們在OnPointerDown方法中加一個輸出,方便測試:

void OnPointerDown(BaseEventData data)
    {
 Debug.LogError("OnPointerDown");
    }

看完上述內容,你們掌握EventTrigger如何在Unity中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

合肥市| 平潭县| 晴隆县| 宜兰市| 象山县| 定兴县| 忻城县| 安图县| 古丈县| 彭阳县| 黑山县| 贡觉县| 栾城县| 郎溪县| 苍梧县| 镇远县| 精河县| 东丽区| 黄骅市| 鄂托克旗| 定边县| 霍城县| 府谷县| 巧家县| 日喀则市| 米林县| 茶陵县| 镇平县| 靖宇县| 叶城县| 亚东县| 民权县| 道真| 蒙阴县| 民丰县| 罗定市| 廊坊市| 四会市| 新竹县| 武宁县| 通江县|