Unity资源热更-Addressables(二)

接着上一篇继续写,我这边做了一个简易的加载界面 ,从资源服加载,加载完成之后 进登录 直接看效果吧
在这里插入图片描述
这是CDN 资源
第一次进去 游戏
在这里插入图片描述
下载资源的log 输出
在这里插入图片描述
这是登录界面,现在我改一下登录界面 直接在登录界面加两个icon 在这里插入图片描述
然后打一下热更, 选择
在这里插入图片描述
Update a Previous Build ,然后选择对应平台的bin 文件 ,然后这三个文件都要上传资源服 ,其中是catalog 的hash 和json ,还有对应的热更包
在这里插入图片描述
最终打开之前的apk
在这里插入图片描述
有更新 也能正常看到你改之后的效果 ,OK 这就是Addressables 的基本加载流程,直接上代码如下

 private Slider slider;

 GameObject loadingPanel;
 void Start()
 {
     var handle = Addressables.LoadAssetAsync<GameObject>("Assets/Art/Prefab/LoadingPanel.prefab");
     handle.Completed += (obj) =>
     {
         loadingPanel= Instantiate<GameObject>(obj.Result, this.transform);
         slider = transform.Find("LoadingPanel(Clone)/Slider").GetComponent<Slider>();
         slider.value = 0;
         // 默认自动执行一次更新检测
         StartCoroutine(DoUpdateAddressadble());

     };
     DontDestroyOnLoad(this);
 }

 IEnumerator DoUpdateAddressadble()
 {
     AsyncOperationHandle<IResourceLocator> initHandle = Addressables.InitializeAsync();
     yield return initHandle;

     // 检测更新
     var checkHandle = Addressables.CheckForCatalogUpdates(false);
     yield return checkHandle;
     if (checkHandle.Status != AsyncOperationStatus.Succeeded)
     {
         Debug.LogError($"CheckForCatalogUpdates Error{checkHandle.OperationException.ToString()}");
         yield break;
     }
     if (checkHandle.Result.Count > 0)
     {
         var updateHandle = Addressables.UpdateCatalogs(checkHandle.Result, false);
         yield return updateHandle;

         if (updateHandle.Status != AsyncOperationStatus.Succeeded)
         {
             Debug.LogError($"UpdateCatalogs Error{updateHandle.OperationException.ToString()}");
             yield break;
         }

         // 更新列表迭代器
         List<IResourceLocator> locators = updateHandle.Result;
         foreach (var locator in locators)
         {
             List<object> keys = new List<object>();
             foreach (var key in locator.Keys)
             {
                 if (key is string) 
                 {
                       keys.Add(key);
                 }
             }
             var sizeHandle = Addressables.GetDownloadSizeAsync(keys);
             yield return sizeHandle;
             if (sizeHandle.Status != AsyncOperationStatus.Succeeded)
             {
                 Debug.LogError($"GetDownloadSizeAsync Error{sizeHandle.OperationException.ToString()}");
                 yield break;
             }

             long totalDownloadSize = sizeHandle.Result;
             Debug.Log("download size : " + totalDownloadSize);
             if (totalDownloadSize > 0)
             {
                 // 下载
                 var downloadHandle = Addressables.DownloadDependenciesAsync(keys, Addressables.MergeMode.Union);
                 while (!downloadHandle.IsDone)
                 {
                     if (downloadHandle.Status == AsyncOperationStatus.Failed)
                     {
                         Debug.LogError($"DownloadDependenciesAsync Error{downloadHandle.OperationException.ToString()}");
                         yield break;
                     }
                     // 下载进度
                     float percentage = downloadHandle.PercentComplete;
                     Debug.Log($"已下载: {percentage}");
                     slider.value = percentage;
                     yield return null;
                 }
                 if (downloadHandle.Status == AsyncOperationStatus.Succeeded)
                 {
                     Debug.Log("下载完毕!");
                     slider.value = 1f;
                 }
             }
             else
             {
                 Debug.Log("无下载");
                 slider.value = 1f;
             }
         }
     }
     else
     {
         Debug.Log("没有检测到更新!");
         slider.value = 1f;
     }

     // 进游戏
     EnterGame();
 }
 // 进游戏
 void EnterGame()
 {
     var handle = Addressables.LoadAssetAsync<GameObject>("Assets/Art/Prefab/LoginPanel.prefab");
     handle.Completed += (obj) =>
     {
         loadingPanel.SetActive(false);
         Instantiate<GameObject>(obj.Result, this.transform);

     };
 }

OK Addressables 就先告一段落,接下来,我会在Addressables 里面加 HybridCLR ,大家敬请期待,有什么不对的地方 欢迎大家来指正哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值