当前位置:网站首页>Addressable pre Download
Addressable pre Download
2022-07-07 05:17:00 【Si Junli】
Update and download scripts
No explanation, the notes are very clear
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.AddressableAssets.ResourceLocators;
public class CheckUpdateAndDownload
{
private static CheckUpdateAndDownload _instance;
public static CheckUpdateAndDownload instance
{
get
{
if (_instance==null)_instance=new CheckUpdateAndDownload();
return _instance;
}
}
private float progress;
private Action completeAct;
private Action<float> sliderProgressAct;
private Action<long, long> sizeProgressAct;
private CheckUpdateAndDownload()
{
}
/// <summary>
/// Start updating
/// </summary>
public async void StartUpdate(Action<float> progressAct=null,Action completeAct=null)
{
this.sliderProgressAct = progressAct;
this.completeAct = completeAct;
List<object> updateObjs=await GetUpdateObjs();
if (updateObjs==null||updateObjs.Count==0)return;
long size = await GetUpdateSize(updateObjs);
if (size<=0)return;
await Downloads(updateObjs);
}
/// <summary>
/// Get updatable files
/// </summary>
/// <returns></returns>
async Task<List<object>> GetUpdateObjs()
{
// Check the updatable directory
AsyncOperationHandle<List<string>> catalogs=Addressables.CheckForCatalogUpdates(false);
await catalogs.Task;
int catalogCount = catalogs.Result.Count;
if (catalogCount == 0)
{
Addressables.Release(catalogs);
return null;
}
// Update updatable directory
AsyncOperationHandle<List<IResourceLocator>> newCatalogs=Addressables.UpdateCatalogs(catalogs.Result,false);
await newCatalogs.Task;
// All updated directories
List<IResourceLocator> locators = newCatalogs.Result;
// List of documents to be updated
List<object> updateObjs = new List<object>();
// Traverse all directories , And take out all the file information in each directory and add it to the update list
foreach (var locator in locators) updateObjs.AddRange(locator.Keys);
Addressables.Release(catalogs);
Addressables.Release(newCatalogs);
return updateObjs;
}
/// <summary>
/// Get the updatable file size
/// </summary>
/// <param name="updateObjs"> All updatable files </param>
/// <returns></returns>
async Task<long> GetUpdateSize(List<object> updateObjs)
{
var sizeHandle= Addressables.GetDownloadSizeAsync(updateObjs);
await sizeHandle.Task;
long updateSize = sizeHandle.Result;
Addressables.Release(sizeHandle);
return updateSize;
}
/// <summary>
/// Update file
/// </summary>
/// <param name="updateObjs"> List of updatable files </param>
/// <returns></returns>
async Task Downloads(List<object> updateObjs)
{
var clearCacheHandle=Addressables.ClearDependencyCacheAsync(updateObjs,true);
await clearCacheHandle.Task;
AsyncOperationHandle downloadHandle=Addressables.DownloadDependenciesAsync(updateObjs,Addressables.MergeMode.Union,false);
progress = 0;
while (downloadHandle.Status == AsyncOperationStatus.None)
{
float percentageComplete = downloadHandle.GetDownloadStatus().Percent;
if (percentageComplete > progress * 1.1) // Report at most every 10% or so
{
progress = percentageComplete; // More accurate %
sliderProgressAct?.Invoke(progress);
}
await Task.Delay(100);
}
completeAct?.Invoke();
Addressables.Release(downloadHandle);
}
}
Use ( test )
public class Test : MonoBehaviour
{
private void Start()
{
CheckUpdateAndDownload.instance.StartUpdate((progress) =>
{
Debug.Log(" speed of progress :"+progress);
},()=>Debug.Log(" Download the end "));
}
}
边栏推荐
- Dbsync adds support for mongodb and ES
- 高数中值定理总结
- 【问道】编译原理
- Leetcode (417) -- Pacific Atlantic current problem
- Analysis -- MySQL statement execution process & MySQL architecture
- Liste des hôtes d'inventaire dans ansible (je vous souhaite des fleurs et de la romance sans fin)
- 磁盘监控相关命令
- Techniques d'utilisation de sublime
- Array initialization of local variables
- Longest palindrome substring (dynamic programming)
猜你喜欢
QT simple layout box model with spring
ThinkPHP关联预载入with
Dynamically generate tables
window定时计划任务
Weebly mobile website editor mobile browsing New Era
The sooner you understand the four rules of life, the more blessed you will be
使用知云阅读器翻译统计遗传学书籍
Autowired注解用于List时的现象解析
Complete code of C language neural network and its meaning
Inventory host list in ansible (I wish you countless flowers and romance)
随机推荐
AttributeError: module ‘torch._ C‘ has no attribute ‘_ cuda_ setDevice‘
【二叉树】二叉树寻路
Longest common subsequence (LCS) (dynamic programming, recursive)
What changes will PMP certification bring?
使用知云阅读器翻译统计遗传学书籍
【PHP SPL笔记】
Function pointer and pointer function in C language
Leetcode minimum difference in student scores
3.基金的类型
Dynamically generate tables
Y58. Chapter III kubernetes from entry to proficiency - continuous integration and deployment (Sany)
2. Overview of securities investment funds
线程池的创建与使用
Creation and use of thread pool
Ansible overview and module explanation (you just passed today, but yesterday came to your face)
[QT] custom control loading
Flask project uses flask socketio exception: typeerror: function() argument 1 must be code, not str
LabVIEW在打开一个新的引用,提示内存已满
AOSP ~Binder 通信原理 (一) - 概要
How to design API interface and realize unified format return?