using Cysharp.Threading.Tasks; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; using YooAsset; public class YooAssetManager : MonoBehaviour { public static YooAssetManager Instance { get; private set; } /// 资源包 public ResourcePackage package; /// Asset句柄 public Dictionary handles = new Dictionary(); /// AllAsset句柄 public DictionaryallHandles=new Dictionary(); /// SceneAsset句柄 public Dictionary sceneHandles = new Dictionary(); private void Awake() { Instance = this; package = YooAssets.GetPackage("DefaultPackage"); //await this.gameObject.AddComponent().InitYooAsset(); //package = YooAssets.GetPackage("DefaultPackage"); //var ui = await LoadAsset("DlgFaceBuildUI"); //var go =GameObject.Instantiate(ui); //go.transform.SetParent(GameObject.Find("Canvas").transform); //go.transform.localPosition = Vector3.zero; } /// /// 加载资源 /// /// /// /// public async UniTask LoadAsset(string location) where T : Object { AssetHandle handler; if (!handles.TryGetValue(location,out handler)) { handler = package.LoadAssetAsync(location); await handler.Task; handles.Add(location, handler); } return (T)((AssetHandle)handler).AssetObject; } /// /// 加载所有资源 /// /// /// /// public async UniTask> LoadAllAsset(string location) where T : Object { AllAssetsHandle handler; if (!allHandles.TryGetValue(location, out handler)) { handler = package.LoadAllAssetsAsync(location); await handler.Task; allHandles.Add(location, handler); } Dictionary dictionary = new Dictionary(); foreach (UnityEngine.Object assetObj in ((AllAssetsHandle)handler).AllAssetObjects) { T t = assetObj as T; dictionary.Add(t.name, t); } return dictionary; } /// /// 加载场景 /// /// /// public async UniTask LoadScene(string location) { if (handles.ContainsKey(location)) return; bool activeOnLoad = true; SceneHandle handle = package.LoadSceneAsync(location, LoadSceneMode.Additive, activeOnLoad); ScenesManager.Instance.handle = handle; sceneHandles.Add(location, handle); await handle.Task; } public async UniTask ActivateScene(SceneHandle handle) { if (handle.Progress >= 0.9) { handle.ActivateScene(); await handle.Task; } } }