资源第二篇:bundle 的config.json 文件内容的解析

news2024/9/20 22:40:21

简介

本篇文章主要是对bundle包的核心文件config.json 的分析。config.json记录着整个bundle包的具体信息,并通过config.json 去解析整个bundle包。

bundle 目录下的文件结构

在这里插入图片描述

  1. import 存放所有的json。场景、预制体、texture2D配置等json
  2. native 存放所有的实际资源,名字是使用资源的uuid
  3. config.json 是bundle的配置信息,包含了使用到的所有资源信息等
  4. index.js 是bundle中的所有脚本合并后生成的js脚本

config.json 内容

以下内容是使用2.4.13打包结果, 调整了一下主包压缩类型后,打包出来的结果都使用uuids的数字索引代替了,不管怎么调整都打包不出来下面的内容了(bug?)。

{
  "paths": {}, //如果资源本身在bundle目录下,这里会有资源的路径,如果是主包,未使用到的资源不会打入包中
  //场景使用到的素有资源的uuid,包括场景的uuid
  "uuids": [
    "25mPg1UuhFQLAWwyCGbyp/", // test2.fire 场景的uuid
    "d5gcIrQmhPd7ttYFvz1IeF", // test2.fire 场景依赖的资源,自己包中的texture的uuid
    "ecpdLyjvZBwrvm+cedCcQy", //其他bundle中的资源
    "f7lRyGrkdLioafj1l6glWx" // test2.fire 场景依赖的资源,自己包中的texture中的spriteFrame的uuid
  ],
  "scenes": {
    "db://assets/main/test2.fire": "25mPg1UuhFQLAWwyCGbyp/" //场景的路径,场景的uuid
  },
  "redirect": ["ecpdLyjvZBwrvm+cedCcQy", 0], //重定向,如果使用了其他bundle的资源,资源的uuid会出现在这里
  "deps": ["internal"], //依赖的bundle
  /** packs  是对相同合并包的一个解析
    比如:
  **/
  "packs": {
    "09731f1b4": ["25mPg1UuhFQLAWwyCGbyp/", "f7lRyGrkdLioafj1l6glWx"] //场景依赖的资源uuid,后面的uuid是使用的spriteFrame的uuid
  },
  "name": "main", //bundle的名字
  "importBase": "import", //import 目录资源的路径
  "nativeBase": "native", //native 目录资源的路径
  "debug": true,
  "isZip": false,
  "encrypted": false, // 是否加密
  "versions": {
    // 依赖的资源,本包中import文件夹下的资源,第一个是场景的uuid(固定位置),第二个元素是版本号,后面的是资源的uuid与版本号
    "import": ["09731f1b4", "75d10", "d5gcIrQmhPd7ttYFvz1IeF", "7be92"],
    // 依赖的资源,本包中native文件夹下的资源,第一个是资源的压缩uuid,紧接这是版本号
    "native": ["d5gcIrQmhPd7ttYFvz1IeF", "2790f"]
  }
}

新的 config.json 内容

{
  //paths是资源的路径信息,key是资源的uuid,value是一个数组,第一个元素是资源的路径,后面的元素是资源的类型
  "paths": {},
  //types是资源的类型信息,paths中的资源类型是通过索引来这里的查找的
  "types": [],
  //当前包使用到的所有资源的uuid,包含场景的uuid
  "uuids": [
    "25mPg1UuhFQLAWwyCGbyp/",
    "d5gcIrQmhPd7ttYFvz1IeF",
    "edLdjA5wFPBZ6FT1VAfExX",
    "03jMiDhOFLDY594LJy1G1v",
    "41F7knMkFA/L9r3Fe/KnP6",
    "ecpdLyjvZBwrvm+cedCcQy",
    "f7lRyGrkdLioafj1l6glWx"
  ],
  //场景信息,key是场景的路径,value是uuids的索引数字 可以根据索引数字从uuids中找到uuid
  "scenes": { "db://assets/main/test2.fire": 0 },
  //重定向信息,当该包中使用了其他bundle资源时,会生成信息。每2个为一组,前一个为uuids的索引数字,后一个为deps的索引数字
  "redirect": [4, 0, 5, 1],
  //使用到其他bundle的资源时,会再次记录bundle包的名字。例如这里使用了subGame1和internal两个bundle的资源
  "deps": ["subGame1", "internal"],
  /**
  打包信息,例如这里有两个pack,每个元素的key都是import中文件名(uuid),value是该文件关联的资源的uuid数组。
  例如:
  第一个pack 中key是import中场景的json名,value是是该场景中使用到的所有资源的索引数字,通过该索引数字可以从uuids中找到uuid
  第二个pack中key是import中texture2D的json名,value是所有的texture2D都会使用该texture2D的json的索引数字,通过该索引数字可以从uuids中找到uuid
  **/
  "packs": { "064519d1c": [1, 2], "0addf2f00": [3, 0, 6] },
  "name": "main",//bundle的名字
  "importBase": "import",//import文件夹的名字
  "nativeBase": "native",//native文件夹的名字
  "debug": false,//是否是debug模式
  "isZip": false,//是否是zip压缩
  "encrypted": false,//是否是加密的
  /** 版本信息,import中的版本信息,native中的版本信息。打包勾选了MD5 Cache时,会生成版本信息。没勾选时,为空。没有versions字段时,表示没有勾选MD5 Cache。
    import中的版本信息是一个数组,每2个为一组,第一个是uuids的索引数字,第二个是版本号。这里使用的直接是import中的文件名064519dc。
    native中的版本信息是一个数组,每2个为一组,第一个是uuids的索引数字,第二个是版本号
    **/
  "versions": { "import": ["064519d1c", "b2b05", "0addf2f00", "dfe43"], "native": [1, "2790f", 2, "6b2af"] }
}

这两种不同config.json可以做一个很好的参考对比,第二种由于带有很多数字,较难理解,所以参考第一种会更容易让人去理解数字表示的意思。

打包规则的简单总结

压缩类型设置:压缩是对import目录下的json文件的操作。

  • 无压缩: 所有的json文件都独立存在
  • 默认:相同类型的会压缩到一起。

例如:spriteFrame的json会与场景的json合并到一起。texture2D的json相同的话合并成一个json,它的解析会在config.json的packs中关联,texture的json的uuid作为key,value是所有使用到该json的cc.Texture2D的uuid。

  • 合并所有json:把所有的json 合并成一个大json
    官方文档参考: 压缩类型设置

注意点

  1. main 是主包,资源在主包文件目录中,但未被静态引用,则该资源不会被打到包里。简单来说就是只会把静态引用到的资源打包进去。
    其他bundle,如果资源在bundle中,就会打入到bundle中。
  2. bundle的优先级问题:官方文档优先级
  3. 静态引用资源,会把spriteFrame的json合并到场景的json中,如果是未使用到的资源,它的json都是独立的一个文件,依然会打包到config.json 的uuids字段里。
  4. internal 内置bundle 是一个特殊的bundle,在项目加载时,第一个加载的bundle 是internal bundle,当启动游戏时,会在准备引擎阶段下载internal的effects目录和Material目录。最后才会通过bundle的api 反序列化场景数据和初始化场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分子属性梯度引导的3D分子生成扩散模型 TAGMOL - 评测

TAGMoL 是一个基于分子属性条件引导扩散的 3D 分子生成模型,适合在给定靶标蛋白质的情况下,可以生成一系列满足目标特性(分子属性,binding affinity)的候选分子。 一、背景介绍 TAGMoL 来源于新德里 Molecule AI, 以及…

ESP32 出现 failed to load RF 报错

前言 个人邮箱:zhangyixu02gmail.com 正文 周五我测试程序没有问题,板子放在桌子上就没动过了。周一过来的时候,重新烧录程序,就发现出现如下报错。最终发现是电池过放导致电池损坏功率不够,因此 RF 无法启动&#…

探寻少儿自闭症的解决之道

自闭症,又称孤独症谱系障碍,是一种广泛性发育障碍,给无数家庭带来了沉重的负担。然而,随着科学技术的不断进步和人们对自闭症认识的逐步深入,越来越多的方法和途径正在被探索出来,为自闭症的解决带来了希望…

RocketMQ 与 Spring Cloud Stream之事务消息配置

1 引言 RocketMQ的事务消息设计是为了解决分布式系统中数据一致性的问题。在分布式系统中,由于数据可能分布在不同的服务或节点上,因此需要一种机制来确保数据的最终一致性。事务消息通过引入本地事务和消息状态的关联,确保了消息的发送与本…

【什么是“Binary“二进制文件?】

“Binary”二进制文件是计算机文件的一种形式。部件文件是开发人员编写的源代码文件,还未被编译成可执行的机器代码,通常具有如.c、.cpp、.java 等扩展名。对象文件是部件文件经过编译器编译生成的中间文件,包含了部件文件的机器代码和符号表…

链表OJ题——环形链表2

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 环形链表2 题目描述:在链表有环的基础上,找出环的入口点。 二、解题思路 三、解题代码

移动端爬虫学习记录

免责声明 本文旨在探讨移动端爬虫技术的应用和挑战,仅供教育和研究用途。请确保在合法合规的框架内使用爬虫技术,遵循相关法律法规和网站的使用条款。作者不对因使用本文内容而产生的任何法律或安全问题承担责任。 1、初识移动端爬虫 学习移动端爬虫的原…

.NET 开发的高性能内网穿透工具

目录 前言 什么是NSmartProxy? 项目特点 运行原理 客户端安装 服务端安装 使用案例 项目地址 最后 前言 在许多情况下,我们需要从外部网络访问内部网络中的服务,比如家里的服务器或者公司的内部资源。这时内网穿透工具就可以帮助我们…

【吊打面试官系列-Memcached面试题】什么是二进制协议,我该关注吗?

大家好,我是锋哥。今天分享关于 【什么是二进制协议,我该关注吗?】面试题,希望对大家有帮助; 什么是二进制协议,我该关注吗? 关于二进制最好的信息当然是二进制协议规范: 1000道 互…

【AI+编程】只需1句提示词0代码生成前端展示效果

最近被Vercel发布的V0 编程效果惊艳到了, 不管是前端开发 还是立志成为全栈工程师的 同学,不可错过。 官网地址:https://v0.dev/chat/ 代码生成工具很多,不管是github copilot、阿里的通义灵码, 腾讯云的AI代码助手…

python 多进程 多线程 程序

这个纯粹为了增加理解,将很多比较好的资料进行归纳总结。 1、理论汇总 并发和并行 image.png 多进程和多线程 同步和异步 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回。 异步…

027集—CAD中批量删除多段线重复点、距离过近点——vba代码实现

cad图中多段线存在重复点、或距离过近点,可通过vba插件一键删除。 (精度可人工设定,例如精度设置0.001:小于0.001 的点视为重复点,删除此点。) 如下图: 如下图: 大量重复点和距离…

【Gaussian splatting系列学习】(三)

3DGS系列(一) 3DGS系列(二) 3DGS系列(三) 3D高斯球的颜色 基函数: 任何一个周期性函数可以分解为正弦和余弦的线性组合 球谐函数: 任何一个球面坐标的函数可以用多个球谐函数来近…

FPGA开发——在线调试工具Signal Tap的使用

一、简介 在我们进行FPGA进行开发时通常都会经历代码编写,仿真,下板验证等过程。使用FPGA进行开发的小伙伴都知道,在代码编写时往往花费不了太长的时间,下板验证更是。在开发中占绝大部分时间的是仿真,有时候编写代码只…

C++类和对象(下):初始化列表、explicit关键字、友元函数、友元类

文章目录 C类和对象9、初始化列表9.1构造函数体赋值9.2初始化列表9.3 explicit(显示)关键字 10、友元10.1友元函数10.2友元类 C类和对象 9、初始化列表 一个类的构造函数要初始化成员变量有两种方式,一种是构造函数体赋值,另一种…

【C++二分查找】2817. 限制条件下元素之间的最小绝对差

本文涉及的基础知识点 C二分查找 LeetCode2817. 限制条件下元素之间的最小绝对差 给你一个下标从 0 开始的整数数组 nums 和一个整数 x 。 请你找到数组中下标距离至少为 x 的两个元素的 差值绝对值 的 最小值 。 换言之,请你找到两个下标 i 和 j ,满…

python应用之内置hashlib库的哈希算法介绍

hashlib 是 Python 的一个内置模块,提供了像 SHA1, SHA256, MD5 等哈希算法。可以接受任意长度的字节数据作为输入,并输出一个固定长度的“哈希值”,通常用于校验数据的完整性。而且该算法是不可逆的,不能通过哈希值反算出原始数据…

zookeeper服务搭建

zookeeper服务搭建 前言1. 前置准备2. 下载和解压Zookeeper3. 配置环境变量4. 编辑Zookeeper配置文件5. 配置Zookeeper节点ID6. 配置好的Zookeeper分发到其他节点7. 启动Zookeeper集群参考博客 前言 Zookeeper是一个开源的分布式协调服务,主要用于解决分布式应用中的…

【Excal】OR 函数

语法: OR(判断条件1,判断条件2,判断体件3,****) 评优条件: 语文成绩高于90 数学成绩高于90 英语成绩高于85 物理成绩高于85 点击回车键 选中填充 回车 选中填充

echart legend 的使用及离开界面图表全局销毁

父组件 <template><AbnormalAlarmStatistics ref"abnormalAlarmStatistics" /> </template> <script setup> import {ref,reactive,computed,onMounted,getCurrentInstance,watch } from "vue";const { proxy } getCurrentInsta…