Unity 动态面板

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 ();
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值