版权声明:转载或者引用本文内容请注明来源及原作者 https://blog.csdn.net/TIANHUNYISHUI/article/details/88814903
using System;
using UnityEngine;
namespace Framework {
/// <summary>
/// 动态面板
/// </summary>
public class UIDynamicPanel : UIPanel {
/// <summary>
/// 面板类型
/// </summary>
private Type m_PanelType;
/// <summary>
/// 面板预设
/// </summary>
private GameObject m_PanelPrefab;
/// <summary>
/// 面板对象池
/// </summary>
private ObjectPool m_PanelPool;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="type">面板类型</param>
/// <param name="prefab">面板预设</param>
public UIDynamicPanel (Type type, GameObject prefab) {
m_PanelType = type;
m_PanelPrefab = prefab;
m_PanelPool = new ObjectPool (OnPanelConstruct, OnPanelDestroy, OnPanelEnabled, OnPanelDisabled);
}
/// <summary>
/// 面板构造回调
/// </summary>
/// <returns></returns>
private object OnPanelConstruct () {
GameObject gameObject = UnityEngine.Object.Instantiate (m_PanelPrefab);
gameObject.name = m_PanelPrefab.name;
gameObject.SetActive (false);
gameObject.transform.SetParent (Transform, false);
UIPanel panel = Activator.CreateInstance (m_PanelType) as UIPanel;
panel.Init (PanelName, gameObject);
return panel;
}
/// <summary>
/// 面板销毁回调
/// </summary>
/// <param name="obj"></param>
private void OnPanelDestroy (object obj) {
UIPanel panel = obj as UIPanel;
panel.OnDestroy ();
UnityEngine.Object.Destroy (panel.GameObject);
}
/// <summary>
/// 面板启用回调
/// </summary>
/// <param name="obj"></param>
private void OnPanelEnabled (object obj) {
UIPanel panel = obj as UIPanel;
panel.Enabled = true;
}
/// <summary>
/// 面板关闭回调
/// </summary>
/// <param name="obj"></param>
private void OnPanelDisabled (object obj) {
UIPanel panel = obj as UIPanel;
panel.Enabled = false;
}
/// <summary>
/// 启用回调
/// </summary>
public override void OnEnabled () { }
/// <summary>
/// 关闭回调
/// </summary>
public override void OnDisabled () { }
/// <summary>
/// 面板销毁
/// </summary>
public override void OnDestroy () {
base.OnDestroy ();
Clear ();
}
/// <summary>
/// 添加面板
/// </summary>
/// <returns>返回面板对象</returns>
public UIPanel Add () {
UIPanel panel = m_PanelPool.Get () as UIPanel;
m_PanelList.Add (panel);
return panel;
}
/// <summary>
/// 移除面板
/// </summary>
/// <param name="panel"></param>
public void Remove (UIPanel panel) {
m_PanelPool.Remove (panel);
m_PanelList.Remove (panel);
}
/// <summary>
/// 清理面板
/// </summary>
public void Clear () {
m_PanelPool.Clear ();
m_PanelList.Clear ();
}
}
}