动态面板

版权声明:转载或者引用本文内容请注明来源及原作者 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 ();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/TIANHUNYISHUI/article/details/88814903