当前位置:网站首页>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 "));
}
}
边栏推荐
- 想要选择一些部门优先使用 OKR, 应该如何选择试点部门?
- Function pointer and pointer function in C language
- How to design API interface and realize unified format return?
- Weebly mobile website editor mobile browsing New Era
- App embedded H5 --- iPhone soft keyboard blocks input text
- 《二》标签
- Knapsack problem unrelated to profit (depth first search)
- Timer create timer
- [PHP SPL notes]
- DBSync新增对MongoDB、ES的支持
猜你喜欢
随机推荐
Disk monitoring related commands
NiO related knowledge points (I)
想要选择一些部门优先使用 OKR, 应该如何选择试点部门?
LinkedBlockingQueue源码分析-初始化
Ansible中的inventory主機清單(預祝你我有數不盡的鮮花和浪漫)
NPDP产品经理认证,到底是何方神圣?
DBSync新增对MongoDB、ES的支持
U++4 接口 学习笔记
接口间调用为什么要用json、fastjson怎么赋值的、fastjson [email protected]映射关系问题
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
Sublime tips
Longest common subsequence (LCS) (dynamic programming, recursive)
IMS data channel concept of 5g vonr+
Leetcode (417) -- Pacific Atlantic current problem
If you‘re running pod install manually, make sure flutter pub get is executed first.
精彩速递|腾讯云数据库6月刊
高手勿进!写给初中级程序员以及还在大学修炼的“准程序员”的成长秘籍
[ArcGIS tutorial] thematic map production - population density distribution map - population density analysis
ASP. Net MVC - resource cannot be found error - asp Net MVC – Resource Cannot be found error
线程池的创建与使用


![[736. LISP syntax parsing]](/img/62/5e2aeec150096aa3fd81025d146255.png)






