[0]laya-zip游戏加载提速库(Laya3.0版本适配更新)

前言
laya-zip是一个用于laya引擎加载zip资源的扩展包,提供了友好和简单的API接口。与LayaTree一样,都使用Big AOP大切面理论进行设计,能够让游戏的加载速度提升约300%。效果
资源包体资源大小8.4M,压缩包体4.3MB情况下,:
使用laya-zip下加载多个资源的耗时784毫秒

使用普通资源加载耗时2798毫秒
demo用例
https://github.com/lear315/layazip-demo使用方法Laya 2.x及以下版本
下载扩展包laya-zip
解压后,将laya-zip.js文件放入项目bin/libs/文件夹下,将laya-zip.d.ts文件放入项目libs/文件夹下,在bin/index.js文件中加载bundle.js前加入一行:
[code]loadLib("libs/laya-zip.js")
[/code]
在Main.ts中Laya初始化后加入:
[code]LayaZip.Init();
[/code]Laya 3.x版本
下载扩展包laya-zip
解压后,将laya-zip.js和laya-zip.d.ts文件放入项目中,IDE中勾选并应用

在Main.ts中 onStart()中加入:
[code]LayaZip.Init();
// 3.0版本下建议配置为1
LayaZip.BasePathMode = 1;
[/code]
需要注意的一点是: 在Laya 3.x版本下制作资源zip包时,使用的是构建发布后的release文件夹下的资源进行压缩,因为3.X的IDE在构建发布时会对fbx,cubemap,shader等类型的文件进行预解压/解析处理。加载
将所需资源压缩成zip(需要确认的一点是,压缩的zip中目录结构不要多包一层,切记)
根据约定,在默认情况下只会加载zip包一级目录下的资源(如模型、场景、图片、JSON等)及其关联资源。
比如预制件资源.lh、场景资源.ls,在解压加载主文件时,会自动解压加载其关联的贴图、动画、模型等资源文件,不需要手动去加载关联文件。

例子: 如上述的压缩包当放置路径为bin目录下的:res/3d/Player.zip,则使用方法为
[code]// Laya 2.x及以下版本
Laya.loader.create([{ url: "res/3d/Player.zip", type: LayaZip.ZIP}])
[/code]
[code]// Laya3.x版本
Laya.loader.load([{ url: "res/3d/Player.zip", type: LayaZip.ZIP}])
[/code]
加载资源使用:
[code]// Laya 2.x及以下版本
let player1 = Laya.loader.getRes("res/3d/Player/AngelMale01.lh").clone();
[/code]
[code]// Laya3.x版本
let player1 = Laya.loader.getRes("res/3d/Player/AngelMale01.lh").create();
[/code]高级加载选项(指定文件)Laya 2.x及以下版本
如果只需要加载zip包中的部分资源,或者资源路径在多级目录下。可以在constructParams中进行配置,来加载指定文件资源,其中配置的路径为压缩包内的相对路径。
[code]// Laya 2.x及以下版本
Laya.loader.create([{ url: "res/3d/Player.zip", type: LayaZip.ZIP, constructParams:["Folder1/Player1.lh","Folder2/Player2.lh"]}],
Laya.Handler.create(this, () => {
let player1 = Laya.loader.getRes("res/3d/Player/Folder1/Player1.lh").clone();
let player2 = Laya.loader.getRes("res/3d/Player/Folder2/Player2.lh").clone();
}));
[/code]Laya 3.x版本
暂时未开放API加载选项(指定目录)Laya 2.x及以下版本
如果需要加载zip包中的指定目录下的资源。可以在propertyParams中进行配置,来加载指定目录下的所有资源(仅在该目录,不会递归到其子目录),其中配置的路径为压缩包内的相对路径,并且以/结尾。
[code]// Laya 2.x及以下版本
Laya.loader.create([{ url: "res/3d/Player.zip", type: LayaZip.ZIP, propertyParams:["Folder1/"]}],
Laya.Handler.create(this, () => {
let player1 = Laya.loader.getRes("res/3d/Player/Folder1/Player1.lh").clone();
let player2 = Laya.loader.getRes("res/3d/Player/Folder1/Player2.lh").clone();
}));
[/code]Laya 3.x版本
暂时未开放API加载选项(懒人模式)
懒人加载模式默认关闭。如果不想在加载时配置指定资源,可以全局开启懒人加载模式.
[code]LayaZip.LazyMode = true;
[/code]
开启懒人加载模式后,会自动加载压缩包下所有的.lh和.ls类型资源,无论它们是在一级目录还是多级目录下面。但是如果包内资源文件较多,这种模式无疑是耗时且不必要的。
如果你想指定懒人加载的类型,那么你还可以自己进行修改,但是在明晰laya的加载策略前,随意修改它是不合时宜的:
[code]// 默认值
LayaZip.LazyFliter = ["lh", "ls"];
[/code]解压基础路径
压缩包会默认解析到其所在的相对路径下,但有时候你并不想要这么做,为此我提供了解压基础路径模式的配置
[code]// 默认值
LayaZip.BasePathMode = 0;
[/code]
如res/3d/Player.zip压缩包解析后,其一级目录下的Player1.lh加载路径在不同模式下:
  • 模式0 解析到其所在的相对路径下

[code]Laya.loader.getRes("res/3d/Player/Player1.lh")
[/code]
  • 模式1 解析到其所在的相对路径的同级目录下:
    [code]Laya.loader.getRes("res/3d/Player1.lh")
    [/code]
  • 模式2

解析到根目录下:
[code]Laya.loader.getRes("Player1.lh")
[/code]调试
为了根据具体项目来定制压缩包的颗粒度(打几个包,资源怎么分包),laya-zip提供了调试模式,默认会在控制台打印各个阶段的耗时。
其中
  • Download ZIP: 下载zip包的耗时
  • UnZip Dir: 解压zip包目录结构的耗时
  • Parse Files: 解压zip包的文件总个数和耗时
  • Load Zip Total:从压缩包下载前到资源加载完毕后的总耗时

如果需要关闭调试可以:
[code]// Turn off time-consuming printing
LayaZip.DeBug = false
[/code]缓存
小游戏平台缓存zip文件开关(默认开启)
[code]LayaZip.CacheZIPFile = true
[/code]跳过
自动跳过已加载的zip文件开关(默认开启)
[code]LayaZip.AutoSkipZip = true
[/code]
手动清理已加载记录,一般情况下不需要清理。系统会自动释放。
[code]// 清理所有
LayaZip.clearCacheZip()

// 清理指定zip记录
LayaZip.clearCacheZip(url)
[/code]版本
查看版本
[code]LayaZip.Version
[/code]其他
如果有意见或建议,请反馈到:
QQ群: 200482074
已邀请:

小高

赞同来自:

感谢大神分享!

要回复问题请先

商务合作
商务合作