123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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;
-
- public Dictionary<string, AssetHandle> handles = new Dictionary<string, AssetHandle>();
-
- public Dictionary<string,AllAssetsHandle>allHandles=new Dictionary<string,AllAssetsHandle>();
-
- public Dictionary<string, SceneHandle> sceneHandles = new Dictionary<string, SceneHandle>();
- private void Awake()
- {
- Instance = this;
- package = YooAssets.GetPackage("DefaultPackage");
-
-
-
-
-
-
- }
-
-
-
-
-
-
- public async UniTask<T> LoadAsset<T>(string location) where T : Object
- {
- AssetHandle handler;
- if (!handles.TryGetValue(location,out handler))
- {
- handler = package.LoadAssetAsync<T>(location);
- await handler.Task;
- handles.Add(location, handler);
- }
- return (T)((AssetHandle)handler).AssetObject;
- }
-
-
-
-
-
-
- public async UniTask<Dictionary<string, T>> LoadAllAsset<T>(string location) where T : Object
- {
- AllAssetsHandle handler;
- if (!allHandles.TryGetValue(location, out handler))
- {
- handler = package.LoadAllAssetsAsync<T>(location);
- await handler.Task;
- allHandles.Add(location, handler);
- }
- Dictionary<string, T> dictionary = new Dictionary<string, T>();
- 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;
- }
- }
- }
|