1. 程式人生 > >Unity UGUI事件系統

Unity UGUI事件系統

Unity3D的uGUI系統的將UI可能觸發的事件分為12個型別,即EventTriggerType列舉的12個值。如下圖所示:

    先以PointerClick為例。這個是用於某點點選事件。其他事件都可以根據相同的辦法呼叫。

    之所以使用PointerClick為例。是因為在最後筆者會提到一個特殊的實現方式。而相比於其他事件型別,有且僅有Click事件存在特殊實現。

    我們要實現事件主要有3種方式:

    方式一:繼承基礎介面實現

    步驟一:建立ClickObject指令碼。繼承MonoBehaviour和IPointerClickHandler。

    

    步驟二:實現public void OnPointerClick(PointerEventData eventData)方法:

    步驟三:建立一個名為Panel_IPointer的空物件。並且將ClickObject指令碼附加到物件上。

    步驟四:啟動,並點選Panel_IPointer物件。在Console輸出如下:

    方式二:Unity3D編輯器操作設定實現

    

步驟一:建立一個C#指令碼。在指令碼中新增一個public方法。

步驟二:建立一個命名為Empty的UI物件,用於接收和響應點選事件。建立一個名為Panel的UI物件,用於觸發點選事件。

步驟三:Panel物件新增EventTrigger元件," Add New" -> 選擇" PointerClick"。將Empty物件拖拽到觸發者位置。然後點選"No Function"選擇我們寫在Test指令碼中的OnTestClick事件。

    步驟四:設定好這些之後。我們的事件觸發就已經完成了。執行Unity3D。點選視窗中Panel物件。Console輸出內容如下:

    方式三:程式動態設定實現

    我們在日常的開發中。可能需要動態的需要變更繫結的事件。那麼我們如何才能使用C#程式碼控制繫結觸發事件呢?

    下面我們就介紹程式碼控制。ScriptControl.cs指令碼

複製程式碼
 1 using System.Collections.Generic;
 2 using UnityEngine;
 3 using UnityEngine.Events;
 4 using UnityEngine.EventSystems;
 5 
 6 public class ScriptControl : MonoBehaviour {
 7 
 8     // Use this for initialization
 9     void Start ()
10     {
11         var trigger = transform.gameObject.GetComponent<EventTrigger>();
12         if (trigger == null)
13             trigger = transform.gameObject.AddComponent<EventTrigger>();
14 
15         // 例項化delegates
16         trigger.delegates = new List<EventTrigger.Entry>();
17 
18         // 定義需要繫結的事件型別。並設定回撥函式
19         EventTrigger.Entry entry = new EventTrigger.Entry();
20         // 設定 事件型別
21         entry.eventID = EventTriggerType.PointerClick;
22         // 設定回撥函式
23         entry.callback = new EventTrigger.TriggerEvent();
24         UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll);
25         entry.callback.AddListener(callback);
26         // 新增事件觸發記錄到GameObject的事件觸發元件
27         trigger.delegates.Add(entry);
28     }
29     
30     // Update is called once per frame
31     void Update () {
32     
33     }
34 
35     public void OnScriptControll(BaseEventData arg0)
36     {
37         Debug.Log("Test Click");
38     }
39 
40 }
複製程式碼

    點選事件的特殊實現方式:使用Button控制元件實現

    

    針對Click事件還存在一種特殊方式:uGUI系統中官方提供了一種Button控制元件。Button封裝了官方提供的一套OnClick事件。操作完全類似於方式二。便不詳述了。

    使用Button我們可以實現動態的變更滑鼠繫結的點選事件。如下程式碼所示:

複製程式碼
 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.UI;
 4 
 5 public class BtnControl : MonoBehaviour {
 6 
 7     // Use this for initialization
 8     void Start ()
 9     {
10         var button = transform.gameObject.GetComponent<Button>();
11         if (button != null)
12         {
13             button.onClick.RemoveAllListeners();
14             button.onClick.AddListener(TestClick);
15         }
16     }
17 
18     public void TestClick()
19     {
20         Debug.Log("Test Click. This is Type 4");
21     }
22     
23     // Update is called once per frame
24     void Update () {
25         
26     }
27 }

相關推薦

Unity UGUI事件系統

Unity3D的uGUI系統的將UI可能觸發的事件分為12個型別,即EventTriggerType列舉的12個值。如下圖所示:     先以PointerClick為例。這個是用於某點點選事件。其他事件都可以根據相同的辦法呼叫。     之所以使用Pointer

Unity UGUI中ScrollView的拖拽與被UGUI事件系統遮蔽的問題

    最近在專案中遇到一個Scroll View相關問題,具體為:在ScrollView中,為例項化出來的toggle添加了OnValueChange的方法,會導致ScrollView的拖拽方法接收不到拖拽資訊。同時經過測試EventSystem中的onDown,onCli

Unity UGUI事件介面(EventSystems介面)

事件介面的觸發條件 using UnityEngine.EventSystems; /// <summary> /// 指標點選事件 /// *在元件可視的區域按下且擡起時指標處於區域內(按下離開區域後擡起不會觸

UGUI事件系統點選響應物件的獲取時機

public class TestInvoke : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IPointerEnterHandler, IPoint

Unity UGUI按鈕動態新增點選事件

使用程式碼的方式給按鈕新增點選事件需要引入兩個名稱空間: using UnityEngine.UI; using UnityEngine.Events; 先建立一個介面,並且在介面裡放置一個按鈕: 建立一個Test指令碼,程式碼如下: using

Unity UGUI 按鈕繫結事件的 4 種方式

Unity UGUI 按鈕繫結事件的 4 種方式 UGUI 視覺化建立以及關聯事件很方便, 動態建立可以利用建立好的 Prefab 進行例項化, 只是在關聯事件上有些複雜, 本文總結了幾種給按鈕繫結事件的關聯方式. 1. 視覺化建立及事件繫結 # Step 1 : 通過 Hierarch

Unity UGUI有趣應用 】 (三)-------------------- 揹包系統(上)之簡易單頁揹包系統及檢索功能的實現

揹包系統,無論是遊戲還是應用,都是常常見到的功能,其作用及重要性不用我多說,玩過遊戲的朋友都應該明白。 在Unity中實現一個簡易的揹包系統其實並不是太過複雜的事。本文要實現的是一個帶檢索功能的揹包系統。先看一下我們要完成的效果 。由於上傳的gif圖不能大於5M,所以錄製

Unity UGUI按鈕新增點選事件

1. 視覺化建立及事件繫結 #  1 : 通過 Hierarchy 面板建立 UI > Button.    2 : 建立一個指令碼 TestClick.cs, 定義了一個 Click 的 public 方法(一定要是public的方法).  3 : 把 指

Unity uGUI 長按事件

在Unity 4.6新增的uGUI中,可以方便地對控制元件,通過新增EventTrigger指令碼來進行新增事件。但是裡面並沒有包括長按事件,需要自己來實現長按事件。 長按事件 using UnityEngine; using UnityEngine

[UnityUI]UGUI事件系統

官方文件連結:http://docs.unity3d.com/460/Documentation/Manual/SupportedEvents.html Supported Events The Eventsystem supports a number of events

[Unity][UGUI][UI佈局]Tooltip事件閃爍BUG解決辦法

方法1: OnPointerEnter 和 OnPointerExit 有點問題。即便是用延遲,還是 會 出現 快速 enter 和 exit事件同時馬上 發生的問題。 大概原因是 Tooltip的UI 離 觸發的UI 太近的原因。 因此 把 Tooltip 提示框

Unity UGUI 繫結事件的 4 種方式

1. 視覺化建立及事件繫結 #Step 1 : 通過 Hierarchy 面板建立 UI > Button.Step 2 : 建立一個指令碼 TestClick.cs, 定義了一個 Click 的 public 方法.Step 3 : 選中 Hierarchy 中的 B

unity UGUI按鈕繫結事件的四種方法

UGUI 視覺化建立以及關聯事件很方便, 動態建立可以利用建立好的 Prefab 進行例項化, 只是在關聯事件上有些複雜, 本文總結了幾種給按鈕繫結事件的關聯方式. 1. 視覺化建立及事件繫結 # Step 1 : 通過 Hierarchy 面板建立 UI > Bu

Unity UGUI 動態新增Button.OnClick()事件

using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.Eve

Unity事件系統EventSystem簡析

相關元件和類 EventSystem 1.負責InputModule的切換(因為現在遊戲大部分都只有一個StanaloneInputModule,所以切換這部分可以先不考慮)。 2.負責InputModule的啟用與反啟用。 3.負責Tick整個事件系統。 4.更新InputModule,處理失焦和記錄滑

Unity調用系統窗口選擇文件或文件路徑

ssi iou bool 調用 文件 number replace gas edi using UnityEngine;using System.Collections;using System;using System.Runtime.InteropServices;[S

Unity UGUI——概述、長處

mod 分享 pop num 4.6 使用 number his 推出 Unity4.6推出的新UI系統 長處:靈活、高速、可視化、效率高效果好、易於使用和擴展 $(function () {

UNITY UGUI 腳本綁定

.com ugui alt post unit ima bubuko 技術分享 info UNITY UGUI 腳本綁定

React事件系統入門

保存 組件 綁定 pos 通過 機制 兼容 target 我們 React基於虛擬DOM實現了一個合成事件層,我們所定義的事件處理器會接受到一個合成事件層對象的實例,它完全符合W3C標準,不會存在任何IE標準的兼容性問題。並且和原生的瀏覽器事件一樣擁有同樣的接口,同樣支持事

unity調用系統剪切板功能

pack 文本 nal wlan0 type ddr roi output key package com.game.utils; import android.app.Activity; import android.content.ClipData; import a