using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressableManager : MonoSingleton<AddressableManager>
{
private List<object> _updateKeys = new List<object>();
private void Start()
{
//UpdateCatalog();
}
public async void UpdateCatalog()
{
Debug.Log("初始化Addressable");
var init = Addressables.InitializeAsync();//开始连接服务器初始化,检测是否连接服务器成功!
await init.Task;
//开始连接服务器检查更新
var handle = Addressables.CheckForCatalogUpdates(false);
await handle.Task;
Debug.Log("check catalog status " + handle.Status);
if (handle.Status == AsyncOperationStatus.Succeeded)
{
List<string> catalogs = handle.Result;
if (catalogs != null && catalogs.Count > 0)
{
//foreach (var catalog in catalogs)
//{
// Debug.Log("catalog " + catalog);
//}
Debug.Log("download catalog start ");
var updateHandle = Addressables.UpdateCatalogs(catalogs, false);
await updateHandle.Task;
foreach (var item in updateHandle.Result)
{
//Debug.Log("catalog result " + item.LocatorId);
//foreach (var key in item.Keys)
//{
// Debug.Log("catalog key " + key);
//}
_updateKeys.AddRange(item.Keys);
}
Debug.Log("download catalog finish " + updateHandle.Status);
DownLoad();
}
else
{
Debug.Log("dont need update catalogs");
}
}
Addressables.Release(handle);
}
public IEnumerator DownAssetImpl()
{
//foreach(var v in _updateKeys)
//{
// Debug.LogError("v:" + v.ToString());
//}
var downloadsize = Addressables.GetDownloadSizeAsync(_updateKeys);
yield return downloadsize;
Debug.Log("start download size :" + downloadsize.Result);
if (downloadsize.Result > 0)
{
var download = Addressables.DownloadDependenciesAsync(_updateKeys, Addressables.MergeMode.Union);
yield return download;
//await download.Task;
//Debug.Log("download result type " + download.Result.GetType());
foreach (var item in download.Result as List<UnityEngine.ResourceManagement.ResourceProviders.IAssetBundleResource>)
{
var ab = item.GetAssetBundle();
//Debug.Log("ab name " + ab.name);
foreach (var name in ab.GetAllAssetNames())
{
Debug.Log("asset name " + name);
}
}
Addressables.Release(download);
}
Addressables.Release(downloadsize);
}
public void DownLoad()
{
StartCoroutine(DownAssetImpl());
}
public async void DownloadAsset(object assetName,Action action)
{
var downloadsize = Addressables.GetDownloadSizeAsync(assetName);
await downloadsize.Task;
Debug.Log("start download size :" + downloadsize.Result);
if (downloadsize.Result > 0)
{
var download = Addressables.DownloadDependenciesAsync(assetName);
await download.Task;
foreach (var item in download.Result as List<UnityEngine.ResourceManagement.ResourceProviders.IAssetBundleResource>)
{
var ab = item.GetAssetBundle();
//Debug.Log("ab name " + ab.name);
foreach (var name in ab.GetAllAssetNames())
{
Debug.Log("asset name " + name);
}
}
Addressables.Release(download);
}
Addressables.Release(downloadsize);
action();
}
}
addressable 提前下载,指定下载资源脚本
最新推荐文章于 2024-11-21 09:40:09 发布