国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Unity實現(xiàn)輪盤方式的按鈕滾動效果

2020-01-24 00:10:09
字體:
供稿:網(wǎng)友

近期在項目中,策劃給出了一個需求就是,讓按鈕按照一個輪盤的軌跡進(jìn)行滑動的效果,經(jīng)過一番測試,實現(xiàn)了初步的效果。

我這里區(qū)分了橫向滑動和縱向滑動,這里以縱向滑動為例子進(jìn)行示范,實現(xiàn)按鈕的滑動效果。

首先就是先進(jìn)行位置初始化:

 /// <summary>  ///從大到小排序,Y軸  /// </summary>  private Comparison<CircleScrollRectItemBase> ComparisionY =    delegate (CircleScrollRectItemBase itemA, CircleScrollRectItemBase itemB)    {      if (itemA.transform.localPosition.y == itemB.transform.localPosition.y) return 0;      return (itemA.transform.localPosition.y > itemB.transform.localPosition.y) ? -1 : 1;    };     public void Init()   {    if (null == listItems || listItems.Length == 0)    {      return;    }     if (itemPostions != null && itemPostions.Length > 0)    {      for (int i = 0; i < itemPostions.Length; i++)      {        listItems[i].transform.localPosition = itemPostions[i];      }    }     //XY軸排序按不同方式排序,可以統(tǒng)一使用共同的函數(shù)    if (horizontal)    {      //位置從小到大排序      Array.Sort(listItems, ComparisionX);    }    else    {      //位置從大到小排序      Array.Sort(listItems, ComparisionY);    }    //設(shè)置元素關(guān)系及固定位置    itemPostions = new Vector3[listItems.Length];    for (int i = 0; i < listItems.Length; ++i)    {      listItems[i].SetItemConfig(i, //set id                    listItems[(i + 1) % listItems.Length], //next item                    listItems[(i - 1 + listItems.Length) % listItems.Length]); //previous item       itemPostions[i] = new Vector3(listItems[i].transform.localPosition.x,                      listItems[i].transform.localPosition.y,                       listItems[i].transform.localPosition.z);      listItems[i].currPosIndex = i;    }    RefreshContentListLength();    GetCurrPointItem();    InitValue();  }

鼠標(biāo)拖動時的更新代碼:

開始拖動設(shè)置拖拽狀態(tài)

public virtual void OnBeginDrag(PointerEventData eventData)  {    BeginDrag(eventData);  }   public void BeginDrag(PointerEventData eventData)  {    dragging = true;    needAdjust = false;    dragStartPostion = eventData.position;  }

在拖動過程中更新item的位置

 /// <summary> // 拖動中更新位置  /// </summary>  /// <param name="eventData"></param>  public virtual void OnDrag(PointerEventData eventData)  {    Draging(eventData);  }   public void Draging(PointerEventData eventData)  {    if (horizontal)    {      if (ShiftListHorizontal(eventData.position - dragStartPostion))      {        dragStartPostion = eventData.position; //更新起始位置      }    }    else    {      if (ShiftListVertical(eventData.position - dragStartPostion))      {        dragStartPostion = eventData.position; //更新起始位置      }    }  }

拖動結(jié)束,調(diào)整位置,刷新指定界面

/// <summary>/// 拖動結(jié)束/// </summary>/// <param name="eventData"></param>  public virtual void OnEndDrag(PointerEventData eventData)  {    EndDrag(eventData);  }   public void EndDrag(PointerEventData eventData)  {    dragging = false;    if (needAdjust)    {      if (horizontal)      {        AdjustLocationX();      }      else      {        AdjustLocationY();      }    }    //在滑動結(jié)束 處理變換顏色和其他信息    GetCurrPointItem();  }

處理收拾滑動,還做了點擊指定item ,自動跳轉(zhuǎn)過去 

 //在這里獲取所有類型的按鈕    for (int i = 0; i < listItems.Length; i++)    {      GameObject go = listItems[i].gameObject;      listItems[i].GetComponent<Button>().onClick.AddListener(() =>       {        AutoMoveAllItem(go);      });          }      /// <summary>  /// 根據(jù)點擊情況 自動移動所有的道具類型按鈕  /// </summary>  /// <param name="go"></param>  private void AutoMoveAllItem(GameObject go)  {     //如果正在拖拽 不進(jìn)行任何操作          if (dragging)    {      return;    }     //點擊中間那個 不進(jìn)行任何操作    if (go.transform.localPosition.y == 0)    {      return;    }     //所有按鈕下一一格    if (go.transform.localPosition.y > 0)    {      UpdateItemMovePos(2);    }    //上移    else    {      UpdateItemMovePos(1);    }  }

下面是實現(xiàn)的效果:

工程地址:Unity實現(xiàn)輪盤方式的按鈕滾動效果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 朝阳县| 万载县| 文登市| 中西区| 梁平县| 北安市| 浦江县| 民和| 孟州市| 马边| 宁安市| 宾川县| 库车县| 贵定县| 乐山市| 驻马店市| 德庆县| 大田县| 会宁县| 奉节县| 定兴县| 朝阳区| 巴南区| 荥经县| 保康县| 潼南县| 潢川县| 山东| 西贡区| 来凤县| 阜新| 白河县| 元朗区| 普安县| 灵川县| 宝应县| 巴塘县| 蓬安县| 隆化县| 清水河县| 永善县|