美文网首页Unity技术分享Unity基础入门分享
简单代码 实现unity Tab菜单效果

简单代码 实现unity Tab菜单效果

作者: RichMartin | 来源:发表于2017-11-29 17:48 被阅读51次
    image.png

    需求:右边为ScrollView 可滑动 左边为TabGroup 滑动对应tab变化

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using UnityEngine.EventSystems;
    using System;
    namespace Babybus.BabyModule
    {
       public class ScrollManager : MonoBehaviour, IBeginDragHandler, IEndDragHandler
       {
           ScrollRect scrollRect;
           public float smoothing = 4;
           private bool isDrag = false;
           private float targetVertivalPosition = 0;
           private float[] pageArray = new float[] { 0.006718779f, 0.35f, 0.68f, 1 }; //设定每一页 设定每一页的float x 信息
           public Toggle[] toggleArray;
           bool dragOnce = false;
           public void OnBeginDrag(PointerEventData eventData)
           {
               isDrag = true;
               dragOnce = true;
           }
    
           public void OnEndDrag(PointerEventData eventData)
           {
               isDrag = false;
               float posX = scrollRect.verticalNormalizedPosition;
               print(posX);
               int index = 3;
               float offset = Mathf.Abs(pageArray[index] - posX);//默认离第一页最近
               for (int i = 0; i < pageArray.Length; i++)
               {
                   float offsettemp = Mathf.Abs(pageArray[i] - posX);
                   if (offsettemp < offset)
                   {//绝对值值越小离越近
                       index = i;
                       offset = offsettemp;
                   }
               }
               targetVertivalPosition = pageArray[index];
               toggleArray[index].isOn = true;
           }
    
           // Use this for initialization
           void Start()
           {
               scrollRect = this.transform.GetComponent<ScrollRect>();
                scrollRect.verticalNormalizedPosition =1;
               
           }
    
           // Update is called once per frame
           void Update()
           {
               if (isDrag == false&&dragOnce)
               { 
                   scrollRect.verticalNormalizedPosition = Mathf.Lerp(scrollRect.verticalNormalizedPosition,
                          targetVertivalPosition, Time.deltaTime * smoothing);//通过插值实现缓慢滚动
               }
           }
    //Tab 点击
           public void OnTogglePage_1_Change(bool isOn)
           {
               if (isOn)
               {
                   targetVertivalPosition = pageArray[3];
                   dragOnce = true;
               }
             
    
           }
           public void OnTogglePage_2_Change(bool isOn)
           {
               if (isOn)
               {
                   targetVertivalPosition = pageArray[2];
                   dragOnce = true;
               }
               
           }
           public void OnTogglePage_3_Change(bool isOn)
           {
               if (isOn)
               {
                   targetVertivalPosition = pageArray[1];
                   dragOnce = true;
               }
              
           }
           public void OnTogglePage_4__Change(bool isOn)
           {
               if (isOn)
               {
                   targetVertivalPosition = pageArray[0];
                   dragOnce = true;
               }
              
           }
       }
    }
    

    相关文章

      网友评论

        本文标题:简单代码 实现unity Tab菜单效果

        本文链接:https://www.haomeiwen.com/subject/wjzubxtx.html