using UniFramework.Pooling; using UnityEngine; using System.Collections.Generic; using YooAsset; namespace GFGGame { public class PrefabManager : SingletonBase { private Spawner _entitySpawner; private Dictionary poolCreated = new Dictionary(); public void Init() { // 创建游戏对象发生器 _entitySpawner = UniPooling.CreateSpawner(VersionController.DefaultPackage); } public GameObject SpawnSync(string resPath) { this.poolCreated.TryGetValue(resPath, out bool poolCreated); if (!poolCreated) { // 创建游戏对象池,销毁时间单位为秒 _entitySpawner.CreateGameObjectPoolAsync(resPath, false, 0, 1, 60); } var handle = _entitySpawner.SpawnSync(resPath); var assetReleaser = handle.GameObj.GetComponent(); if (assetReleaser == null) { assetReleaser = handle.GameObj.AddComponent(); } assetReleaser.SetSpawn(resPath, handle); return handle.GameObj; } public GameObject InstantiateSync(string resPath) { AssetOperationHandle handle = YooAssets.LoadAssetSync(resPath); GameObject gameObject = handle.InstantiateSync(); AssetReleaser assetReleaser = gameObject.AddComponent(); assetReleaser.SetRes(resPath, handle); return gameObject; } public void Restore(GameObject gameObject) { if (gameObject == null) { return; } AssetReleaser assetRestorer = gameObject.GetComponent(); if (assetRestorer != null && assetRestorer.IsSpawn) { assetRestorer.Restore(); } else { GameObject.DestroyImmediate(gameObject); } } } }