| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using YooAsset;
 
- namespace UniFramework.Pooling
 
- {
 
- 	/// <summary>
 
- 	/// 游戏对象池系统
 
- 	/// </summary>
 
- 	public static class UniPooling
 
- 	{
 
- 		private static bool _isInitialize = false;
 
- 		private static GameObject _driver = null;
 
- 		private static readonly List<Spawner> _spawners = new List<Spawner>();
 
- 		/// <summary>
 
- 		/// 初始化游戏对象池系统
 
- 		/// </summary>
 
- 		public static void Initalize()
 
- 		{
 
- 			if (_isInitialize)
 
- 				throw new Exception($"{nameof(UniPooling)} is initialized !");
 
- 			if (_isInitialize == false)
 
- 			{
 
- 				// 创建驱动器
 
- 				_isInitialize = true;
 
- 				_driver = new UnityEngine.GameObject($"[{nameof(UniPooling)}]");
 
- 				_driver.AddComponent<UniPoolingDriver>();
 
- 				UnityEngine.Object.DontDestroyOnLoad(_driver);
 
- 				UniLogger.Log($"{nameof(UniPooling)} initalize !");
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 销毁游戏对象池系统
 
- 		/// </summary>
 
- 		public static void Destroy()
 
- 		{
 
- 			if (_isInitialize)
 
- 			{
 
- 				foreach (var spawner in _spawners)
 
- 				{
 
- 					spawner.Destroy();
 
- 				}
 
- 				_spawners.Clear();
 
- 				_isInitialize = false;
 
- 				if (_driver != null)
 
- 					GameObject.Destroy(_driver);
 
- 				UniLogger.Log($"{nameof(UniPooling)} destroy all !");
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 更新游戏对象池系统
 
- 		/// </summary>
 
- 		internal static void Update()
 
- 		{
 
- 			if (_isInitialize)
 
- 			{
 
- 				foreach (var spawner in _spawners)
 
- 				{
 
- 					spawner.Update();
 
- 				}
 
- 			}
 
- 		}
 
- 		/// <summary>
 
- 		/// 创建游戏对象生成器
 
- 		/// </summary>
 
- 		/// <param name="packageName">资源包名称</param>
 
- 		public static Spawner CreateSpawner(string packageName)
 
- 		{
 
- 			// 获取资源包
 
- 			var assetPackage = YooAssets.GetPackage(packageName);
 
- 			if (assetPackage == null)
 
- 				throw new Exception($"Not found asset package : {packageName}");
 
- 			// 检测资源包初始化状态
 
- 			if (assetPackage.InitializeStatus == EOperationStatus.None)
 
- 				throw new Exception($"Asset package {packageName} not initialize !");
 
- 			if (assetPackage.InitializeStatus == EOperationStatus.Failed)
 
- 				throw new Exception($"Asset package {packageName} initialize failed !");
 
- 			if (HasSpawner(packageName))
 
- 				return GetSpawner(packageName);
 
- 			Spawner spawner = new Spawner(_driver, assetPackage);
 
- 			_spawners.Add(spawner);
 
- 			return spawner;
 
- 		}
 
- 		/// <summary>
 
- 		/// 获取游戏对象生成器
 
- 		/// </summary>
 
- 		/// <param name="packageName">资源包名称</param>
 
- 		public static Spawner GetSpawner(string packageName)
 
- 		{
 
- 			foreach (var spawner in _spawners)
 
- 			{
 
- 				if (spawner.PackageName == packageName)
 
- 					return spawner;
 
- 			}
 
- 			UniLogger.Warning($"Not found spawner : {packageName}");
 
- 			return null;
 
- 		}
 
- 		/// <summary>
 
- 		/// 检测游戏对象生成器是否存在
 
- 		/// </summary>
 
- 		/// <param name="packageName">资源包名称</param>
 
- 		public static bool HasSpawner(string packageName)
 
- 		{
 
- 			foreach (var spawner in _spawners)
 
- 			{
 
- 				if (spawner.PackageName == packageName)
 
- 					return true;
 
- 			}
 
- 			return false;
 
- 		}
 
- 	}
 
- }
 
 
  |