压缩格式常用的Resource文件夹是什么?怎么解决?

压缩格式常用的Resource文件夹是什么?怎么解决?

常用的压缩格式有两种:

LZMA的特性可以防止封装体过大。 生成共享资源时,会生成场景文件:level0、level1、资源文件sharedassets0.assets等。

LZ4的特点是对封装尺寸比较宽松。 可以直接读取对应的资源,而不需要读取整个包。 共享资源生成时,会直接生成单包文件data.unity3d。

资源包装

在Unity3d中unity resources文件夹,需要打包的资源可以分为三类:

放置在非特殊文件夹中的资源unity resources文件夹开发学习,如果没有被引用的话,不会被打包(比如一个Prefab引用了这个资源,并且这个Prefab放置在场景中,而这个场景放置在Scene In Build中,它们都被引用了)资源并将被打包。)

Resource文件夹的作用是让用户动态加载资源。 这意味着引擎不知道某个资源是否会被引用,因此该文件夹中的所有内容都会被打包。 而如果Resource文件过多,会增加编译时序列化的运行时间,增加启动时索引算法的构建,导致程序启动时出现卡顿、无响应等问题。 您应该尽量避免将艺术资源存储在此文件夹中。 建议只保存一些配置文件之类的。

AssetBundle是目前Unity官方唯一的资源分发解决方案。 我个人感觉它是一个半成品,使用起来极其困难。 在Unity 5.x之后的版本中略有改进,但还远远不足以成为现代的资源分配解决方案。 你需要花费大量精力处理资源依赖、包粒度、内存管理和资源重复等问题。

ab包的名称允许使用/,并且会以文件夹的形式存放在打包的目录中。 例如,如果资源的ab名称为res/a.pck,则打包后的资源a.pck将位于res文件夹中。 我们可以写一个工具,将所有的ab包名、资产名、guid、包名等信息存储到一张表中,将该表标记为ab包,启动时读取该表创建索引,然后就可以使用如下算法散列可用于使用路径查找 ab 包和资源的具体位置。

大多数情况下,ab 包不会只包含一个包。 用户可以自行控制每个包的大小,因此可以直接使用LZMA压缩算法。

个人推荐AssetBundle打包流程:

在Assets目录下新建resdb等文件夹,作为ab打包的文件夹。 所有资源都不能引用 resdb 之外的任何资源。 如果它们引用 resdb 外部的资源,则资源可能会打包到共享中。 Resource包或Resource资源包导致资源被重复打包,只有文件夹内的资源才能相互引用。 在热更新的商业手游开发中氛围,大多数情况下都是使用Xml、Sqlite等作为本地数据库和配置文件来存储资源引用关系。 资源名称在运行时读取,然后动态搜索和绑定。 报价,记录如下:

编号:int

描述:字符串

图片:字符串

1001

恢复药水

resdb/potion.png

需要时,使用字符串动态搜索资源。 这样做的原因是,如果资源发生变化,依赖于该资源的其他资源可能会受到影响。

建议打包后的ab包文件夹放在游戏根目录下,与exe同目录,或者放在StreamingAssets下。

它可以嵌入包装或AB包装中。

将所有资源存储到resdb中并标记ab名称后,我编写了一个工具,可以扫描以resdb/开头的ab包,然后创建一个带有实际资产对象引用的本地映射表,该映射表存储在Resources文件夹中。 ,这样resdb的所有资源都会在Resources文件夹中有引用。 在打包项目时,resdb会像普通资源一样被打包为通用共享资源,而不是Resources资源,因为Resources文件夹只存储资产引用和Index等信息,用于支持用户使用路径索引对象。 资源实际上并不存在于Resources文件夹中,因此不会造成编译时间增加和启动滞后、无响应等问题。

当项目越来越大时,发布可以切换到AB打包模式,并删除之前在Resources文件夹中生成的本地索引表。 这样resdb就会断开,不会被打包成共享资源,造成和AB包冲突。 内部资源重复。

文章来源:http://www.imxqy.com/gamedev/unity/respck.html