一直是个痛点,这次解决了, ugui通用
using System.Collections;using System.Collections.Generic;using System.Linq;using UnityEngine;/// /// UGUI页签管理器/// /// 管理器挂上UITabManager/// 页签按钮挂上UITabButton/// 页签内容挂上继承了ITabContent接口的脚本/// 注意面板赋值/// public class UITabManager : MonoBehaviour{ //页签按钮列表 public List tabButtonList; //页签列表 private List tabContentList = new List(); //当前页签 //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().OpenTabContent(); curButton.select.SetActive(true); curButton.unselect.SetActive(false); } } public void CloseTabContent(UITabButton tabButton) { tabButton.tabContent.GetComponent().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();
}
相关阅读
评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。
发表评论