
把Unity做的游戏上线到微信小游戏很多朋友一开始就被“版号、公司主体、各种资质”吓退了。实际上如果你是一个人开发游戏也不需要内购个人主体这条路是能走通的而且远比你想象中简单。我的一个Unity 2021项目从打包转换到正式发布前后用了大概一周时间全程没有公司资质没有出版物号只准备了一个软件著作权证书就把游戏挂上了微信小游戏平台。这篇博文就是我从零跑通全流程的记录包括环境搭建、Unity导出WebGL、微信小游戏转换工具适配、首包瘦身、生命周期处理、提审上架以及我在白屏、卡顿、审核驳回上踩过的坑。内容偏实操适合独立开发者、Unity初学者以及想把现有Unity项目搬到微信小游戏的团队参考。1. 个人主体免版号的原理以及你必须接受的两条限制很多开发者问我最多的一句话就是个人主体真的能免版号上微信小游戏吗能但前提是你得理解平台规则的底层逻辑而不是看到“免版号”三个字就往里冲。1.1 个人主体没有虚拟支付反而绕开了最重的资质环节微信公众平台注册小游戏时选择“个人主体”后类目里会出现一条很关键的硬性限制个人主体不支持开通虚拟支付。通俗说你的游戏里不能有充值入口、不能卖道具、不能搞会员任何需要玩家掏钱的行为都做不了。恰恰是因为没有虚拟支付平台审核时就不会强制要求你提供出版物号。你只需要准备《计算机软件著作权登记证书》简称软著再按后台要求填写基本内容就能走审核流程。软著这个卡点很多人容易忽略我后文会单独讲。这里要特别提醒一点如果你的游戏未来规划里有内购、月卡、皮肤商城这些商业化功能从一开始就应该注册企业主体而不是先用个人主体跑通再迁移。主体迁移非常麻烦涉及游戏迁移、类目调整、数据对接成本远高于一开始就注册公司。我个人建议是纯免费广告变现的项目可以直接用个人主体想清楚要做内购的别犹豫直接企业主体起步。1.2 关系链能力被限制好友排行榜没那么容易做搜索里经常能看到“Unity微信小游戏如何获取好友排行榜”这种问题说明这个功能戳中了很多开发者的需求。但在个人主体下微信关系链数据是拿不到的。像wx.getFriendCloudStorage这种开放数据域接口需要额外申请关系链权限个人主体基本默认不给过。替代方案很成熟把排行榜数据放到自己的服务器上用openid区分玩家按分数做全局排名。这样做不出微信好友之间的“社交排行”但能做一个“全服排行”。如果将来你升级成企业主体再考虑接回真实好友关系链。说这两条限制不是劝退是帮你在项目立项阶段就把预期拉齐。个人主体适合做休闲、益智、模拟、玩法驱动的小游戏天生就不适合做重度社交、内购驱动的项目。选对赛道后面所有流程都会顺利很多。2. 技术链路选型从Unity工程到微信小游戏到底经历了什么动手之前先把技术路径想明白。好多人在这一步就被绕晕了因为网上信息比较杂一会儿说要用某个插件一会儿说要改源码。其实核心链路非常清晰。2.1 两条主流路线选错会走很多弯路Unity项目要变成微信小游戏目前主流有两条路线路线AUnity导出WebGL然后用微信官方开源的 Unity WebGL 转换工具minigame-unity-webgl-transform把产物转换成微信小游戏工程最后用微信开发者工具打开调试和上传。路线B在支持官方适配器的 Unity 版本里直接通过插件一键导出微信小游戏目录原理上底层还是依赖WebGL和微信小游戏运行时。我自己的项目走的是路线A原因是它最稳定、最通用遇到报错也容易搜到解决方案。路线B适合新版本Unity但依赖插件版本和Unity版本如果中途报错排查成本会高一些。不管选哪条你必须理解一个底层事实微信小游戏本质上是跑在微信运行时里的一个Canvas/WebView环境Unity只有导出WebGL产物才能在微信小游戏里运行。这个认知非常关键因为后续所有调试你都要把问题放到“WebGL应用在微信运行时里跑”这个框架下去思考而不是还在用原生App的思路去排查。2.2 工具版本与工程准备无论如何你在正式开始前至少需要准备以下环境和工具。我整理了一张清单每一项都很关键缺一个你都会卡住。工具/账号用途版本建议Unity游戏引擎负责导出WebGL2021.3 LTS或2022.3 LTSWebGL支持稳定微信开发者工具打开转换后的小游戏工程、真机预览、上传代码最新稳定版Node.js部分转换工具基于Node运行18 LTS或更高版本微信小游戏AppID在微信公众平台注册用于工程绑定和提审注册时类型必须选“小游戏”这里有一个特别容易踩的坑注册账号时类型要选“小游戏”不是“小程序”。它俩虽然共用一个微信公众平台后台但小游戏的入口、game.json配置、审核规则和小程序完全不同。我见过不止一个人注册成了小程序后面又注销重来白白耽误节奏。3. 核心适配实操打包、转换、接入、优化环境准备好后就进入最核心的实操环节。我会把从Unity工程到小游戏能跑起来的完整步骤拆开讲每一步我都会告诉你为什么要这样设置方便你举一反三。3.1 Unity WebGL导出前的三个关键设置Unity导出WebGL并不是直接把平台切过去点Build就行你需要先处理几个设置否则转换后很可能白屏或加载失败。第一Compression Format要设置为Disabled。转换工具在处理Unity WebGL产物时对压缩格式的兼容性不算友好。如果保持默认的Brotli/Gzip后续转换或真机加载时经常会出现解析失败的问题。先禁用压缩跑通后再考虑上CDN Gzip这是最稳的顺序。第二Graphics API建议直接使用WebGL2。Unity 2021以后的WebGL导出默认支持WebGL2性能比WebGL1好不少。如果你的项目里的某些旧Shader只支持WebGL1那就需要先升级Shader这属于美术资源的适配范畴启动前一定要检查。第三不要开启多线程支持。WebGL本身不支持多线程微信小游戏环境更不可能。Unity导出的WebGL在多数情况下默认关闭多线程但如果你是复制了别人工程改的要确认一下Player Settings里没有误开。误开后真机上整个渲染线程会崩得莫名其妙。3.2 用官方转换工具完成工程转换设置好Unity侧后按照正常流程导出WebGL。导出完成你会得到一个包含Build文件夹、index.html、xxx.loader.js的静态站点目录。接下来打开微信官方开源的minigame-unity-webgl-transform转换工具把刚刚导出的目录拖进去工具会自动生成一个微信小游戏工程目录。这个目录里会自动出现game.js、game.json、weapp-adapter、wasm分包等小游戏必需的文件不需要你手动编写微信小游戏入口。转换完成后在微信开发者工具里“导入项目”选择这个转换后的目录并填入自己的AppID。如果一切正常微信开发者工具里就能直接预览你的Unity游戏。第一次能跑起来时你可能会很兴奋但我要泼一盆冷水这只是开始后面还连着真机适配、包体瘦身、性能调优三座大山。3.3 首包限制与四步瘦身法微信小游戏对包体有明确的体积限制主包通常限制在4MB以内总包大小要控制在平台要求范围内以当前微信后台实时提示为准。Unity导出的WebGL产物动辄几十MB不瘦身根本过不了审核更别提用户体验。我的瘦身方法是按下面四步依次做每一步都能砍掉一大块体积用AssetBundle做资源拆分。把游戏里非启动必需的场景、模型、UI图集、音频全部打成AssetBundle放到CDN上运行时按需加载。本地只保留启动场景和一个简单的加载界面。对代码做分包。wasm文件通常会很大转换工具支持把wasm单独拆出来放到分包里启动时先加载核心js再按需拉取wasm。这是官方推荐做法不需要你自己手动写分包逻辑但你要在后台配置分包域名和加载策略。在Unity工程里开启资源裁剪Strip Engine Code关闭用不到的模块。比如你的游戏没有物理功能那就把Physics模块整个剔除。这一招能在编译期直接减少引擎代码体积效果非常明显。压缩纹理和音频。微信小游戏环境对纹理格式的兼容性有限不要直接放ASTC这类移动端专用格式。纹理导出时可以考虑压缩成WebGL兼容性更好的格式音频优先用压缩后的MP3或OGG不要在工程里放大量WAV一首WAV的音效可能就占掉几MB。包体优化后主包控制在4MB内总包控制在20MB内远程资源控制在30MB以内能让大部分玩家愿意等待。超过这个量级首次进入的流失率会直线上升你的游戏做得再好玩也没用。3.4 生命周期、屏幕方向与键盘适配Unity原生App的生命周期很简单但转到微信小游戏后你要处理一批小程序特有的生命周期回调。游戏切到后台时微信会触发onHide这时候Unity里的音频播放、计时器、网络请求都应该暂停或做相应处理回到前台时触发onShow再恢复游戏逻辑。如果不做这个处理玩家切出去回个消息回来发现音乐还在放或者计时器在后台跑完了体验会非常奇怪。屏幕方向方面在game.json里通过deviceOrientation配置横竖屏portrait代表竖屏landscape代表横屏。如果你的Unity工程里没有做对应的屏幕方向设置真机上可能会出现画幅被拉伸的问题。同时还需要监听wx.onWindowResize在屏幕尺寸变化时同步调整Unity渲染的分辨率。还有一个容易被忽视的坑是键盘。如果游戏里有输入框微信的软键盘弹出时会把游戏页面顶起来Unity渲染的画面会和输入框错位。我的处理方式是尽量不用原生输入框而是自己在游戏里画一个UI输入面板然后把输入内容通过微信的输入能力拼接回去。这样键盘再高也不会破坏游戏布局。3.5 微信API接入分享、广告、用户信息基础跑通后大部分游戏都会接入微信社交和商业化API我这里把三个最常用的API点一下。分享能力上通过wx.shareAppMessage可以触发转发游戏中可以配合wx.showShareMenu开启右上角菜单转发。分享文案和图片不要做得太诱导微信有风控被判定为诱导分享会影响审核和线上流量。广告变现方面个人主体最常用的就是激励视频广告。开通流量主后在后台创建广告位拿到adUnitId然后在代码里通过wx.createRewardedVideoAd({ adUnitId })创建广告实例。注意要在onClose回调里判断用户是否完整看完视频只有看完了才发奖励否则会被玩家刷钻。用户信息方面微信小游戏已经更新了头像昵称授权方式不要再用旧的wx.getUserInfo强制弹窗授权。现在应该用“用户头像昵称填写能力”让用户主动点击后才填充头像昵称这样既合规又不容易被打回审核。4. 个人主体发布全流程提审资料与上线步骤游戏功能开发完、适配做完接下来就是发布上线。很多开发者把技术关卡过了最后却被后台的各种材料逼疯。这一章我按时间线把个人主体发布的每一步细节都列出来。4.1 先办好软著准备好这些资料个人主体在微信小游戏“游戏”类目下提审最核心的材料是《计算机软件著作权登记证书》。这个证书不是开始提审那天才去办的而是建议项目开发中期就同步申请因为正常申请周期需要不少时间。哪怕你找加急通道也不是一天就能出证的。我看到过太多开发者游戏做完了卡在软著上一等就是一个月。所以这块一定要提前规划。另外游戏名字尽量不要带通用词、名人名、大厂商标比如你起个“王者荣耀之XX”基本秒拒起到“休闲消消乐”这种通用名也不容易过审。起名时可以参考微信小游戏后台的命名规范多准备两个备选名。后台填写资料时类目选择“小游戏-休闲游戏”或“小游戏-益智游戏”不要选棋牌类个人主体基本无望。游戏简介、截图、版号说明都要认真填简介里能清楚描述玩法截图要展示真实游戏画面不要用跟游戏无关的素材图。4.2 后台配置域名、隐私、流量主提审前有四个后台配置是必须做的缺一个都会被拦下来。第一域名配置。如果你的游戏用了CDN资源或自建服务器API一定要在微信公众平台的“开发管理”-“服务器域名”里把request合法域名、downloadFile合法域名都配置好。注意必须是HTTPS域名并且证书要有效。开发阶段可以在微信开发者工具里勾选“不校验合法域名”来调试但正式提审前必须关掉这个选项。第二隐私保护指引。微信对用户隐私越来越严格后台需要配置小游戏的隐私保护指引声明你收集了哪些用户信息、用途是什么。如果用了openid做玩家标识、用了设备信息做性能统计都要如实声明。第三流量主开通。当你的小游戏累计独立访客UV达到平台要求后可以在后台“流量主”模块里申请开通流量主然后创建激励视频广告位拿到广告位ID。不要在还没满足条件时就着急接广告SDK流量主开通和广告位创建都是以后台实际提示为准。第四版本描述。每次上传代码时都要填写版本号和版本描述。版本描述可以简单写“修复了XX问题、优化了XX体验”但不要留空留空会被打回。4.3 提审、灰度、发布三步走材料都齐了正式发布的路径是真机预览 - 上传代码 - 提交审核 - 全量发布。真机预览这一步必须做。微信开发者工具里点“预览”会生成一个二维码手机微信扫一下就能在真实手机环境里跑你的小游戏。这一步能暴露出很多开发者工具里看不出来的问题比如资源加载慢、内存爆掉、字体渲染异常。预览没问题后在开发者工具里点击“上传”把小游戏代码包上传到微信后台。上传成功后到微信公众平台“版本管理”里找到刚上传的版本先选“提交审核”。这里提醒一下审核不是实时通过的一般会等一段时间。审核期间不要频繁提交新版本因为新提审会打断当前审核流程。审核通过后系统会让你选择“全量发布”还是“分阶段发布”。我不建议一口气全量推给所有用户更稳妥的做法是先用体验版发给身边的小圈子测试自己玩两天确认没有崩溃然后在上线后持续盯着后台的实时日志和性能面板如果发现异常可以及时回滚版本。5. 我踩过的坑白屏、卡顿与审核驳回的排查实录这一步是我最想写的部分。很多教程讲到“提交审核通过”就结束了但真正的坑全藏在细节里。我把我亲身踩过的、以及帮朋友排查过的典型问题整理出来希望能帮你少走弯路。5.1 白屏/黑屏开发者工具正常但真机不正常这是Unity转微信小游戏最经典的问题表现形式是开发者工具里一切正常一上真机就白屏甚至连加载条都不出现。真机白屏的排查顺序我建议按照下面的优先级来非HTTPS请求被拦截。如果你的CDN或API用的不是HTTPS或者还没有配置合法域名真机上微信会直接拦截请求游戏自然加载不出来。解决方法是先检查后台合法域名配置是否完整。wasm的MIME类型错误。如果你的CDN服务器没有把.wasm文件识别为application/wasm而是返回了默认的application/octet-streamWebAssembly就会编译失败这也会导致加载到某一进度后直接白屏。解决方法是到CDN控制台把.wasm的MIME类型配好。CDN跨域问题。CDN的Access-Control-Allow-Origin头没配好所有资源都会被浏览器拦截。这个报错在开发者工具里能看到真机上通过vConsole也能抓到线索。排查这类问题不要靠猜直接在微信开发者工具的Network面板里看资源加载状态哪个红、哪个报错基本一眼就能定位到方向。5.2 首包太大加载卡死以及手机上帧率极低包体优化不好的时候玩家点开小游戏白屏转圈转一分钟都不出来。这其实不是网络问题是代码包和wasm包太大了。卡在加载阶段的优化方向很明确能远端加载的就别放本地能分包加载的就别全部塞在主包里能懒加载的就别启动时一次性拉到内存。手机上帧率低的问题更复杂。先检查屏幕分辨率如果Unity渲染分辨率设置成原生屏幕分辨率在手机上压力很大。我的做法是设置一个合理的目标分辨率然后用canvas.width和canvas.height去适配屏幕让GPU压力降下来。其次检查Unity里的渲染设置比如实时阴影、后处理特效、动态光照在小游戏环境里能关就关。还有Update里有没有高频的 Instantiate、GetComponent、字符串拼接这些在PC上不明显在小游戏的低端安卓机上会被无限放大掉帧掉到没法玩。我自己的排查习惯是先砍渲染开销再清理脚本层的GC按这个顺序做下来帧率通常能翻倍。5.3 审核被拒的三类常见理由和改法第一次提审被拒很正常我个人见过最多的驳回理由有以下三类你可以提前规避。第一类材料不齐全或资质过期。比如软著还没下证就提交审核或者游戏名称与软著名称不一致。审核被拒后后台会明确提示缺哪份材料按提示补齐重新提交即可。第二类类目与游戏内容不符。你的游戏被分到了休闲游戏但实际包含了比较重的世界观、战斗系统、付费引导就可能被要求更正类目。更正确认清楚类目后重新提审。第三类文案/素材违规。游戏名称、简介、截图里出现了夸大宣传、诱导分享、侵权暗示等字眼也会被驳回。比如简介里写“天天领红包”“分享必得奖励”这类文案基本都会被拒。把文案改成描述玩法的中性表达通过率会高很多。被驳回不是世界末日后台会写明原因按原因修改后重新提交就可以。我个人的经验是第一次被驳回后不要急着反复提交先把后台给的驳回原因截图整理一份逐条对照修改确认全部改完再提否则容易浪费审核次数和时间。最后再说几点个人的实操体会整个流程走下来我的感受是Unity转微信小游戏技术难点并不在Unity本身而在于你愿不愿意接受微信小游戏对包体、内存、渲染能力的限制并针对这些限制做减法。如果你的游戏能在一个月内跑通“打包WebGL转小游戏真机预览”这个闭环再花时间去优化性能和包体都不晚。见过太多人一开始就憋大招优化做了一堆结果连转换工具都还没跑起来这纯属本末倒置。还有一个习惯我觉得很值得分享每上传一个版本我都在本地保存一份包体积、构建时间、改动内容的备注。微信小游戏审核和线上版本有缓存当你发现线上报错但本地复现不了时这些备注能帮你快速定位出到底是哪个版本引入了问题。如果你正在做Unity转微信小游戏卡在任何一个环节都可以按我文章里的顺序去排查。我始终相信跑通一次之后你会发现这条链路的底层逻辑特别清晰无非是Unity出WebGL、转换工程、真机调试、提审上线这几步循环。祝你的游戏顺利过审。