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

}

 

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。