TestCodeStructure/Assets/Scripts/Project/ProjectBase/UIManager/BaseItem.cs

141 lines
3.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// Item 基类 方便使用组件
/// </summary>
public class BaseItem : MonoBehaviour
{
/// <summary>
/// 存储面板上所有控件
/// </summary>
private readonly Dictionary<string, List<UIBehaviour>> controlDic = new Dictionary<string, List<UIBehaviour>>();
/// <summary>
/// 初始化 查找控件
/// </summary>
protected virtual void Awake()
{
FindChildrenControl<Button>();
FindChildrenControl<Image>();
FindChildrenControl<Text>();
FindChildrenControl<Toggle>();
FindChildrenControl<Slider>();
FindChildrenControl<ScrollRect>();
FindChildrenControl<InputField>();
FindChildrenControl<TextMeshPro>();
FindChildrenControl<TextMeshProUGUI>();
}
/// <summary>
/// 得到对应名称的控件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="controlName"></param>
/// <returns></returns>
public T GetControl<T>(string controlName) where T : UIBehaviour
{
if (controlDic.ContainsKey(controlName))
{
for (int i = 0; i < controlDic[controlName].Count; i++)
{
if (controlDic[controlName][i] is T)
return controlDic[controlName][i] as T;
}
}
return null;
}
/// <summary>
/// 查找所有子对象
/// </summary>
/// <typeparam name="T"></typeparam>
private void FindChildrenControl<T>() where T : UIBehaviour
{
T[] controls = GetComponentsInChildren<T>(true);
for (int i = 0; i < controls.Length; i++)
{
string controlName = controls[i].gameObject.name;
if (controlDic.ContainsKey(controlName))
{
controlDic[controlName].Add(controls[i]);
}
else
{
controlDic.Add(controlName, new List<UIBehaviour>() {controls[i]});
}
if (controls[i] is Button button)
{
button.onClick.AddListener(() => { OnClick(controlName); });
}
else if (controls[i] is Toggle toggle)
{
toggle.onValueChanged.AddListener((value) => { OnChangeToggle(controlName, value); });
}
else if (controls[i] is Slider slider)
{
slider.onValueChanged.AddListener((value) => { OnChangeSlider(controlName, value); });
}
else if (controls[i] is InputField inputField)
{
inputField.onValueChanged.AddListener((value) => { OnChangeInputFile(controlName, value); });
}
}
}
/// <summary>
/// 显示自己
/// </summary>
public virtual void ShowMe()
{
}
/// <summary>
/// 隐藏自己
/// </summary>
public virtual void HideMe()
{
}
/// <summary>
/// 按钮点击事件
/// </summary>
/// <param name="btnName"></param>
protected virtual void OnClick(string btnName)
{
}
/// <summary>
/// Toogle点击
/// </summary>
/// <param name="toogleName">toogle名称</param>
/// <param name="isOn">状态值</param>
protected virtual void OnChangeToggle(string toogleName, bool isOn)
{
}
/// <summary>
/// Slider拖动
/// </summary>
/// <param name="SliderName">Slider组件名称</param>
/// <param name="value">数值</param>
protected virtual void OnChangeSlider(string SliderName, float value)
{
}
/// <summary>
/// 输入框输入
/// </summary>
/// <param name="inputFileName">输入框名称</param>
/// <param name="value">输入框内的值</param>
protected virtual void OnChangeInputFile(string inputFileName, string value)
{
}
}