一直是个痛点,这次解决了, 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();
}

ugui 通用页签管理器的更多相关文章

  1. Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库

    我们自豪地宣布 Gitea v1.17.0 发布了.本次发布带来了诸多新特性和累积的更新,我们强烈建议用户在更新到最新版本之前仔细阅读发行注记. 在 1.17.0 版本的开发中我们一共合并了 645 ...

  2. dock停靠管理器

    DockManager停靠管理器可以对它所拥有的 停靠面板 的行为和外观设置进行集中控制.DockPanel停靠面板是停靠应用程序的主要构成部件. 常规面板 DockPanel.ParentPanel ...

  3. .NET零基础入门之02:源码控制管理器的使用

    一:概述 源码控制管理器,也叫"版本控制"软件,用于存储.追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是专业软件公司的基础工具.它主要是协助在多人团队中控制代码,防 ...

  4. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全

    基于角色的安全是从 Windows NT 的第一个版本开始在 Windows 平台上发展而来的.使用角色,操作系统可以通过检查称为 BUILTIN\Administrators 的组的安全上下文做出一 ...

  5. nuget 包管理器

    nuget 是.Net平台上的包管理器, 对于包的发布(打包 package)和消费(下载依赖管理)都有很好的支持, 本文仅仅关注消费端, =======================nuget项目 ...

  6. 订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段

    京东APP订单业务楼层化技术实践解密 原创 杜丹 留成 博侃 京东零售技术 2020-09-29 https://mp.weixin.qq.com/s/2oExMjh70Kyveiwh8wOBVA 用 ...

  7. Django基础-004 上下文管理器&中间件&前端公共代码复用

    一.上下文管理器 在views中重复使用的代码,可以在上下文管理器中实现 上下文管理器的处理流程如下: 1.先走完views里面的代码,将结果返回给前端 2.然后再将上下文的结果返回给前端 3.上下文 ...

  8. FIXMAP内存管理器

    fixed map是被linux kernel用来解决一类问题的机制,这类问题的共同特点是: (1)在很早期的阶段需要进行地址映射,而此时,由于内存管理模块还没有完成初始化,不能动态分配内存,也就是无 ...

  9. Duilib源码分析(四)绘制管理器—CPaintManagerUI

    接下来,分析uilib.h中的UIManager.h,在正式分析CPaintManagerUI前先了解前面的一些宏.结构: 枚举类型EVENTTYPE_UI:定义了UIManager.h中事件通告类型 ...

  10. 无法为目标平台“Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider”创建扩展管理器

    很久没写博客了,这段时间情绪不那么稳定,还是心态的问题... 就简单写个问题的解决方法吧,其实最近遇到的问题蛮多的,就拿这个解决过后又遇到的来写吧. 正如标题一样:VS2013 无法为目标平台“Mic ...

随机推荐

  1. 操作系统综合题之“短进程优先调度算法(Shortest-Process-First,SPF)和非抢占式优先权调度算法(Priority-Scheduling Lgorithm)的进程执行顺序并计算周转时间以及平均周转时间【分开计算题】”

    一.问题: 1.当系统采用短进程优先调度算法时,试写出进程的执行顺序,并计算各个进程的周转时间以及平均周转时间 2.当系统采用优先权调度算法时,试写出进程的执行顺序,并计算各个进程的周转时间以及平均周 ...

  2. 在鸿蒙NEXT中开发一个2048小游戏

    本项目是基于api12开发的2048游戏,游戏的逻辑是当用户向某个方向滑动时,将该方向相邻且相等的数字相加,同时在空白区域的随机位置生成一个随机数字.游戏中的数字越大,分数越高. 首先,游戏的界面布局 ...

  3. LR_GD_MSE (公式补充)

    上篇是先撸了一把梯度下降的代码, 用来优先 LR 中的 MSE. 核心代码是在求解梯度这一步. # y = wx + b def step_gradient(b_current, w_current, ...

  4. 一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库

    前言 今天大姚给大家分享一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库:Bootstrap Blazor. 项目介绍 BootstrapBlazor 是一套基于 Boot ...

  5. 手把手部署n8n

    n8n 是当前非常热门的开源 AI 工作流平台,在 GitHub 上已获得超过九万颗 star. 通过 n8n,用户可以拖拽节点,轻松搭建复杂的 AI 工作流.每个节点都支持上千种插件,可灵活集成各类 ...

  6. 剪枝在pytorch中是如何实现的?

    Pytorch中剪枝源码可参考: https://github.com/pytorch/pytorch/blob/master/torch/nn/utils/prune.py 可参考: pytorch ...

  7. the server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one time zone.

    分析:数据库和系统时区差异造成 解决:在jdbc连接的url后面加上 &serverTimezone=GMT

  8. git提示:There is no tracking information for the current branch

    问题 使用git pull拉取远程分支代码的时候,提示: > There is no tracking information for the current branch. Please sp ...

  9. Kubernetes控制器-Deployment

    Kubernetes控制器-Deployment 我们已经知道ReplicaSet控制器是用来维护集群中运行的Pod数量的,但是往往在实际操作时候,我们反而不去直接使用RS,而是使用更上层的控制器,比 ...

  10. ServiceMesh实验室——00之实验室搭建

    实验室搭建 Docker&&K8S 环境,这一篇(https://github.com/AliyunContainerService/k8s-for-docker-desktop)就够 ...