1. 程式人生 > >UGUI處理ScrollRect的滑動被OnDrag函式攔截的一點技巧

UGUI處理ScrollRect的滑動被OnDrag函式攔截的一點技巧

筆程式小白一名,剛接觸unity不久,在探索UGUI的過程中遇到了一個問題,

 

Hierarchy介面和Scrollview的設定如圖:

 

要實現的效果是(1)滑鼠上下滑動時,CardList作為一個整體可以隨滑鼠上下滑動時。

                           (2)滑鼠左右滑動時,Cardunit 元素中的一個值Num_Card可以增減。

由於Cardunit在上面,他會攔截調Scrollview的ONDrag函式,導致不能實現(1)功能,

不知道小夥伴們是怎麼處理的,歡迎告訴我更好的方法。

下面說說我的方法,起個拋磚引玉的效果。

    我是在Cardunit上掛了一個指令碼重寫了下面的3個函式,在函式裡直接呼叫了Scrollview裡面被攔截的函式(scrollRect就是Scrollview上掛的ScrollRect元件)

程式碼如下:

    public  void OnBeginDrag(PointerEventData eventData)
 {
  scrollRect.OnBeginDrag (eventData);
 }

 public void OnDrag(PointerEventData eventData)
 {
  vec_drap = eventData.delta;
 
   if (Mathf.Abs (vec_drap.x) > value_MinDrog && Mathf.Abs (vec_drap.x) < Mathf.Abs (vec_drap.y)) {
    scrollRect.OnDrag (eventData);
 
    numCanChange = false;
   } else if (Mathf.Abs (vec_drap.x) > value_MinDrog && Mathf.Abs (vec_drap.x) > Mathf.Abs (vec_drap.y)) {
    numCanChange = true;
   }

  //eventData.IsScrolling();
  Debug.Log ("OnDrag" + eventData.delta);

 }
 public void OnEndDrag(PointerEventData eventData)
 {
  scrollRect.OnEndDrag (eventData);
  Debug.Log (eventData.delta);
  if ( vec_drap.x <=0 && numCanChange) {
   if (num < 3)
    num++;
   cardNum .text = num + "";
   numCanChange = false;
   
  } else if ( vec_drap.x >=0 && numCanChange) {
   if(num>0)
    num--;
   cardNum .text  = num+"";
   numCanChange = false;
  }
  //scrollRect.OnEndDrag(eventData);
 }

這樣基本實現了我要的功能,就是不知道在真正的遊戲開發中大牛們是怎麼處理的,歡迎批評指正啊。

第一篇部落格,有點小激動呢