Files
webRtc/Assets/Script/Pool/GameObjectPool.cs
2026-05-22 15:43:00 +08:00

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