1. 程式人生 > >unity UGUI基礎(三)

unity UGUI基礎(三)

推薦閱讀:

UGUI的簡介:

      UGUI系統是從Unity 4.6開始,被整合到Unity的編輯器中Unity官方給這個新的UI系統賦予的標籤是:靈活,快速和視覺化!,簡單來說對於開發者而言就是有三個優點:效率高效果好,易於使用,擴充套件,以及與Unity的相容性高。
      在不使用任何程式碼的前提下,就可以簡單快速額在遊戲中建立其一套UI介面,這在過去是絕對不可想想的,但是新的UI系統確實做到了這一點因為Unity預定義了很多常見的元件,它們以“遊戲物件”的形式存在於遊戲場景中。

      在前文中我們已經通過一系列案例掌握了UGUI的使用,下面我們最後再來鞏固一下。

下面我們再舉個關卡分頁設計例子,綜合理解UGUI

實現直接滑動
在這裡插入圖片描述
設定通過新增元件設定內容的滑動,多餘內容的隱藏
在這裡插入圖片描述
實現點選下面的圓圈滑動
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
主要程式碼:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class LevelButtonScrollRect : MonoBehaviour ,IBeginDragHandler,IEndDragHandler
{
    private ScrollRect scrollRect;

    public float smoothing = 4; //插值的速度
    private float[] pageArray=new float[]{ 0,0.33333f,0.66666f,1 }; //每個頁面X軸座標

    
    private float targetHorizontalPosition=0; //距離最近頁面的X座標
    private bool isDraging = false; //是否拖拽的標誌位

    public Toggle[] toggleArray; //圓圈陣列
    
    void Start ()
    {
        scrollRect = GetComponent<ScrollRect>();
    }
    
    void Update ()
    {
        if(isDraging==false)
            scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition,
                targetHorizontalPosition, Time.deltaTime*smoothing);
    }


    public void OnBeginDrag(PointerEventData eventData)
    {
        isDraging = true;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        isDraging = false;
        //找到當前位置與每頁距離最小的頁面,並切換到該頁面
        float posX = scrollRect.horizontalNormalizedPosition;
        int index = 0;
        float offset = Mathf.Abs(pageArray[index] - posX);
        for (int i = 1; i < pageArray.Length; i++)
        {
            float offsetTemp = Mathf.Abs(pageArray[i] - posX);
            if (offsetTemp < offset)
            {
                index = i;
                offset = offsetTemp;
            }
        }
        targetHorizontalPosition = pageArray[index];
        toggleArray[index].isOn = true;
        //scrollRect.horizontalNormalizedPosition = pageArray[index];
    }
    public void MoveToPage1(bool isOn) {
        if (isOn)
        {
            targetHorizontalPosition = pageArray[0];
        }
    }
    public void MoveToPage2(bool isOn) {
        if (isOn) {
            targetHorizontalPosition = pageArray[1];
        }

    }
    public void MoveToPage3(bool isOn) {
        if (isOn)
        {
            targetHorizontalPosition = pageArray[2];
        }

    }
    public void MoveToPage4(bool isOn) {

        if (isOn)
        {
            targetHorizontalPosition = pageArray[3];
        }
    }
}

      說明:由於編輯器操作比較複雜,文字描述可能會讓讀者存在疑惑,因此我採用圖片解說方式向大家展示。如果對於這個方式有什麼意見或建議歡迎留言~
      通過上面操作,你已經對UGUI有了更深入的瞭解,如果有什麼疑惑歡迎評論區留言。最後告訴你一個小祕密,學習unity一定要親自操作編輯器哦!