laya3dfilemerge

1.0.4 • Public • Published

laya3dfilemerge

介绍

将laya从u3d中导出的描述文件(lh,ls,lmat)等,合并为一个json文件,并且在laya中,自己解析,使得加载小文件的数量降到最低,ls也许比较大,可以自行决定是否合并进json文件。

更新列表

安装教程

  1. npm i laya3dfilemerge -g

使用说明

  1. 在想要生成二进制文件的目录中(描述文件的主目录:bin/res/d3/assets/xxx/...,我们可以选择在d3目录下),shift+右键,选择在此处打开PowerShell窗口
  2. 输入:laya3dm -e lh,lmat,ls [-o 输出的目录] [-p 需要的前缀],即可将本目录及子目录的描述文件都合并了(推荐使用此方式) 注意那个 -e,输出的目录可以不写,就是输出到原地,输出前缀也可以不写,这个前缀指的是生成的文件中,key的前缀,因为在本目录下,也许需要的是父级目录的前缀。
// 示例
laya3dm -e lh,lmat -i D:\work\xxx\bin\res\d3 -o D:\work\xxx\bin\res\d3 -p res/d3 -n d3file.json -d false

-e 需要合并的文件扩展名列表 (必需参数)
-i 输入目录,没有就默认是当前打开powershell的目录 (最好有)
-o 输出目录,没有就默认是输入目录
-p 写文件时,每个key前加的前缀,不需要就不用加这个参数 (看情况自己加)
-n 最终输出文件名,默认是: d3file.json
-d 是否删除需要合并的文件,不需要删除就不用加这个参数(慎用)
-ot 需要读取和导出的文件类型,默认json,二进制为bin
-s 文件大小限制,单位为KB,即:小于这个数值的文件才合并


// 得到的结果 d3file.bin(其实是个json文件)
{
    "res/d3/zidansmoke.lh":"{\"version\":\"xxx\",...}",
    ....
}

// 使用方法:
// 注意,一定要先加载d3file.json文件才行。
let res = [{ url: "res/d3/d3file.json", type: Laya.Loader.JSON }]
Laya.loader.load(res, Laya.Handler.create(this, () => {
    let d3res = Laya.loader.getRes('res/d3/d3file.json')
    for (let key in d3res) {
        let url = Laya.URL.formatURL(key);
        if (!Laya.Loader.preLoadedMap[url]) {
            let str = d3res[key];
            let obj = JSON.parse(str);
            // 这里要将数据放入预加载的hash中,其他代码不需要修改
            Laya.Loader.preLoadedMap[url] = obj;
        }
    }
    // todo 这里再去加载其他的3d资源
})


  1. 输入:laya3dm -e lani,lm [-ot 输出的格式] [-s 限制多小的文件合并(单位KB)],即可将本目录及子目录的二进制文件都合并了 注意那个 -e-ot的参数可以不写,默认为json格式,如果是二进制,传bin
// 示例
laya3dm -e lani -i D:\work\xxx\bin\res\d3 -ot bin -p res/d3 -n d3lani.bin -s 40
laya3dm -e lm -i D:\logs\d3 -e lm -n d3lm.bin -ot bin -p res/d3 -s 20

-e 需要合并的文件扩展名列表 (必需参数)
-d 这个需要慎用

// 加载完毕bin文件后,需要进行以下处理
function pasred3bin(d3bin){
    let b = new Laya.Byte(d3bin)
    let len = b.readUint32()
    let str = b.readUTFBytes(len)
    let descJson = JSON.parse(str);
    let oldPos = b.pos;

    for (let key in descJson) {
        let url = Laya.URL.formatURL(key);
        if (!Laya.Loader.preLoadedMap[url]) {
            let obj = descJson[key];
            b.pos = obj.start + oldPos;
            let buf = b.readArrayBuffer(obj.end + oldPos)
            Laya.Loader.preLoadedMap[url] = buf;
            Laya.Loader.preLoadedMap[key] = buf;
        }
    }
}

Package Sidebar

Install

npm i laya3dfilemerge

Weekly Downloads

0

Version

1.0.4

License

ISC

Unpacked Size

25.2 kB

Total Files

10

Last publish

Collaborators

  • wmtiger