1. 上架前的链路确认:微信小游戏不是“改个导出格式”那么简单
先泼一盆冷水:很多人以为Unity做了二三十年,导出个微信小游戏不就是换个平台的事,实际动手才发现完全不是那么回事。微信小游戏在技术栈上走的是“Unity引擎渲染 + 微信适配层 + WebGL/底层适配”的混合路线,最终产物不是exe也不是apk,而是一包经过转换的代码、资源和运行时配置,交付给微信客户端去解析执行。链路不通畅,后面所有步骤都会连环炸。
先说结论:如果你手里的项目是一个依赖高版本图形API、大量使用第三方原生插件、重度使用多线程或Socket通信的Unity项目,那么“直接转换”这条路基本走不通,需要提前做技术妥协和裁剪。相反,如果你的项目是休闲类、棋牌类、模拟经营类这些中度游戏,Unity开发,想吃到微信生态的流量红利,这条路完全可行,而且现在官方工具链已经相当成熟。
这个流程适合谁来学?三类人最需要:
- 手里有Unity项目,想快速上微信小游戏试试水的独立开发者或小团队;
- 公司要求把已有的App游戏“多端复用”到微信生态的技术负责人;
- 准备从零做一款微信小游戏但对整条交付链路完全没有概念的策划或新人。
1.1 先搞懂微信小游戏的运行边界
需要真实理解微信小游戏和原生App游戏这几个关键差异:
- 运行环境受限:微信小游戏跑在微信客户端提供的宿主环境里,底层是浏览器内核加微信自研适配层。Unity的输出会被转换为小游戏可执行的代码包,不是直接在显卡驱动上跑。这意味着很多原生API、GPU高级特性都要绕道走。
- 包体尺寸有硬门槛:主包(代码+首场景资源)有明确的体积要求,具体限制会在后文详细讲。超出限制就要做代码分包和资源远程化,这是微信小游戏开发区别于原生Unity开发最痛的一点。
- 平台能力由微信“转发”:登录、支付、分享、录屏、振动、排行榜这些能力,Unity原生没有,必须通过微信提供的开放数据域和JS接口去调。代码结构上需要额外接入适配层。
明白了这三个边界,后面做的每一步决策都有了依据。接下来直接进入实操链路。
1.2 环境准备清单:版本匹配是第一个大坑
这部分值得单独说,因为我见过太多人在第一步就卡住,或者因为版本不匹配导致转换后白屏、黑屏、贴图全紫。
我推荐的最低配置组合(实测稳定,2024年至今一直在用):
| 组件 | 推荐版本或要求 | 说明 |
|---|---|---|
| Unity编辑器 | 2021.3 LTS 或 2022.3 LTS | 太老的版本对微信小游戏适配插件支持差;2023、Unity 6新版本虽然也可以,但插件生态和社区踩坑经验还不够成熟,求稳优先LTS |
| 微信小游戏适配插件 | 从Unity资源商店或官方GitHub获取,建议用最新稳定版 | 官方一直在更新,旧版本对Unity新版兼容性差 |
| 微信开发者工具 | 稳定版(当前一般用1.06.x以上) | 必须从微信官方渠道下载,并登录绑定了小程序AppID的微信号 |
| 小程序AppID | 已认证的小游戏类目AppID | 个人主体和企业主体限制不同,后面细讲 |
| 操作系统 | Windows 10/11 或 macOS 均可 | 打包工具跨平台,但建议和最终服务器部署环境一致,减少不必要变量 |
| 基础库版本 | 在微信开发者工具详情面板里设置为2.30+ | 太低的基础库不支持部分新Adapter接口,会导致运行时异常 |
提示:如果安装Unity Hub时遇到“安装失败:验证失败”,大概率是网络问题或Hub缓存问题。先去网络设置,关闭代理,然后删除Hub安装缓存后重试;也可以直接下载Unity编辑器离线安装包手动安装,绕过Hub,这个办法在大多数情况下都能救场。
1.3 账号与类目:个人主体和企业主体的差别
微信小游戏的AppID申请在微信公众平台(mp.weixin.qq.com)完成,选择“小游戏”类目即可。
这里有个很多人不知道的坑:
- 个人主体可以注册小游戏,但很多接口权限受限(比如支付、部分社交能力),而且类目选择很窄。如果你的游戏涉及虚拟支付、道具内购,审核会按“虚拟支付”类目处理,个人主体基本没戏。
- 企业主体走正常通道,但需要营业执照和相关资质,尤其是涉及内容出版的时候,版号问题会卡到很多团队。休闲类、工具类、创意类相对好过。
建议在动工之前就把主体和类目定下来,不要等到打包完成才去申请AppID,那会白白浪费几天时间。
2. Unity工程侧的打包准备:这一步决定你后面要返工多少次
现在正式进入Unity工程内部。这个阶段的目标只有一个:让Unity工程产出一个能被微信工具链接受、并能在手机浏览器和微信环境里稳定跑起来的构建产物。
2.1 安装转换插件:官方适配插件 + 手动配置
微信官方提供了一个“微信小游戏开发”插件(WX-WASM-SDK,常被称作Minigame适配插件),你可以在Unity资源商店搜索“WeChat Mini Game”,或者在腾讯官方文档里找到安装指引。
这个插件的本质是什么?它做了三件事:
- 把Unity的C#脚本编译逻辑适配到小游戏宿主环境,提供加载、生命周期、输入、音频等桥接层;
- 提供“一键构建”菜单,导出微信开发者工具能直接打开的工程目录;
- 生成
game.js、game.json等微信小游戏必须的入口和配置文件。
安装完成后,Unity菜单栏会出现微信小游戏/构建相关选项。如果菜单栏没有出现,确认你的Unity版本是否满足插件要求,另外有些插件版本要求在Assets/Plugins下手动放适配文件,这一步去看官方文档,不同版本差异比较大。
2.2 Player Settings必须改的选项
这是整个流程里最容易被忽略也最容易炸的环节。对照下面的清单逐一检查:
Scripting Backend
- 必须选IL2CPP。微信小游戏环境对Mono运行时支持很差,用Mono打出来的包要么直接白屏,要么运行到某个模块就崩溃。IL2CPP可以把C#转成C++再编译成WASM(WebAssembly),跑得更稳、性能更好。
API Compatibility Level
- 建议选.NET Standard 2.1或.NET Framework 4.x,取决于项目用的第三方库。如果项目用了
System.Reflection、System.IO、System.Net里的一些较新API,Standard 2.1空间更大;老库强制依赖4.x就只有选4.x再加额外适配。
Strip Engine Code
- 建议开启,能明显减小代码包体。但要注意:开了之后需要对所有“反射”场景做保护处理,否则运行时会出现“TypeLoadException”或方法找不到。哪里用了反射,就把对应的类型和程序集加进link.xml的preserve列表。
Graphics API
- 微信小游戏底层走的是WebGL,Unity导出时会自动转换。但如果你在Player Settings里强行锁了Vulkan或DirectX,会导致构建出来的内容无法被小游戏环境识别。建议关闭“Auto Graphics API”,只保留OpenGL ES 3.0/WebGL 2.0对应的兼容选项,某些场景再保留OpenGL ES 2.0作为降级。
Managed Stripping Level
- 建议Medium或Low。开太高会把一些必要的生命周期方法和消息回调裁掉,运行时特别容易出现
MissingMethodException。这也是很多项目在微信工具里一启动就报错的原因之一。
Other Settings里的Target Device
- 微信小游戏不用区分iOS和Android,统一按默认即可。但Bundle Identifier(包名)不能乱写,要和你之后在微信后台配置的AppID、业务域名保持逻辑一致,否则运行时会因为签名校验、资源校验不通过而报错。
注意:改完Player Settings之后,建议执行一次
Assets -> Reimport All,把编译缓存全部刷新。很多时候改了设置但没进构建,某些序列化配置还是旧的,导致构建产物没有带上新配置。
2.3 脚本兼容性:Unity工程的“技术债”在这里爆发
这一步基本决定了一个项目能不能顺利上架。常见的问题集中在:
- 线程和协程:微信小游戏环境是单线程模型为主,
System.Threading.Thread和Thread.Sleep在小游戏宿主里会严重卡顿甚至崩溃。如果项目有用到多线程处理网络、寻路、计算,必须改成Unity的协程或Job System方案。 - 网络请求:UnityWebRequest在小游戏环境可用,但底层的证书校验、DNS解析,在小游戏宿主里走的是微信提供的桥接能力,域名必须是HTTPS,而且要在微信后台配置request合法域名。开发阶段可以不开校验,但审核上架前必须配好。
- 文件IO:
System.IO.File在小游戏环境不可用,因为宿主不允许随意读写本地文件。Unity提供的Application.persistentDataPath在小游戏里指向的是微信的存储目录,读写方式也要遵守微信的文件系统接口。存档、配置、热更文件,都要统一走微信的存储API。 - 反射和动态代码生成:
Assembly.Load、ILRuntime这类方案在小游戏宿主里基本不可用,或者需要做深度定制。日常反射如果极少量,可以用规则配置规避;如果项目重度依赖热更和反射,建议直接放弃小游戏方向,或者重构。 - Unity的Android/iOS原生插件:这些插件不能在微信小游戏环境运行,接口调用时要么报
DllNotFoundException,要么直接崩溃。需要把所有原生功能都通过消息通道转发到JS层实现。
2.4 资源压缩与纹理处理:贴图紫红色就是典型的“格式不支持”
微信小游戏运行在移动WebGL环境中,支持的纹理格式有限,尤其是iOS的高端机和新版Android的WebGL实现,对纹理格式要求比原生更苛刻。
项目里最常见的异常就是整体或者部分UI变成紫红色、粉红色,这就是纹理格式不兼容的直接表现。
解决办法:
- 在Unity里,UI贴图和场景贴图的Format统一设置为ASTC 6x6(iOS和主流Android都在WebGL里支持ASTC),或者使用兼容性更强的ETC2 + Alpha组合。
- 不要使用
.psd分层贴图直接拖进场景,构建之前全部转成PNG或TGA,并让Unity生成压缩格式,不要保留未压缩。 - 图集打包建议用Unity自带的Sprite Atlas,既减少DrawCall又能让纹理格式统一控制。
- 关闭Texture Streaming(纹理串流)功能,微信小游戏环境对这个功能的支持不完整,开了之后可能导致贴图加载不出来。
这里还顺带提一个和纹理相关的内存话题:粒子特效在小游戏环境里很容易成为内存杀手。我实测过一个活动场景里加了十几个带材质实例化的粒子系统,瞬间把内存顶到200MB以上。处理方式是:粒子用材质实例池,资源包加载后只保留必要实例,并且在离开场景时手动调用ParticleSystem.Clear()和Resources.UnloadUnusedAssets(),能有效缓解“粒子特效内存泄露”的问题。
3. 构建出包与微信开发者工具首跑:从代码到可预览产物
3.1 一键构建的具体操作
在Unity菜单栏找到微信小游戏/构建,点击后会弹出配置面板。这里的核心配置项:
- AppID:填入你申请的小游戏AppID,构建产物里会自动写入到
game.json。 - 游戏资源路径:可选“本地打包”或“远程资源”。本地打包适合首跑调试,远程资源适合正式上架,后面细讲。
- 开发/正式模式:DV(开发版)还是RV(正式版)。开发模式不校验域名,正式模式会校验。
配置完成后,点击“导出”。插件会在你指定的输出目录生成一个完整的微信小游戏工程,结构大概长这样:
output/ ├── game.js # 入口JS,加载Unity产出的wasm和js ├── game.json # 小游戏配置(AppID、版本、分包声明等) ├── assets/ # Unity打包出来的资源文件 ├── wasm/ # 编译好的WebAssembly运行时代码 └── 微信开发者工具需要导入的路径提示:Unity构建时IL2CPP编译耗时较长,首次构建可能10分钟以上,这属于正常现象,不是死机。建议打开Unity Build日志确认进度,避免重复构建浪费时间。
3.2 主包体积限制与分包策略
这一步是微信小游戏和原生Unity最显著的区别,也是最多团队崩溃的地方。
微信小游戏的体积限制核心是这样:
- 主包(代码包)有明确大小限制,官方历史上是4MB以内,后续可能调整;超出就要做分包。
- 首包(启动时需要加载的所有内容)同样有限制,超出就需要把非关键资源放到远程服务器。
所以构建完成后,第一件事就是检查assets目录的大小。如果超过限制,必须做资源远程化。
做法分两步:
第一步,代码分包:把游戏逻辑拆成几个子包,启动场景相关的代码留在主包,其他模块(战斗、活动、商店等)在运行到对应功能时才动态加载子包。微信小游戏的分包机制通过game.json里的subpackages字段声明,Unity插件也支持配置分包。
第二步,资源远程化:把UI、场景、预制体、音频、AssetBundle等大文件上传到自己的CDN或者对象存储,运行时通过Unity的AssetBundle加载器从远程拉取。这一步要注意的是,微信要求所有加载域名必须是HTTPS且在小程序后台配置了合法域名。
这里推荐的实践是:
- 主包只保留启动场景、加载界面、核心框架代码,整个包控制在2MB以内;
- 美术资源全部走AssetBundle远程加载,典型复用场景(头像、字体、公共UI组件)做预下载和缓存;
- 用微信的本地缓存能力,把常用资源缓存到本地,避免每次启动都重新下载。
3.3 使用微信开发者工具打开工程
构建完成后,打开微信开发者工具,选择“导入项目”,定位到刚才的output目录,填入AppID,点导入。
导入成功后会看到小游戏模拟器界面。点击编译,如果一切正常,你会看到Unity的启动画面和游戏场景。
但如果这里出了任何问题(白屏、报错、资源加载失败),不要慌,先打开开发者工具的控制台,看报错信息。多数情况下问题就出在:
WASM编译失败:检查Unity构建时是否选择了正确的IL2CPP,以及wasm文件是否完整;game.js里报Cannot read property of undefined:多半是Unity构建的JS桥接文件和插件版本不匹配;- 资源加载失败:检查
assets目录和加载路径大小写,Windows和macOS文件系统大小写敏感不一致,也会导致微信工具里找不到资源。
这一步的经验是:先在开发者工具里把功能流程完整跑一遍,再上真机预览。开发者工具的模拟器环境和真机还是有一些差距,但大方向的性能和渲染问题能提前暴露一大半。
4. 真机调试与常见的运行时问题
模拟器里跑通了,不代表真机没问题。微信小游戏涉及大量真实的渲染、网络、存储和兼容性环境差异,这一步是上架前必须经历的检验。
4.1 真机预览和调试入口
在微信开发者工具里,点“预览”会生成一个二维码,手机扫码后即可在微信里打开小游戏。注意:
- 真机调试需要手机和电脑在同一局域网,而且开发工具版本要匹配;
- 手机扫码预览后,打开的是开发版,不会走正式发布入口;
- 真机模式下,所有的网络请求、微信API调用都走真实环境,开发阶段的“不校验域名”选项在这里无效,如果不配置合法域名,所有请求都会直接失败。
真机调试最常见的问题包括:
- 界面比例不对:小游戏的屏幕适配和微信胶囊按钮的关系需要额外处理,推荐用Unity的
Game View模拟微信小游戏的分辨率。常见的适配方式是竖屏固定宽度,横屏固定高度。 - 输入法弹窗:如果游戏里有TextField输入,微信的键盘回调时机和Unity输入框不是一一对应的,需要做桥接处理。
- 性能掉帧:WebGL渲染在低端Android手机上的表现比iOS差很多,特别是粒子、全屏特效、高分辨率贴图,需要做分层性能配置。
4.2 域名白名单与服务器准备
正式环境里,所有网络请求(包括UnityWebRequest、AssetBundle.LoadFromURL、图片下载等)的域名,都必须在小程序后台的“开发管理 -> 开发设置 -> 服务器域名”里配置,且必须满足:
- 全部使用HTTPS,证书有效且不跨域;
- 域名不能是IP,必须是备案过的域名;
- request域名可以独立配置,downloadFile域名和socket域名分开配。
我踩过一个挺典型的坑:AssetBundle加载的CDN域名和API接口域名不在同一个域名配置里,导致开发工具里一切正常,真机上所有资源下载失败。后来把downloadFile合法域名和request合法域名分开填,问题立刻解决了。
注意:微信目前的合法域名配置是按小程序维度生效的,而且启用后有一个漫长的生效期(有版本说配置修改后需要发版)。所以建议在开发阶段就把域名配置好,不要等到提审前才亡羊补牢。
4.3 运行时的“灵异”问题:多半是代码裁剪和生命周期
跑起来之后如果出现“偶发崩溃”“某个功能在真机可用但在模拟器打不开”“方法找不到”这类问题,八成和IL2CPP的代码裁剪有关系。
这类问题有个通用排查手法:
- 在Unity里开启
Development Build和Script Debugging,日志输出到微信开发者工具的Console; - 查看崩溃或报错时具体的异常类型,是
NotSupportedException还是MissingMethodException; - 如果是裁剪问题,在
link.xml里把相关程序集和类型显式保留。
另外一个容易忽略的坑是MonoBehaviour生命周期和场景切换。小游戏环境下部分事件回调会被宿主定时器打断,特别是OnApplicationFocus、OnApplicationPause这些回调在WebGL里语义和原生不同,如果在这些回调里做复杂逻辑,很容易在切换后台时崩掉。稳妥的做法是:在这些回调里只做轻量状态标记,不做UI和资源操作。
5. 提审上架:从开发版到审核通过的完整过程
终于走到这一步了。但打印、打包、预览全通只是“完成了90%”,剩下的10%是审核和上架,反而卡住了大部分团队。
5.1 提交审核前的清单
提审前,至少确认下面这些项全部完成,否则大概率被拒:
- 隐私政策:除非你的游戏完全不上传任何用户数据,否则小程序后台必须配置隐私保护指引,并在小游戏里提供用户协议和隐私政策入口。
- 用户协议:建议在启动场景或登录页面显眼位置展示,默认勾选同意。
- 版本号管理:微信后台的版本号和
game.json里的version字段要一致。建议在每个发布版本里做好日志记录,方便审核被拒时定位是哪一版。 - 测试账号:如果有登录、支付环节,要提供测试账号和测试说明,否则审核人员无法进入游戏。
- 敏感内容检查:游戏里的文字、图片、音频、角色形象都必须自查,避免第三方内容侵权和违规元素。
- 性能基线:审核员会在低端机上测试,如果峰值内存超过300MB或者明显卡顿,大概率被打回。
5.2 提审流程与审核时限
在微信公众平台后台,进入“版本管理”,点击“提交审核”,选择你刚才在开发者工具里上传的开发版,填写版本描述,提交。
审核一般1~7天不等。休闲类小游戏通常比较快,但涉及支付、社交、分享等能力的游戏,审核员会逐项验证,时间会更长。
审核过程中千万不要做这些事:
- 不要重复提交多个版本,那样会打乱审核队列;
- 不要在审核过程中修改后台关键配置(域名、类目、主体信息),会导致审核被重置;
- 不要在代码里留测试入口、隐藏开关、内测奖励等,审核员会发现并据此判断是否存在违规。
5.3 审核被拒的常见原因与对策
我把实际遇到过和被朋友团队踩过的被拒原因列一下,按概率排序:
| 被拒原因 | 具体表现 | 对策 |
|---|---|---|
| 类目资质不全 | 游戏涉及虚拟支付但没提供对应资质 | 确认企业主体下的类目符合;个人主体建议避免虚拟支付 |
| 隐私未声明 | 收集了用户头像、位置、手机号但无隐私政策 | 在小程序后台配置隐私保护指引,并确保游戏内有明确提示 |
| 内容侵权 | 素材使用了未经授权的IP形象、音乐、图片 | 全部替换为可商用素材或自有原创素材 |
| 不能正常完整体验 | 核心玩法依赖网络且服务器不稳定,审核员打不开 | 提供稳定的审核环境并附测试账号说明 |
| 存在诱导分享 | 分享奖励设计过于激进,或者分享后强制获取收益 | 调整为合规的分享回流策略,避免“强制分享”判定 |
5.4 全量发布和灰度发布的区别
审核通过后,后台会显示“审核通过”状态。你可以选择:
- 全量发布:所有微信用户都能搜到并体验;
- 分阶段发布(灰度):先放给指定比例的用户,观察数据和崩溃率,再逐步放量。
推荐做灰度。微信小游戏和原生App不一样,原生App发版出问题还能引导用户升级新包,小游戏发出去如果有严重Bug,用户在微信里没有任何回滚手段,只能干等新版本。灰度发布能给你争取到反应时间。
在灰度期间,在微信开发者工具和后台的“运维中心”看崩溃率和启动耗时,如果崩溃率超过阈值,立刻暂停灰度,回滚到上一个稳定版本,千万不要抱有“可能是个别机型”的侥幸心理。
6. 上线之后的版本更新与维护
上架只是开始。微信小游戏的版本迭代节奏比原生App要快很多,因为发布成本低、用户转换成本也低,产品优化频率天然就高。这里讲几个上线后我强烈建议要做的事。
6.1 代码包更新与资源热更新策略
微信小游戏的代码更新走“提交新版本 -> 审核 -> 发布”的流程,每次更新都要走一遍完整审核。如果游戏迭代一周一版,审核周期直接影响产品节奏,所以务必做好资源热更新。
推荐的方案:
- 代码逻辑变更走微信审核流程,保持主包版本稳定;
- 所有活动资源、数值配置、美术素材走远程AssetBundle,通过CDN下发,客户端启动时拉取版本号,对比本地版本,有差异就增量下载;
- 资源版本号管理用JSON配置,CDN上存不同版本目录,加载器永远从最新版本目录拉资源。
这样做的核心收益是:活动更新、小Bug修复甚至新玩法内容,可以绕过审核快速触达用户,只有核心逻辑变更才需要走完整发版流程。
但热更也要控制好边界:
- 热更不能覆盖核心代码,否则会变相绕过审核;
- 热更下载要做断点续传和失败回退,否则用户在弱网环境下容易卡在加载界面;
- 热更资源要定期清理,微信对本地缓存有上限,超过会导致资源被系统自动清除。
我实际测量过,一个美术资源占比较大的中度小游戏,通过热更把每次完整发版的频率从两周一次降到了一个月一次,而用户端实际体验的“新内容获取延迟”却控制在两天以内。这个方案值得投入。
6.2 开放数据域与排行榜:用好微信的社交能力
微信小游戏最独特的竞争力是社交关系链。排行榜、好友助力、群排行这些能力,在Unity环境里无法直接访问关系链数据,需要通过微信的开放数据域来实现。
开放数据域的玩法是:主域(Unity那边)不能拿到原始关系链数据,只能拿“拿到后的绘制结果”。操作上就是在小游戏工程里额外配置一个开放数据域目录(通常是openDataContext),在这个目录里写JS/Canvas代码去调用微信的wx.getFriendCloudStorage、wx.getGroupCloudStorage等接口,然后把结果绘制成一张纹理传给主域,Unity再把这张纹理贴到一个UI面板上展示排行榜。
这样做的好处是安全:用户隐私数据不会直接暴露给游戏主逻辑,只有处理后的“排名”和“头像昵称”能展示。
我建议上线第一版就接入排行榜,哪怕只做最基础的周榜,因为这是驱动用户回流和社交裂变最有效的手段之一。技术实现上有现成模板可以直接参考官方开放数据域示例。
6.3 性能监控与崩溃收集
微信后台自带的“体验评分”和“运行数据”可以看基础性能,但说实话粒度不够细。如果你想持续优化,建议自己埋点上报:
- 关键场景加载耗时:从启动到主界面可交互的时间,是留存的第一道坎;
- 内存峰值:iOS和Android各机型分档统计,内存异常上涨往往预示着泄漏;
- Shader变体和纹理压缩率:这两个指标对包体和GPU压力影响最大;
- 渲染线程耗时:通过微信小游戏的接口获取帧率分布,找出低帧率场景对应的UI层级。
数据上报的域名复用你已有的API域名就行,注意上报接口要做防抖,不能每次帧都上报,通常10秒聚合一次就够了。
7. 踩坑手记:打包上架全程最容易翻车的地方
最后这部分是我的个人经验总结,不剪辑地全部分享。这些坑未必同时出现在每个项目里,但每一条我都见过真实团队在里面浪费过三到五天。
7.1 首包体积优化的“极限操作”
如果你的项目是一个偏美术向的休闲游戏,首包体积大概率在开发中期就会发现严重超标。这时候别慌,按顺序去砍:
- 先把Untiy的
Built-in资源全部查一遍,删掉没用的默认资源; - 然后看AudioClip,很多项目的音频占了体积大头,转成压缩格式(Vorbis或AAC)能省掉70%;
- 再看Prefab里的序列化引用,把不需要的引用字段置空;
- 最后用AssetBundle做资源整理,把大模块全部挪出主包。
做到“首包4MB”是完全可行的,我做的一个中度模拟经营类游戏,最终主包压到了3.2MB,远程资源包总共接近80MB,启动下载时间控制在2秒以内。
7.2 微信开发工具和Unity版本“神秘不兼容”
有一次折腾了两天,发现项目在微信开发者工具里一直黑屏,而Unity编辑器里预览一切正常。最后用排除法定位到:Unity 2022.3某个patch版本和当时的微信适配插件存在Adapter生命周期冲突,升级了一个patch版本之后问题消失。
这类问题没有通用解法,只能靠记录。建议每一个人把项目实际使用的“Unity版本号 + 插件版本号 + 微信开发者工具版本号 + 基础库版本号”记在工程根目录的README里,下次遇到问题直接回溯,能省大量排查时间。
7.3 别忽略小游戏的环境差异对结构的影响
最后的最后,我想强调一个容易被忽略的点:微信小游戏虽然用了Unity做开发,但它的运行模型更接近“前端应用”——有App生命周期、有宿主环境限制、有审核门槛、有灰度发布。你越早用这个视角去设计项目的架构(资源分离、模块化、远程配置、日志上报),后面踩的坑就越少。
如果你准备接新项目,我强烈建议在项目立项阶段就做一次微信小游戏的“技术预演”,拿产品里最复杂的一个模块先跑通打包上架全流程,确定没有硬伤再全面铺开。与其等产品做完了再亡羊补牢,不如花一周时间提前验证。这个投入,性价比实在太高了。