You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.2 KiB
47 lines
1.2 KiB
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using XWFramework.Tools;
|
|
namespace XWFramework.ObjectTool
|
|
{
|
|
public class ObjectPool : MonoSingleton<ObjectPool>
|
|
{
|
|
[Header("Ô¤ÖÆÌå´æ·Å·¾¶")]
|
|
public string resourcesDir;
|
|
Dictionary<string, SubPool> pools;
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
pools = new Dictionary<string, SubPool>();
|
|
}
|
|
|
|
//È¡³ö
|
|
public GameObject Spawn(string name)
|
|
{
|
|
if (!pools.ContainsKey(name))
|
|
{
|
|
CreateSubPool(name);
|
|
}
|
|
return pools[name].Spawn();
|
|
}
|
|
|
|
public void UnSpawn(GameObject obj)
|
|
{
|
|
foreach (SubPool subPool in pools.Values)
|
|
{
|
|
if (subPool.Contains(obj))
|
|
{
|
|
subPool.UnSpawn(obj);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CreateSubPool(string name)
|
|
{
|
|
GameObject prefab = Resources.Load<GameObject>(resourcesDir + name);
|
|
SubPool subPool = new SubPool(prefab, transform);
|
|
pools.Add(name, subPool);
|
|
}
|
|
}
|
|
}
|