• ugui 通用页签管理器


    一直是个痛点,这次解决了, ugui通用

    
    
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using UnityEngine;

    /// <summary>
    /// UGUI页签管理器
    ///
    /// 管理器挂上UITabManager
    /// 页签按钮挂上UITabButton
    /// 页签内容挂上继承了ITabContent接口的脚本
    /// 注意面板赋值
    /// </summary>
    public class UITabManager : MonoBehaviour
    {
    //页签按钮列表
    public List<UITabButton> tabButtonList;
    //页签列表
    private List<GameObject> tabContentList = new List<GameObject>();
    //当前页签
    //private GameObject curContentObj;
    private UITabButton curButton;

    // Start is called before the first frame update
    void Start()
    {
    foreach (var one in tabButtonList)
    {
    tabContentList.Add(one.tabContent);
    //默认打开第一个
    if (tabContentList.Count == 1)
    {
    curButton = one;
    OpenCurTabContent();
    }
    else
    {
    CloseTabContent(one);
    }
    one.btn.onClick.AddListener(() =>
    {
    //避免重复点击
    if (curButton != one)
    {
    CloseTabContent(curButton);
    curButton = one;
    OpenCurTabContent();
    }
    });
    }
    }

    // Update is called once per frame
    void Update()
    {

    }

    //打开当前页签
    public void OpenCurTabContent()
    {
    if (curButton != null)
    {
    curButton.tabContent.GetComponent<ITabContent>().OpenTabContent();
    curButton.select.SetActive(true);
    curButton.unselect.SetActive(false);
    }
    }

    public void CloseTabContent(UITabButton tabButton)
    {
    tabButton.tabContent.GetComponent<ITabContent>().CloseTabContent();
    tabButton.select.SetActive(false);
    tabButton.unselect.SetActive(true);
    }
    }
     

    按钮挂载,并拖到UITabManager的tabButtonList上去

    
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class UITabButton : MonoBehaviour
    {
    public Button btn;
    public GameObject select;
    public GameObject unselect;
    public GameObject tabContent;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
    }
     

    接口

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public interface ITabContent
    {
        void OpenTabContent();
        void CloseTabContent();
    }
  • 相关阅读:
    提升开发效率的十个工具
    JQuery常用函数及功能小结
    jquery-validation 学习总结
    JavaScript:避免代码的重复执行
    18 个最好的CSS框架用于提高开发效率
    如何书写高质量的jQuery代码
    13个 ASP.NET MVC 的扩展
    CSS_LESS 语法/函数详解
    21个值得收藏的Javascript技巧
    JQuery常用功能的性能优化
  • 原文地址:https://www.cnblogs.com/sanyejun/p/12398296.html
Copyright © 2020-2023  润新知