在UGUI中,EventSystem實現了所有關於交互方面的功能,和NGUI不一樣的地方是,我們終於可以擺脫添加Box Collider了!
下面我們來學習一下。
對於按鈕來說,直接有onClick的事件,我們可以直接在編輯器中方便的通過拖拽來實現響應函數的賦值,這點和NGUI是一樣的,如下:
代碼使用onClick方法可以看這里:http://www.cnblogs.com/hammerc/p/4343618.html
Event Trigger
Event Trigger和NGUI中的Event Trigger功能保持一致,即使添加了該組件的GameObject獲得可以支持按下、移入、移出等事件的能力,對應的NGUI的學習筆記可點這里:http://www.cnblogs.com/hammerc/p/4591933.html
我們可以給任意的對象添加Event Trigger使其擁有響應對應類型的輸入的能力,如下:
我們發現其可以支持所有類型的輸入事件:
事件響應的注冊和onClick一致就不多說了。
支持任意物體
這點和NGUI一致,Event Trigger不僅支持Canvas內的UI,也支持場景中的所有物體。
下面我們看一下如果我想點擊場景中的一個Cube該怎么辦。
創建場景
我們創建一個新的場景,同時添加一個Cube,首先我們的要響應事件的GameObject都需要一個Collider,如下:
創建Cube自帶的Collider,如果沒有碰撞器則不能響應事件,這里Is Trigger是否勾選都可以響應輸入事件。
添加Event Trigger
我們為Cube添加Event Trigger組件,同時設定好其鼠標點下時調用一個方法,如下:
腳本如下:
1 using UnityEngine; 2 using System.Collections; 3 4 public class NewBehaviourScript1 : MonoBehaviour 5 { 6 public void PointDownHandler() 7 { 8 Debug.Log("Point Down!"); 9 } 10 }
為Camera添加處理事件的腳本
顯示的Cube要響應輸入,必須為顯示其的Camera添加響應物理世界的腳本Physice Raycastor,如下:
添加Event System
最后為場景添加一個Event System即可。
運行一下,小方塊就可以支持點擊響應了。
事件接口
UGUI為我們提供了一些接口,整理如下:
我們該如何使用這些接口呢?
示例
我們新建一個腳本並添加到Canvas中的一個Image上,腳本如下:
1 using UnityEngine; 2 using UnityEngine.EventSystems; 3 4 public class ImageInteractive : MonoBehaviour, IPointerDownHandler 5 { 6 public void OnPointerDown(PointerEventData eventData) 7 { 8 Debug.Log(eventData.button); 9 } 10 }
這里我們通過輸出就可以獲得點擊的按鈕是鼠標左鍵、中鍵還是右鍵了,當然PointerEventData還提供了更多的屬性來使我們獲得更多的點擊信息。
注意:這些信息是單純使用Event Trigger無法獲得的,同時,使用接口的方式不用添加Event Trigger等其他的腳本。
唯一需要注意的就是:腳本必須添加到接收事件的GameObject之上。
通過使用接口,我們可以獲得所有交互事件中更多的信息,使開發更復雜的交互變得更加輕松。