分步加载
所有文档

          AR开放平台

          分步加载

          简介

          体验AR时需从云端拉取对应场景包至本地,整个过程因硬件配置及网速不同而耗时不同,尤其在资源包较大时耗时较久用户体验并不好。我们建议在资源包大于15M时使用分步加载,减少加载时间提高用户体验。顾名思义,分步加载即将原来一次加载的资源分为两部分加载。

          Sample case: 代码下载

          接口及应用

          一、素材包结构更改

          1、导入新的scripts文件,scripts文件夹中需包含batch_loader.lua文件。
          2、将res资源下的文件拆分为第一批加载的资源和第二批加载(新建一个ar文件夹)的资源,结构如下图所示,第一批加载的资源为进入AR场景前下载以及加载的资源,第二批加载的资源为进度条loading时下载以及加载的资源。

          分步加载1

          二、分步加载json配置文件

          1、res文件夹下的json文件需要根据素材包分出的资源在每个节点下标出当前节点加载的批次batchNum(相机节点除外),当前只开放了0和1,batchNum为0表示第一批加载资源,为1表示第二批加载资源。节点下添加字段如下图所示。

          三、分步加载lua配置文件

           -- default.lua文件
           
          app.on_loading_finish = function()
                  scene.on_batch_load_finish = function(id ,ret)
                       onBatchLoadFinish(id,ret)
                  end
          
                  scene.on_batch_load_progress_update = function(id, progress)
                      onBatchLoadProgressUpdate(id,progress)
                  end
          
                  scene:load_batch(1)
          end

          1、 scene.on_batch_load_finish = function(id ,ret)接口设定了分步加载的加载结果回调,回调后对获取到的状态进行判断,全部资源是否加载成功在onBatchLoadFinish(id,ret)函数中加以判断,加载成功则继续展现场景中的内容,加载不成功会有一个消息回调,提示是否重新加载场景。

          onBatchLoadFinish(id,ret)函数的代码逻辑如下:

          function onBatchLoadFinish(id, ret)
              if (id == 1 and ret == -1) then
                   BatchLoader.send_download_retry_msg()
                   return
              end
          
              if (id == 1 and ret == 0) then
                  batch_one_finish = true
                  ARLOG("加载完成")
                  ...
              end
          end

          2、scene.on_batch_load_progress_update = function(id, progress)设定了分步加载回调的加载进度回调。 onBatchLoadProgressUpdate(id,progress)函数设定了进度条的显示。

          function onBatchLoadProgressUpdate(id, progress)
              ARLOG("onBatchLoadProgressUpdate ".. id .." "..progress)
          
              if (id == 1) then
                  updateprogress_1(progress)
              end
          end
          
          function updateprogress_1(progress)
          
          -- 更新进度条
              local pathProgress = "res/framePicture/10001409/"..tostring(progress)..".png"
              scene.progressBar:replace_texture(pathProgress, "uDiffuseTexture")
          
          end

          3、scene:load_batch(1)接口指定下载并加载第二批资源

          • 资源加载完成(即进度条加载至100%)后才可在lua里对第二批资源进行操作
          上一篇
          场景开发工具及示例代码
          下一篇
          AR场景开发专题(编辑器)