From 980b26dd5ee9f0ece6243f1645396e28c8a2bb5c Mon Sep 17 00:00:00 2001 From: Jesus Castro Date: Sat, 13 Dec 2025 19:57:48 +0800 Subject: [PATCH] Create ObjectPoolService --- Assets/Scripts/Services/Interfaces.meta | 8 ++++ .../Services/Interfaces/IObjectPool.cs | 8 ++++ .../Services/Interfaces/IObjectPool.cs.meta | 3 ++ Assets/Scripts/Services/ObjectPoolService.cs | 38 +++++++++++++++++++ .../Services/ObjectPoolService.cs.meta | 3 ++ 5 files changed, 60 insertions(+) create mode 100644 Assets/Scripts/Services/Interfaces.meta create mode 100644 Assets/Scripts/Services/Interfaces/IObjectPool.cs create mode 100644 Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta create mode 100644 Assets/Scripts/Services/ObjectPoolService.cs create mode 100644 Assets/Scripts/Services/ObjectPoolService.cs.meta diff --git a/Assets/Scripts/Services/Interfaces.meta b/Assets/Scripts/Services/Interfaces.meta new file mode 100644 index 0000000..ae8338e --- /dev/null +++ b/Assets/Scripts/Services/Interfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89ba33c34f0301d4fbe4d0a614d2da9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Services/Interfaces/IObjectPool.cs b/Assets/Scripts/Services/Interfaces/IObjectPool.cs new file mode 100644 index 0000000..7ce4b7b --- /dev/null +++ b/Assets/Scripts/Services/Interfaces/IObjectPool.cs @@ -0,0 +1,8 @@ +namespace Services.Interfaces { + public interface IObjectPool where T : class { + T Get(); + void Fill(); + void Release(T gameObject); + void Clear(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta b/Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta new file mode 100644 index 0000000..8064512 --- /dev/null +++ b/Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8cda63dc65b2425b810a008823083079 +timeCreated: 1765625964 \ No newline at end of file diff --git a/Assets/Scripts/Services/ObjectPoolService.cs b/Assets/Scripts/Services/ObjectPoolService.cs new file mode 100644 index 0000000..fdc9db8 --- /dev/null +++ b/Assets/Scripts/Services/ObjectPoolService.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using Services.Interfaces; +using UnityEngine; + +namespace Services { + public class ObjectPoolService:IObjectPool { + private readonly GameObject prefab; + private readonly Transform parent; + private readonly int size; + + private readonly Stack pool = new Stack(); + + 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(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Services/ObjectPoolService.cs.meta b/Assets/Scripts/Services/ObjectPoolService.cs.meta new file mode 100644 index 0000000..8c51558 --- /dev/null +++ b/Assets/Scripts/Services/ObjectPoolService.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 531f947d214849c99d3c09ae404406d6 +timeCreated: 1765625414 \ No newline at end of file