
游戏开发移动开发WebAssembly【免费下载链接】minigame-unity-webgl-transform微信小游戏Unity引擎适配器文档。项目地址https://gitcode.com/GitHub_Trending/mi/minigame-unity-webgl-transform点击查看免费下载本文围绕微信小游戏 Unity 适配器提供的「压缩纹理工具」Compressed Texture Tool展开系统讲解其诞生背景、与引擎自带压缩纹理的取舍、受支持的 Unity 版本与纹理格式、五步式接入流程、WebGL2.0 兼容性、忽略配置、首资源包优化、底层原理、常见问题排错以及可编程 API。读完本文你将能在一套微信 Unity SDK 工程中独立完成纹理按需加载改造把 Bundle 中的纹理剥离到 CDN让不同 GPU 设备按需下载可硬件解码的压缩纹理从而降低 Bundle 体积与运行时内存。为什么需要压缩纹理工具早期 Unity20182020不支持对 ASTC 纹理格式进行导出因此在移动端无法充分利用 GPU 完成硬件的解码渲染。为弥补这一缺陷微信 Unity SDK 提供了「压缩纹理按需加载」的能力工具。使用该工具可以获得两项核心增益降低 Bundle 体积资源按需加载加快游戏运行进度压缩纹理工具将纹理资源从 Bundle 中分离并单独托管因此 Bundle 体积变小有助于加快游戏运行进度被分离的纹理资源会在游戏实际使用过程中按渲染需要动态加载。有效降低内存提升渲染效率压缩后的纹理本身能节约更多内存空间对内存吃紧的游戏至关重要。工具会对同一个纹理资源生成多种不同格式的压缩纹理如 ASTC、DXT 等游戏运行时按实际设备 GPU 能力下载可被识别的压缩纹理。资源体积更小由 GPU 实现硬件解码渲染效率更高。仓库内其他文档也从侧面印证了这一点在 Design/OptimizationMemory.md 中明确指出由于 Unity 2021 之前不支持移动平台压缩纹理使用 RGBA、DXT 等格式会导致明显的 GPU 显存膨胀与运行时解压消耗同时给出两条优化路径——使用 Design/CompressedTexture.md 描述的微信压缩纹理工具最大程度减少内存与解压开销或升级引擎至 2021 使用 ASTC 压缩纹理。在 Design/RenderOptimization.md 中同样建议尽量使用压缩纹理并优先考虑 ASTC压缩比大、有多种格式可选在满足画质的前提下选择压缩比更高的格式。引擎自带压缩纹理 vs 微信压缩纹理工具如何选择对比项Unity 引擎自带压缩纹理微信小游戏压缩纹理工具版本支持Unity 2019 支持部分Unity 2020 支持部分格式Unity 2021 支持2019、2020、2021 均有版本支持格式支持Unity 2019 支持 DXT 等Unity 2020 支持 DXT、ETC但不支持 ASTCUnity 2021 支持多数DXT、ASTC、ETC 均支持按设备加载不支持支持引擎自带压缩纹理的优势在于工作流更统一ASTC 能覆盖最近 34 年的大部分机型但 PC 端不支持 ASTC依然需要解压。微信小游戏压缩纹理工具支持不同平台的自适应格式ETC2、ASTC、DXT同时纹理从 AB 包中剥离出来使得 AB 包占用内存更小。官方建议若引擎版本高于 2021可使用引擎自身的 ASTC 压缩格式移动端覆盖率较广PC 微信、微信开发者工具会软解为 RGBA32。对于重度游戏如 MMO、SLG 等内存压力大时可结合 WXAssetBundle 进一步减少 AB 包体积造成的文件内存占用。低版本引擎20182020则应使用微信 Unity SDK 的压缩纹理工具进行处理。Unity 版本支持问题与已验证版本压缩纹理工具对 Unity 2019、2020、2021 的部分版本有支持目前已知部分版本无法使用如 2021.3.x、2020.3.36 等不可用。为确保工具顺利运行建议在「年份大版本」基础上选用官方已验证可行的 Unity 版本2019.4.28f1c1、2020.3.10f1c1、2021.2.18f1c1注意使用新的 Unity 版本后需要重新构建 Bundle。仓库中的 Design/UnityVersion.md 提供了更完整的引擎能力对照可与上述建议相互印证引擎版本压缩纹理/音频能力已验证小版本2019仅 DXT不支持 ETC2/ASTC2019.4.28~2019.4.352019 InstantGame全支持 DXT/ETC2/ASTC2019.4.292020DXT/ETC2不支持 ASTC2020.3.1~2020.3.362021全支持 DXT/ETC2/ASTC2021.2.11~2021.3.332021 InstantGame全支持 DXT/ETC2/ASTC2021.2.5该文档还总结了小游戏平台压缩纹理的支持情况PC 端 DXT移动端 Android 为 ETC2/ASTC、iOS 为 ASTC并强调引擎如 20182020不支持移动端压缩纹理ETC2/ASTC时务必使用压缩纹理工具进行优化。使用说明五步接入流程请务必确保使用压缩纹理工具时导出的游戏工程来自同版本的微信 Unity SDK。任何时候当微信 Unity SDK 更新后都需要重新执行「导出游戏工程」步骤再使用同版本的压缩纹理工具完成后续操作不可混版本使用。主要执行过程如下图所示1. 安装 Node.js旧版要求新版已废弃下载并安装 Node.js 并检查环境变量是否生效。新版本已不再依赖 Node.js。2. 构建 Bundle 文件项目中若使用 Bundle 文件需先构建 AB 包。请勿开启 crc 对 Bundle 进行校验。构建前的纹理格式配置说明纹理资源的WebGL Settings的Format配置项支持列表如下Format支持情况备注R 8 / R 16 bit支持RGBA Crunched DXT5|BC3不支持RGB Crunched DXT1|BC1不支持RGBA Compressed DXT5|BC3支持RGB Compressed DXT1|BC1支持Alpha 8支持RGBA Compressed ETC2 8 bits不支持RGB Compressed ETC2 4 bits支持RGB Compressed ETC 4 bits请勿使用资源占位符专用全游戏工程请勿使用ASTC 请参考配置说明--RGB(A) Compressed BC7支持RGBA 32 bit支持ASTC 格式配置说明ASTC 是多数移动设备上游戏运行的主要纹理格式因此也是微信小游戏环境下主要使用的压缩纹理资源。在 2021 版本 Unity 纹理资源的WebGL Settings的Format配置项中工具支持识别RGB(A) Compressed ASTC 8x8、6x6、5x5、4x4 block这四种压缩格式其余格式请勿设置并且不支持 ASTC HDR 系列格式。按上述四种格式配置后最终生成的多份格式资源中ASTC 资源将保持对应的 Block Size。默认推荐使用Block Size 8x8格式4x4 最清晰但内存占用也会升高开发者应根据实际调试后的运行效果按需配置。仓库变更记录CHANGELOG.md显示工具经历了「支持 ASTC 6x6 格式」「支持 ASTC 文件读取并支持不同的块大小需 Unity2021 版本」等迭代与上述配置能力相互对应。3. 导出游戏点击微信小游戏 - 转换小游戏 - 导出WEBGL并转化为小游戏导出游戏工程。请务必注意任何时候当微信 Unity SDK 更新后均需要重新执行该步骤导出游戏工程再使用同版本的压缩纹理工具完成后续操作不可混版本使用。4. 执行压缩纹理点击微信小游戏 - 包体瘦身--压缩纹理可点击打开bundle配置面板查看识别情况并按需忽略部分不希望执行压缩纹理的 Bundle 资源点击处理资源开始处理调试模式将只生成 ASTC 格式开发者工具中使用 PNG 资源移动设备使用 ASTC 格式资源调试结束后可再次选用全量模式默认采用增量逻辑不会额外增加处理时间该步骤的处理时间因项目实际情况而异执行完成后请留意控制台提示信息不可存在多个警告消息。5. 上传 CDN执行完上述步骤后将webgl-min目录中的资源上传至 CDN 服务器中如 Assets 目录、StreamingAssets 目录、xxx.webgl.data.unityweb.bin.txt等文件。WebGL2.0 支持说明Beta微信纹理压缩目前已支持 WebGL2.0 模式下的 Gamma 与 Linear 颜色空间渲染但仅支持 2019、2020、2021 三个年限中部分版本。其中 2019 必须使用 Unity 与微信合作的Instant Game 版本详见 Design/UnityVersion.md 中「基于2019429」小节其余年限跟随微信纹理压缩支持版本进行选择。该能力仍在兼容一些特殊的应用场景开发者使用后需要进行详细的真机测试。仓库的 CHANGELOG.md 也记录了相关迭代例如「微信纹理压缩支持WebGL2.0」「微信压缩纹理工具对WebGL2.0 Gamma Linear模式兼容Beta」。忽略配置说明对于微信压缩纹理工具处理后部分资源渲染效果较差、甚至无法处理的情况开发者可以使用忽略处理能力将对应资源保留在 AB 包内。从微信压缩纹理 - 打开配置面板进入配置页默认情况下配置页面会扫描当前项目所有可被处理的 AB 包资源对 AB 包的忽略直接在右侧忽略勾选项选中后保存即可。有时忽略整个 AB 包并不是好策略若仅是 AB 包内部分纹理资源渲染不佳此时若已经执行过微信压缩纹理能力扫描的资源将包含 AB 包内的单个纹理资源信息可通过右上角搜索栏快速检索对应纹理资源进行忽略设置保存后只需再次执行即可。若此前从未执行过微信压缩纹理需要点击解包纹理按钮等待完全解包后可进行纹理的配置操作。该过程等同执行微信压缩纹理的「阶段一」大型工程可能花费一些时间。首资源包优化说明位于微信小游戏转换工具面板 - 首资源包优化的能力隶属于微信压缩纹理工具的扩展范畴。该功能能够将首资源包中 Unity Editor 默认打包但游戏从未使用过的资源剔除从而再次降低首资源包体积。该功能可以在不开启微信压缩纹理工具的情况下单独使用。默认情况下无需开发者手动配置工具已能够识别多数 Unity Editor 的无用资源但该能力仍允许开发者手动进行资源选择来自定义剔除。请注意手动配置时需要自行判断资源是否为游戏中的必要资源不慎剔除将导致游戏渲染异常。新版本异常回退说明微信纹理压缩升级了全新的内核程序尽管发布前对多数 Unity 年限版本与常见机型进行了测试目前仍处于初期测试使用阶段。若使用期间存在异常并影响正常游戏发布可前往仓库 issues 提出问题并使用**上一代稳定版微信纹理压缩包旧**导入工程后采用旧版本完成游戏发布。旧版本使用指引可参阅旧版本文档Design/CompressedTexture.md 的历史版本。原理解释微信纹理压缩工具的底层原理是将 Bundle 内纹理资源分离将资源指针替换至原 Bundle 内分离出的资源被处理成多种不同 GPU 所支持的纹理格式托管至 CDN 中。游戏实际运行时将劫持渲染根据资源指针以及当前设备 GPU 所支持的纹理格式进行远程加载成功加载后立即上传 GPU随后从系统内存释放。这样的工作原理一方面实现了不同硬件所支持的纹理格式按需加载另一方面又避免了 Bundle 全部加载至内存时占用过多的系统内存。经过微信小游戏团队测试该工具能够降低游戏的运行时内存不同游戏之间因使用场景、纹理差异降低值各不相同。从仓库代码层面看压缩纹理能力涉及的面板配置项集中在 Design/AssetDescription.md 的CompressTexture:章节包括字段类型说明halfSizebool已废弃useDXT5bool是否开启 PC 压缩纹理bundleSuffixstring已废弃parallelWithBundleint已废弃bundleDirstring自定义 AB 包目录路径dstMinDirstring压缩纹理产物输出目录debugModebool是否开启仅 ASTC 模式forcebool是否强制重新执行其中debugMode仅 ASTC 模式与force强制重新执行对应使用说明中的「调试模式/全量模式」与增量逻辑dstMinDir对应webgl-min输出目录bundleDir对应 API 中的独立 AB 包目录参数。此外该文档还记录了工具处理相关的运行时配置如texturesHashLength处理的尾部 hash 长度用于识别缓存、texturesPath纹理 CDN 拼接路径、needCacheTextures是否缓存处理的贴图资源等字段。工具的多次迭代细节可在 CHANGELOG.md 中查看例如「修复资源量较大时替换过程卡死」「增加进度条」「对 .svn .git 目录忽略」「支持特殊字符资源」「优化增量逻辑」「新增 API 供开发者调用接入自定义自动转化能力」等。QA常见问题与排错1. 生成的纹理太大PC 端预览时展示的是 PNG 图片会比较大手机上用的是带txt后缀的文件如astc.txt这些文件压缩率很高。正式环境 CDN 一定要开启Brotli 或 Gzip压缩这样加载时纹理就会很小、速度快很多建议优先使用Brotli。仓库的 CHANGELOG.md 中也有「压缩纹理回退使用 png 时也支持缓存逻辑」的记录与回退策略相关。2. 资源上传至 CDN 的注意事项上传至 CDN 时请注意按二进制传输强制storebinary如果按文本传输加载回来的图片会变成黑色。3. 非 4 倍数资源的处理底层逻辑移动设备中大多数使用 ASTC 作为主要纹理资源格式ASTC不受纹理资源高宽影响因此非 4 倍数底层逻辑处理并不会对移动设备上的表现有差异。而 DXT 格式是 PC 小游戏中的主要纹理资源格式该格式要求高宽必须为 4 的倍数。微信纹理压缩工具在资源处理过程中识别资源能否被正确压缩处理并在渲染期间做了兜底的渲染策略在 PC 表现上若资源支持以 DXT 格式则采用 DXT 渲染否则遵循兜底策略其格式优先级为ASTC、ETC2、DXT、PNG最差情况使用 PNG 格式渲染。仓库变更记录也提到「微信压缩纹理优化支持 ASTC 使用非 4 倍数尺寸」与上述说明对应。4. Node.js 异常处理压缩纹理工具执行需要依赖 Node.js 解释器。若执行前已安装 Node.js 但执行时提示未找到需手动填入本机 Node.js 路径请将 Node.js 的绝对路径填写至Assets/WX-WASM-SDK/Editor/TextureEditor/WXAssetsTextTools.cs文件的NODE_PATH变量中。若开发者使用 API 调用执行可对该变量进行直接赋值。5. 分离纹理后各自单独下载是否会增加下载开销不会。标准的 CDN 服务支持 HTTP2 协议看似多条的请求背后系统仅会创建 1 条 TCP/IP 链路因此并不会增加额外的请求开销。宏观来说在开启 CDN 压缩的情况下游戏所需资源下载的总量没变、链接次数没变却享受了不同设备按需使用纹理格式的能力。6. MacOS 系统执行报错 System.Drawing.GDIPlus threw an exception原因是 Unity 自带 Mono 配置错误了libgdiplus.dylib文件路径。有两种解决方案选择其一即可解决方案一本地安装官方 Mono 后在代码中配置微信压缩纹理工具用于执行的 Mono 解释器完整路径// 在合理的时机进行路径配置 #if UNITY_EDITOR_OSX WXAssetsTextTools.MONO_PATH /usr/bin/mono; // 本机安装的 Mono 解释器完整路径 #endif解决方案二先下载 tools/libgdiplus.dylib 文件该文件已随本仓库提供将其放在 UnityEditor 的/Applications/Unity/Hub/Editor/{$Unity_Editor_Version}/Unity.app/Contents/MonoBleedingEdge/lib/libgdiplus.dylib路径下并编辑/Applications/Unity/Hub/Editor/{$Unity_Editor_Version}/Unity.app/Contents/MonoBleedingEdge/etc/mono/config文件将target .../libgdiplus.dylib路径内容均变更为下载文件的存放完整路径重启 Unity Editor 即可。微信压缩纹理 API 介绍为方便开发者构建个性化的工程导出能力微信压缩纹理工具提供了相应的 API 调用接口开发者可以在游戏内自助构建游戏导出脚本完成发布上传前的自动化操作。提示为简化调用忽略 AB、工程路径等数据均来自面板配置此处不提供相应参数传入面板配置后将被存盘记录无需每次执行前进行配置。WXAssetsTextTools.CompressText(...)void WXAssetsTextTools.CompressText(Actionbool, string complete null, string bundleDir null, string outBundleDir null, bool debug false, bool force false)说明执行微信压缩纹理流程该函数为异步函数。对应【包体瘦身--压缩纹理】面板中「处理资源」按钮的执行其中小游戏工程导出目录路径来自【转换小游戏】面板中的配置。参数参数类型说明completeAction执行结束的回调函数形参1(bool) 返回执行是否成功形参2(string) 返回执行错误时的错误提示信息bundleDirstring可缺省若存在独立的 AB 包目录则此处填写目录的绝对路径outBundleDirstring可缺省若填写 bundleDir 则不可省略独立 AB 包处理后的输出目录debugbool可缺省默认全量生成(false)true 时仅生成 ASTC 格式纹理forcebool可缺省默认遵循增量逻辑(false)true 时将强制生成已生成资源仍然生成并覆盖示例WXAssetsTextTools.CompressText((result, msg) { if (result) { Debug.Log(微信压缩纹理转换完成); }else{ Debug.LogError(msg); } }, null, null, false, false);WXAssetsTextTools.GetAssetBundles(...)void WXAssetsTextTools.GetAssetBundles(Actionstring[] callback null, string bundleDir null)说明获取微信压缩纹理工具所能扫描到的符合条件的 AB 包路径数组。相同参数情况下所扫描到的资源列表即为实际可被执行处理的资源。参数参数类型说明callbackAction扫描结束的回调函数形参(string[]) 返回扫描到的 AB 包资源绝对路径bundleDirstring可缺省若存在独立的 AB 包目录则此处填写目录的绝对路径小结微信小游戏压缩纹理工具解决了低版本 Unity 无法导出 ASTC、移动端无法利用 GPU 硬件解码的问题核心价值在于纹理与 Bundle 分离 多格式按设备加载 GPU 硬件解码。接入时需把握三个关键点使用与微信 Unity SDK 同版本的已验证 Unity 版本并重新构建 Bundle按格式支持表正确配置WebGL Settings的FormatASTC 推荐 8x8 Block执行完成后将webgl-min目录以二进制方式上传 CDN 并开启 Brotli/Gzip 压缩。对于构建自动化需求的团队WXAssetsTextTools.CompressText与WXAssetsTextTools.GetAssetBundles两个 API 可直接嵌入导出流水线。赞分享游戏开发移动开发WebAssembly【免费下载链接】minigame-unity-webgl-transform微信小游戏Unity引擎适配器文档。项目地址https://gitcode.com/GitHub_Trending/mi/minigame-unity-webgl-transform点击查看免费下载相关推荐86.3%纹理压缩率Sprite Dicing让你的游戏包体瞬间瘦身86.3%纹理压缩率Sprite Dicing让你的游戏包体瞬间瘦身 你是否正面临游戏包体过大的困扰特别是当项目中包含大量相似但不完全相同的精灵图SpriParadeDB深度解析PostgreSQL原生搜索引擎的架构设计与性能对决ParadeDB深度解析PostgreSQL原生搜索引擎的架构设计与性能对决 在当今数据驱动时代全文搜索功能已成为现代应用的核心需求。当技术架构师面临为Po数据库搜索引擎全文检索向量数据库后端掌握MySQL监控的艺术mysqld_exporter从入门到精通指南掌握MySQL监控的艺术mysqld_exporter从入门到精通指南 在当今数据驱动的数字时代 MySQL数据库监控 已成为确保业务连续性和系统稳定性的关运维上一篇RuView Homecore metaharnessWASM-first 的 Homecore 开发入口、只读 MCP 边界与共享知识库下一篇mise tasks graph 实战指南可视化 Monorepo 工作区项目依赖图实验特性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考