YooAssetManager.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Cysharp.Threading.Tasks;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. using YooAsset;
  7. public class YooAssetManager : MonoBehaviour
  8. {
  9. public static YooAssetManager Instance { get; private set; }
  10. /// <summary> ×ÊÔ´°ü </summary>
  11. public ResourcePackage package;
  12. /// <summary> Asset¾ä±ú </summary>
  13. public Dictionary<string, AssetHandle> handles = new Dictionary<string, AssetHandle>();
  14. /// <summary> AllAsset¾ä±ú </summary>
  15. public Dictionary<string,AllAssetsHandle>allHandles=new Dictionary<string,AllAssetsHandle>();
  16. /// <summary> SceneAsset¾ä±ú </summary>
  17. public Dictionary<string, SceneHandle> sceneHandles = new Dictionary<string, SceneHandle>();
  18. /// <summary> ³¡¾°¼ÓÔØ½ø¶È </summary>
  19. public SceneHandle sceneLoading;
  20. private async void Awake()
  21. {
  22. Instance = this;
  23. package = YooAssets.GetPackage("DefaultPackage");
  24. //await this.gameObject.AddComponent<Boot>().InitYooAsset();
  25. //package = YooAssets.GetPackage("DefaultPackage");
  26. //var ui = await LoadAsset<GameObject>("DlgFaceBuildUI");
  27. //var go =GameObject.Instantiate(ui);
  28. //go.transform.SetParent(GameObject.Find("Canvas").transform);
  29. //go.transform.localPosition = Vector3.zero;
  30. }
  31. /// <summary>
  32. /// ¼ÓÔØ×ÊÔ´
  33. /// </summary>
  34. /// <typeparam name="T"></typeparam>
  35. /// <param name="location"></param>
  36. /// <returns></returns>
  37. public async UniTask<T> LoadAsset<T>(string location) where T : Object
  38. {
  39. AssetHandle handler;
  40. if (!handles.TryGetValue(location,out handler))
  41. {
  42. handler = package.LoadAssetAsync<T>(location);
  43. await handler.Task;
  44. handles.Add(location, handler);
  45. }
  46. return (T)((AssetHandle)handler).AssetObject;
  47. }
  48. /// <summary>
  49. /// ¼ÓÔØËùÓÐ×ÊÔ´
  50. /// </summary>
  51. /// <typeparam name="T"></typeparam>
  52. /// <param name="location"></param>
  53. /// <returns></returns>
  54. public async UniTask<Dictionary<string, T>> LoadAllAsset<T>(string location) where T : Object
  55. {
  56. AllAssetsHandle handler;
  57. if (!allHandles.TryGetValue(location, out handler))
  58. {
  59. handler = package.LoadAllAssetsAsync<T>(location);
  60. await handler.Task;
  61. allHandles.Add(location, handler);
  62. }
  63. Dictionary<string, T> dictionary = new Dictionary<string, T>();
  64. foreach (UnityEngine.Object assetObj in ((AllAssetsHandle)handler).AllAssetObjects)
  65. {
  66. T t = assetObj as T;
  67. dictionary.Add(t.name, t);
  68. }
  69. return dictionary;
  70. }
  71. /// <summary>
  72. /// ¼ÓÔØ³¡¾°
  73. /// </summary>
  74. /// <param name="location"></param>
  75. /// <returns></returns>
  76. public async UniTask LoadScene(string location)
  77. {
  78. if (handles.ContainsKey(location))
  79. return;
  80. bool activeOnLoad = false;
  81. SceneHandle handle = package.LoadSceneAsync(location, LoadSceneMode.Additive, activeOnLoad);
  82. sceneLoading = handle;
  83. sceneHandles.Add(location, handle);
  84. await handle.Task;
  85. }
  86. public async UniTask ActivateScene(SceneHandle handle)
  87. {
  88. if (handle.Progress >= 0.9)
  89. {
  90. handle.ActivateScene();
  91. await handle.Task;
  92. }
  93. }
  94. }