unity 3D之ugui Scroll Rect拖拽消息衝突問題

如題。html

  ugui的誕生很大程度的改變了NGUI一手遮天的現狀。可是Ugui也因爲與Ngui有極大的類似之處被人認爲是Ngui的私生子。Ugui是unity親生的UI系統,在各個地方都有照顧,因此也被愈來愈多的人認識。愈來愈多的遊戲、應用也逐漸採用ugui去開發。但ugui始終沒有Ngui的渾厚,不少功能也亟待改善。函數

一、Ugui界面開發之Scroll Rectui

  拖拽是遊戲中須要顯示較多物體的主要方式,表如今界面上就須要用到諸如Scroll Rect等方式。spa

二、建立一個Scroll Rect代理

  Unity 5.2版本中建立Scroll Rect與老一點的版本不一樣,在結構樹中分爲四層:「Scroll Rect/ViewPoint/Content/item」。以下圖。code

  首先在觀察窗口中建立一個Panelhtm

在Panel中添加Scroll Rect組件。blog

點擊Panel,點擊鼠標右鍵-》Creat Empty。建立一個空的物體在planel下,並命名爲「ViewPoint」。繼承

點擊上一步建立的空物體,點擊鼠標右鍵-》Creat Empty,在空物體下再建立一個空物體,並命名爲「Content」:遊戲

在Content物體中添加組件「Grid Layout Group」。該組件可以自動排列子item的順序。固然根據須要你能夠選擇「 horizontal Layout」或是「vertical Layout」。

在Content下添加item。

這就作好了最簡單的Scroll Rect。

接下來根據具體問題我會提出具體的解決方案。太晚了,先睡明天更新。

更新:20160703

一般咱們在對ugui item添加點擊事件是一般會使用兩種方法

方法一:

EventTrigger事件方法,經過傳遞點擊後的回調函數,觸發點擊事件。

方法二:

經過偵聽Button 的onClick 事件。

 

UnityEngine.UI.Button button;
button.onClick.AddListener(function);

由於當咱們要對Content中的item作點擊事件的時候,一般會將item設定爲ugui 中的Button。因此這裏就有了方案二。

ugui Button組件中原生封裝了又onClick觸發事件。

咱們在 使用EventTrigger觸發事件時,有一個很好的地方就是隻要是GameObject,就可以響應事件。這樣的好處就是如Image等組件在Unity中也可以天然響應事件。

可是問題也就出在這裏。Scroll Rect中滑動事件是經過EventTrigger響應,因此當item也是經過EventTrigger響應點擊事件時,就會遮擋住後面的Scroll Rect的滑動事件。這會致使很尷尬的結果,滑動列表須要在很小的範圍纔會響應滑動事件。

因此在處理這個問題的時候我選用了第二種方案,使用onClick去觸發點擊事件。onClick回調函數 是繼承自UnityEngine.Events.UnityAction.委託。因爲同一個點擊事件經過不一樣的事件模塊去響應,很好的處理了item擋住Scroll Rect 事件的問題。委託格式爲不帶任何參數和返回的函數。

當咱們要使用的時候經過調用button.onClick.AddListener(function);便可。

例如:button.onClick.AddListener(OnButtonClick2);

可是這樣的話每次不能傳值只能觸發事件,爲了在響應的同時經過事件出入參數,因此在事件處理時添加了代理函數。

button.onClick.AddListener(delegate(){OnButtonClick1(button.gameObject);});這樣就能響應時間的同時傳入參數。

 

 

///鼠標點擊回調事件
public void OnButtonClick1(GameObject go){
//do some thing
}

public void OnButtonClick2(){
//do some thing
}

 

 

 

 

reference:

http://www.xuanyusong.com/archives/3325

 

THISSKY出品,原文連接:http://www.cnblogs.com/zhuhongjongy/p/5441069.html

相關文章
相關標籤/搜索