From 6d72129baee9e899d11951163e57541327ba9a34 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Fri, 14 Nov 2025 17:13:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9E=E9=AA=8C=E6=A1=86?= =?UTF-8?q?=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../[Architecture]/Modules/ConfigManager.cs | 17 +++++ .../Modules/ConfigManager.cs.meta | 11 +++ .../Modules/ObjectPoolManager.cs | 74 +++++++++++++++++++ .../Modules/ObjectPoolManager.cs.meta | 11 +++ 4 files changed, 113 insertions(+) create mode 100644 Convention/[Architecture]/Modules/ConfigManager.cs create mode 100644 Convention/[Architecture]/Modules/ConfigManager.cs.meta create mode 100644 Convention/[Architecture]/Modules/ObjectPoolManager.cs create mode 100644 Convention/[Architecture]/Modules/ObjectPoolManager.cs.meta diff --git a/Convention/[Architecture]/Modules/ConfigManager.cs b/Convention/[Architecture]/Modules/ConfigManager.cs new file mode 100644 index 0000000..bb65e9b --- /dev/null +++ b/Convention/[Architecture]/Modules/ConfigManager.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace Convention.Experimental.Modules +{ + public class ConfigManager : PublicType.GameModule + { + public readonly ProjectConfig m_ProjectConfig = new(); + public bool IsSavePropertiesWhenShutdown = false; + + internal override void Shutdown() + { + if (IsSavePropertiesWhenShutdown) + m_ProjectConfig.SaveProperties(); + } + } +} diff --git a/Convention/[Architecture]/Modules/ConfigManager.cs.meta b/Convention/[Architecture]/Modules/ConfigManager.cs.meta new file mode 100644 index 0000000..565169d --- /dev/null +++ b/Convention/[Architecture]/Modules/ConfigManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eae9830d96a5f184b832846bf67c4b59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Convention/[Architecture]/Modules/ObjectPoolManager.cs b/Convention/[Architecture]/Modules/ObjectPoolManager.cs new file mode 100644 index 0000000..01d2fe3 --- /dev/null +++ b/Convention/[Architecture]/Modules/ObjectPoolManager.cs @@ -0,0 +1,74 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Convention.Experimental.Modules +{ + public class ObjectPoolManager : PublicType.GameModule + { + public interface IPawn + { + void Release(); + } + + private readonly Dictionary> ObjectPools = new(); + private readonly Dictionary LeavePoolObjects = new(); + + public GameObject Spawn(GameObject prefab) + { + if (!ObjectPools.ContainsKey(prefab)) + { + ObjectPools[prefab] = new(); + } + var pool = ObjectPools[prefab]; + GameObject instance; + if (pool.Count > 0) + { + instance = pool.Pop(); + instance.SetActive(true); + instance.transform.SetParent(null); + } + else + { + instance = GameObject.Instantiate(prefab); + } + LeavePoolObjects[instance] = prefab; + return instance; + } + + public void BackPool(GameObject instance) + { + if(LeavePoolObjects.TryGetValue(instance,out var prefab)) + { + var releaser = instance.GetComponents(); + foreach (var r in releaser) + { + r.Release(); + } + instance.SetActive(false); + instance.transform.SetParent(ConventionUtility.Singleton.transform); + ObjectPools[prefab].Push(instance); + LeavePoolObjects.Remove(instance); + } + else + { + throw new PublicType.GameException("This object does not belong to any pool."); + } + } + + public void ClearPool(GameObject prefab) + { + if (ObjectPools.TryGetValue(prefab, out var pool)) + { + while (pool.Count > 0) + { + var instance = pool.Pop(); + GameObject.Destroy(instance); + } + } + else + { + throw new PublicType.GameException("This pool does not exist."); + } + } + } +} diff --git a/Convention/[Architecture]/Modules/ObjectPoolManager.cs.meta b/Convention/[Architecture]/Modules/ObjectPoolManager.cs.meta new file mode 100644 index 0000000..f2d1c6d --- /dev/null +++ b/Convention/[Architecture]/Modules/ObjectPoolManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 912f3c1afd07d714d83cd965f3a0f7e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: