PrefabManager.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using UniFramework.Pooling;
  2. using UnityEngine;
  3. using YooAsset;
  4. using System.Threading.Tasks;
  5. namespace GFGGame
  6. {
  7. public class PrefabManager : SingletonBase<PrefabManager>
  8. {
  9. private Spawner _entitySpawner;
  10. public void Init()
  11. {
  12. // 创建游戏对象发生器
  13. _entitySpawner = UniPooling.CreateSpawner(VersionController.DefaultPackage);
  14. }
  15. public GameObject SpawnSync(string resPath)
  16. {
  17. if (!_entitySpawner.IsGameObjectPoolExisted(resPath))
  18. {
  19. // 创建游戏对象池,销毁时间单位为秒
  20. _entitySpawner.CreateGameObjectPoolSync(resPath, false, 0, 1, 60);
  21. }
  22. var handle = _entitySpawner.SpawnSync(resPath);
  23. AssetReleaserHelper.AddReleaserToSpawnObj(handle.GameObj, resPath, handle);
  24. return handle.GameObj;
  25. }
  26. public async Task<GameObject> SpawnASync(string resPath)
  27. {
  28. if (!_entitySpawner.IsGameObjectPoolExisted(resPath))
  29. {
  30. // 创建游戏对象池,销毁时间单位为秒
  31. _entitySpawner.CreateGameObjectPoolSync(resPath, false, 0, 1, 60);
  32. }
  33. var handle = _entitySpawner.SpawnAsync(resPath);
  34. await handle.Task;
  35. AssetReleaserHelper.AddReleaserToSpawnObj(handle.GameObj, resPath, handle);
  36. return handle.GameObj;
  37. }
  38. public GameObject InstantiateSync(string resPath)
  39. {
  40. AssetOperationHandle handle = YooAssets.LoadAssetSync<GameObject>(resPath);
  41. GameObject gameObject = handle.InstantiateSync();
  42. AssetReleaserHelper.AddReleaserToInstantiateObj(gameObject, resPath, handle);
  43. return gameObject;
  44. }
  45. public void Restore(GameObject gameObject)
  46. {
  47. if (gameObject == null)
  48. {
  49. return;
  50. }
  51. AssetReleaser assetRestorer = gameObject.GetComponent<AssetReleaser>();
  52. if (assetRestorer != null && assetRestorer.IsSpawn)
  53. {
  54. assetRestorer.Restore();
  55. }
  56. else
  57. {
  58. GameObject.DestroyImmediate(gameObject);
  59. }
  60. }
  61. }
  62. }