• 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();
    }
  • 相关阅读:
    MySQL wrapped 连接池
    学习 memcache 心得
    memcachedb 加 memcached engine无法提高 示例检索的查询速度
    memcached+Mysql(主从) php 编程
    动态设置select与radio的默认值
    JSTL 自定义
    坦克大战 Java版
    给超链接加onclick事件
    图片查看器C#
    备份删除还原数据库
  • 原文地址:https://www.cnblogs.com/sanyejun/p/12398296.html
Copyright © 2020-2023  润新知