Create ObjectPoolService

This commit is contained in:
2025-12-13 19:57:48 +08:00
parent 8915a26407
commit 980b26dd5e
5 changed files with 60 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 89ba33c34f0301d4fbe4d0a614d2da9a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
namespace Services.Interfaces {
public interface IObjectPool<T> where T : class {
T Get();
void Fill();
void Release(T gameObject);
void Clear();
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8cda63dc65b2425b810a008823083079
timeCreated: 1765625964

View File

@@ -0,0 +1,38 @@
using System.Collections;
using System.Collections.Generic;
using Services.Interfaces;
using UnityEngine;
namespace Services {
public class ObjectPoolService:IObjectPool<GameObject> {
private readonly GameObject prefab;
private readonly Transform parent;
private readonly int size;
private readonly Stack<GameObject> pool = new Stack<GameObject>();
public ObjectPoolService(GameObject prefab, Transform parent, int size = 5) {
this.prefab = prefab;
this.parent = parent;
this.size = size;
}
public GameObject Get() {
return this.pool.Count == 0 ? Object.Instantiate(this.prefab, this.parent) : this.pool.Pop();
}
public void Fill() {
for (int i = 0; i < this.size; i++) {
Object.Instantiate(this.prefab, this.parent);
}
}
public void Release(GameObject gameObject) {
this.pool.Push(gameObject);
}
public void Clear() {
this.pool.Clear();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 531f947d214849c99d3c09ae404406d6
timeCreated: 1765625414