43 lines
1010 B
C#
43 lines
1010 B
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
public class GameObjectPool : MonoBehaviour
|
|
{
|
|
[Tooltip("预制体")] public GameObject prefab;
|
|
[Tooltip("初始预加载数量")] public int preload = 10;
|
|
|
|
private Stack<GameObject> _pool = new();
|
|
public Transform parent;
|
|
|
|
private void Start()
|
|
{
|
|
for (var i = 0; i < preload; i++)
|
|
{
|
|
var go = Instantiate(prefab, transform);
|
|
go.SetActive(false);
|
|
_pool.Push(go);
|
|
}
|
|
}
|
|
|
|
public GameObject Get()
|
|
{
|
|
var go = _pool.Count > 0 ? _pool.Pop() : Instantiate(prefab, parent);
|
|
go.transform.parent = parent;
|
|
go.SetActive(true);
|
|
return go;
|
|
}
|
|
|
|
public void Release(GameObject go)
|
|
{
|
|
if (go == null) return;
|
|
go.SetActive(false);
|
|
go.transform.SetParent(transform, false);
|
|
_pool.Push(go);
|
|
}
|
|
|
|
public void AllRelease()
|
|
{
|
|
foreach (var go in _pool) Destroy(go);
|
|
_pool.Clear();
|
|
}
|
|
} |