
1. 个人主体能做微信小游戏吗先摸清免版号的真实边界很多朋友看到免版号三个字第一反应是是不是有灰色通道。这里先把话说明白不是钻空子而是按现行平台规则个人主体、非商业化、不含虚拟支付与随机抽取玩法的轻量小游戏可以走一条相对轻量化的上架路径。你可以在微信公众平台注册个人主体小程序选择对应的服务类目在无内购、无诱导分享、无积分商城的前提下不需要像商业游戏那样提前备齐全套资质文件。这是一个公开的、可重复验证的流程不是什么见不得光的操作。为什么个人开发者会特别关注这条路因为大多数独立开发者的现实处境是一个人或两三个人用业余时间做出一个完整的Unity小游戏已经很不容易如果再要求先办软件著作权、再去走完整的游戏出版审批流程时间和金钱成本直接劝退。我自己做第一个微信小游戏时就卡在这上面项目做完了一想到要去准备一堆证明材料直接搁置了两个月。后来认真研究了个人主体和类目规则才发现轻量互动内容其实有合规出口关键是要控制好项目形态不要踩到商业化红线上。那免版号路径到底适合谁适合纯前端逻辑的休闲交互小游戏——比如益智类、养成类、模拟类、创意工具化游戏只要不涉及充值付费、不开放随机抽奖、不做用户间交易都有机会通过审核。如果你的项目计划内置付费道具、会员解锁、抽卡扭蛋这类商业化能力那必须走完整资质流程这条路就不适用了。还有一点要注意个人主体没有办法开通微信小游戏的虚拟支付能力即使你的游戏做完也无法直接收款所以商业化的念头趁早掐掉否则后期改结构非常痛苦。另外个人主体在注册时有一些硬性条件需要年满18周岁、拥有大陆身份证、一个未被占用且已绑定银行卡的微信号、一个可接收验证码的手机号。整个注册过程大概需要10分钟但要注意一个人身份证最多注册5个小程序同一个手机号也只能绑定一个小程序别浪费名额。平台会在注册后要求做身份验证人脸识别验证通过后你的个人开发者身份就正式生效了。主体类型一旦选择个人后期是不能变更为企业主体的能做的只是重新注册新的主体账号所以注册前一定要想清楚这个号以后是要用来做商业项目还是只做个人实验项目。很多教程都会直接跳到打开Unity开始开发但以我实际跑下来的经验先花半小时把平台规则和注册材料理清楚比先装软件重要得多。因为平台规则直接影响你后续的工程配置、类目选择、提审材料先确认自己的项目形态符合免版号的边界再动手写代码才不会白干一场。2. Unity版本没选对后面每一步都在还债微信小游戏能跑Unity项目靠的是官方提供的WebGL转小程序适配方案而这套方案对Unity版本的依赖相当强。我用过Unity 2020、2021、2022三个大版本踩了不少版本差异的坑这里直接说结论推荐使用Unity 2021.3 LTS或2022.3 LTS并且必须安装WebGL构建组件。你的电脑上如果是Unity 2023或更新的版本建议先确认适配方案的Release说明里是否明确支持不要着急升级。为什么版本这么挑剔因为微信小游戏的运行时本质上是一个浏览器环境iOS上是JavaScriptCoreAndroid上是V8内核Unity需要把C#代码编译成WebGL能运行的形态适配方案根据不同的Unity版本生成不同的导出工程结构。官方适配方案虽然持续在更新但它的支持矩阵永远滞后于Unity最新版一段时间。如果你用太新的Unity版本可能遇到构建脚本不兼容、插件API变动、生成的game.json字段不对等问题排查起来非常痛苦。安装时最容易忽略的是WebGL组件。很多人装Unity的时候默认只勾了Windows或Mac平台支持等打包时才发现找不到WebGL选项又回去补装白白浪费时间。正确做法是在Unity Hub的安装界面选中要安装的版本点击右侧齿轮图标进入添加模块勾选WebGL Build Support后再安装。除了Unity本体还要准备两个工具一个是微信开发者工具稳定版即可用来导入Unity导出的构建产物、编译小游戏代码、生成预览二维码、提交上传审核另一个是Git客户端因为官方适配插件通常是以仓库形式提供的国内网络条件下建议优先在Gitee等平台搜索转存版本避免直接从海外仓库拉取时的网络不稳定问题。这一步不用觉得奇怪Git在日常开发中几乎是必需品后续适配插件的更新、分支切换都靠它。小游戏的基础库版本也要留意。微信开发者工具内置了不同版本的基础库模拟器和真机调试时可以切换。Unity适配插件通常要求基础库版本不低于某个阈值一般要求2.20.2以上你在开发者工具的详情-本地设置-调试基础库里选择较新的版本即可。如果基础库太低部分Unity转译后的API比如Audio、WebGL相关接口会直接不可用表现就是真机上黑屏但模拟器正常这类问题排查起来很费劲。还有一点直播或录屏中常见的用Unity 2022国际版这个说法在实际发布流程里和国内正式版没有任何区别你只需要关注Unity的版本号和是否支持WebGL平台不要被这类名词干扰。个人开发者选用长期支持版LTS是最稳妥的路线因为它修复了已知的严重Bug且适配插件更新时通常会优先兼容LTS版本。3. 工程改造做微信小游戏和做PC游戏完全是两套思路很多Unity开发者第一版小游戏就是直接把PC工程导出WebGL再转小游戏结果要么包体过大上传失败要么真机卡成PPT。这里先说几个和传统开发思路差异极大的点理解了它们你就能少走大半弯路。**第一个差异包体大小是硬上限。**普通Unity游戏动不动几百MB很正常但微信小游戏的主包加分包有严格限制主包不能超过4MB这是基础包大小平台会校验整体包体主包加所有分包一般不能超过20MB。所以你在做资源规划时就要有把包体控制在十几MB以内的觉悟。实际操作中建议所有美术资源压到极致纹理用ETC2/ASTC压缩音频用MP3格式减少预制体数量删除不需要的Shader变体。如果资源实在多用官方适配插件自带的AssetBundle分包功能把不常用的资源放进远程包运行时按需下载。第一次做的时候我天真地把几个GB的素材压缩了一下就往上怼结果上传时直接被平台拦截后来老老实实切分包才解决。**第二个差异文件系统不再是文件系统。**Windows环境下你可以用System.IO读写本地文件但在微信小游戏环境里没有传统目录结构文件操作必须通过适配层封装的文件系统接口。如果你在代码里用了File.ReadAllText、Directory.GetFiles这类API构建时不会报错但真机上运行到这段代码就会抛异常。解决办法是所有配置文件改用Unity的Resources或Addressables加载运行时数据用PlayerPrefs适配插件会把它映射到本地缓存需要下载的文件比如AssetBundle用UnityWebRequest加载而不是自己管理路径。**第三个差异渲染性能天花板低。**手机的CPU/GPU性能本身比PC弱一大截加上WebGL跑在浏览器内核里性能更是打折扣。我的经验是场景里的实时光源数量控制在1到2个阴影尽量关掉或只保留方向光阴影避免使用后处理特效Bloom、HDR、抗锯齿等UI的DrawCall控制在60到80以内粒子和动画数量降到最少。Unity适配插件自带了一个3D渲染优化选项建议开启。另外分辨率适配也要处理小游戏的手机会出现刘海屏、挖孔屏等异形屏建议用CanvasScaler的适配屏幕宽度模式并预留安全区边距避免UI被刘海遮挡。**第四个差异操控方式完全不同。**PC上的第一人称射击、键盘操作、鼠标悬停等交互方式在手机触摸屏上都要重新设计。大多数小游戏采用单指点击、双指缩放或全屏触摸拖拽你也可以调用微信小游戏的触摸API获取更丰富的触控信息比如多点触控坐标、力度和角度。但要注意普通Unity的Input.GetMouseButton在适配层里也能工作它会把触摸事件映射为鼠标事件但映射后的鼠标坐标和手感会和原生触摸有差异追求精细操控比如绘图、驾驶类的游戏应该直接用触摸事件。**第五个差异微信小游戏不是沙盒但你的数据也不是随意存。**登录用户数据、排行榜、好友关系这些能力在Unity适配插件里有对应的JavaScript接口但在Unity侧不能直接调用微信的JS SDK而是通过适配插件提供的C#接口桥接。比如要实现好友排行榜Unity侧需要调用插件的WX.GetUserInfo、WX.SetUserCloudStorage等接口通过一段C#封装类去调用微信API再在CS代码中读取返回值。这个过程涉及JavaScript和C#的双向数据传递Unity侧拿到的是一个字符串或对象需要自己处理JSON解析。很多教程里说的获取好友排行榜功能其实就是这么做的。4. 打包前的Player Settings配置每一项都值得逐字检查Unity工程准备开始打包时不是直接Build完事。如果你用默认的WebGL设置导出的包转成小游戏后大概率跑不起来或者性能极差。这里把我在实践中验证过的配置项整理成清单照着设置基本不会错。Scripting Backend和代码裁剪在Player Settings的WebGL标签下Scripting Backend必须选IL2CPP这是官方适配方案的要求也能让最终代码更小、运行更稳。Managed Stripping Level建议设为Low。有人为了减小包体把裁剪等级设成High或Medium结果运行时某些类型被错误裁剪掉反射相关的功能直接崩溃排查起来极其痛苦。只要你的包体是通过资源优化来控制的而不是靠代码裁剪就不要在高等级裁剪上冒险。**压缩格式**WebGL打包的Compression Format建议选Brotli。微信开发者工具和真机都能正常解压Brotli压缩的包体而且压缩率比Gzip高能进一步缩小首包体积。注意不要选Disabled否则包体体积可能膨胀30%以上。如果遇到某些Android机型加载缓慢可以尝试Gzip对比但绝大多数情况下Brotli是最佳选择。Shader精度和渲染设置在QualitySettings里把阴影质量调到最低或关闭抗锯齿设为2x或关闭纹理质量设为低或中。这些设置会直接影响最终包体和运行时帧率。另外建议在Project Settings的Graphics里确认Always Included Shaders中只保留实际用到的Shader尤其是UI/Default和Sprites/Default这两个常用Shader否则每次加载新Shader都会触发Shader编译卡顿。**启用微信小游戏适配插件的构建钩子**官方适配方案安装后需要确认项目里存在对应的编辑器脚本通常在Assets/WebGLTemplates或项目根目录下它会在Build完成后自动执行转小游戏的步骤。如果没有自动触发你需要手动运行菜单项里的转换微信小游戏这个步骤会把Unity生成的WebGL目录转化为小程序项目结构生成game.json、project.config.json、game.js等文件。还有一个很容易被忽略的配置Publishing Settings里的WebGL Memory Size内存大小。小游戏运行时如果内存太小Unity在真机上会频繁GC甚至崩溃内存太大低端手机会内存不足直接闪退。我通常设置为128MB或256MB具体看游戏资源量调整。如果游戏整体资源不大可以设置成64MB但低于64MB时3D游戏基本跑不动。**模板设置**官方适配插件通常会提供自定义的WebGL模板比如带加载进度条的模板打包时在Player Settings的Resolution and Presentation里把模板选为适配插件自带的微信小游戏模板而不是Unity默认的WebGL模板。这一步如果不做转换工具可能无法正确识别构建产物导致转换失败。这些配置改完之后建议先用模拟器跑一遍。微信开发者工具里导入小游戏项目后能看到Unity的启动画面和游戏画面如果这一步正常说明工程配置基本没问题。模拟器和真机渲染存在差异模拟器更容易跑起来但至少能排查出逻辑和资源加载层面的问题。5. 微信公众平台后台AppID、类目、域名这些关键配置逐个讲很多人把工程打包好了却在公众平台后台的配置上卡住。后台配置看似简单但每一步都和后续的上传、审核、真机运行强相关我实际跑通过一次后整理了一套顺序按这个顺序来会省掉很多来回折腾。5.1 注册与身份验证后的首要动作创建一个小游戏类目的AppID个人主体注册完成后进入微信公众平台在设置-基本设置里能看到一个小程序AppID这个AppID是你后续所有开发工具、SDK接入、开发调试的统一标识也是小游戏的唯一身份不要泄露给无关人员。个人主体默认只能创建一个小程序不是小游戏但小游戏本质上是小程序平台下的一种特殊类目开发工具和发布流程完全一样。你需要在后台的服务类目里选择你要发布的类目比如小游戏-休闲游戏选类目时注意看提示如果提示需要资质文件比如软著说明这类目不适合免版号路径选择不需要额外资质的工具类目审核风险会高一些因为平台会判断你的内容到底算不算游戏。以我的实际经验完全非商业化、无抽奖、无排行榜的互动内容在免版号路径下选择工具-效率或工具-教育类目更容易过审但前提是你的产品确实有工具属性、不能只是换了皮的打怪升级游戏。平台审核人员的判断标准是看玩法是否有明显游戏特征如关卡、积分、排行榜、虚拟奖励如果有就必须归入小游戏类目。5.2 服务器域名的白名单配置小游戏在运行时调用的所有网络请求地址不管是UnityWebRequest还是Image下载都必须在后台配置过合法域名否则真机上请求会被拦截。这个安全策略是为了防止任意域名下的数据请求在开发调试阶段可以临时关闭校验但正式版本必须配置。配置位置在开发-开发设置-服务器域名需要填request合法域名、downloadFile合法域名、socket合法域名、uploadFile合法域名。注意域名必须支持HTTPS且证书有效。域名必须有ICP备案服务器所在地在中国大陆这一点经常有人卡住尤其是使用海外服务器的开发者所以域名和服务器要提前规划好最好使用国内云服务商。每个月只能修改少量次数所以域名确定后不要频繁更换前期尽量对所有子域名做泛解析或规划好固定子域名。5.3 AppSecret和Token的获取如果你要自己搭建服务端做用户登录验证、排行榜数据存储等功能还需要在开发-开发设置里生成AppSecret。这个密钥等同你的账号密码不能放入前端代码后端调用时才能使用。另外小游戏前端要拿到用户登录态需要调用wx.login接口换取code后续由后端用code去微信接口拿openid和session_key这里不做展开但后台的AppSecret生成是前置条件。5.4 用户隐私保护指引微信从2023年起对用户隐私保护提出了明确要求如果你收集了用户信息头像、昵称、位置、手机号等必须在后台的设置-服务内容声明-用户隐私保护指引中声明收集信息的目的和方式并在代码中初始化隐私授权接口。小游戏如果不做用户头像昵称填写通常不涉及敏感信息收集但默认的wx.getUserInfo接口在新版本中已经受限需要在代码中调用wx.getUserProfile或新的头像昵称填写能力来获取。我第一个版本因为调了旧接口审核直接被驳回后来在后台补齐隐私声明前端改成新的填写组件才通过。6. 首次打包上传从Unity Build到微信开发者工具的真机调试配置全部就绪后进入最激动人心的打包环节。这里我把完整的流程走一遍并标注出最容易报错的几个节点。第一步在Unity里打开项目确保场景和构建设置正确点击File-Build Settings选择WebGL平台点击Switch Platform如果当前不是WebGL。然后点击Player Settings做上一节里的那些配置修改。修改完后回到Build Settings点击Build选择一个输出目录比如项目根目录下的WebGLBuild。第二步等待Unity构建完成。构建时间取决于项目复杂度一般几分钟到十几分钟期间不要切换Unity进程。构建完成后输出目录里会有一个Unity生成的WebGL标准工程此时还没法直接用。第三步运行适配插件的转换脚本。安装官方适配方案后菜单栏会多出类似WeChat Mini Game或对应插件的名称点击转换或构建微信小游戏工具会自动分析Unity输出目录生成一个小游戏工程目录通常名称类似minigame或wechatgame。生成后查看是否包含game.json、game.js、project.config.json和unity相关适配代码。如果缺少project.config.json之后微信开发者工具无法正确识别项目。第四步打开微信开发者工具选择导入项目目录指向刚才生成的小游戏工程目录填入你的AppID个人主体的小游戏AppID。注意如果你是首次导入可能会提示未配置合法域名在开发调试阶段可以勾选不校验合法域名、web-view业务域名、TLS版本以及HTTPS证书这样可以在工具里直接运行。第五步点击编译运行。如果一切正常模拟器里会出现游戏画面Unity的启动Logo或你自己场景。如果只有黑屏和控制台报错大概率是以下几种情况基础库版本过低、代码裁剪过度、Shader编译错误、内存设置过低。逐项排查即可。第六步真机预览。点击开发者工具右上角预览会生成一个二维码用微信扫码即可在真机上打开你的小游戏。这个环节是你第一次亲眼看到小游戏在手机上运行一定要重点关注帧率、内存占用、触摸响应、加载速度这几个维度。如果真机白屏但模拟器正常优先检查基础库版本和WebGL渲染兼容性如果有资源加载异常优先检查网络请求域名或资源包路径。第七步上传版本。真机调试通过后回到开发者工具点击上传填写版本号和项目备注上传到微信公众平台。上传成功后进入公众平台后台在版本管理-开发版本里能看到刚才上传的版本点击提交审核后进入审核排队状态。这里有一个很容易踩的坑上传时版本号不能重复且版本更新需要设置合理的版本号规则。建议主版本号次版本号修订号的结构比如1.0.0。每次上传新版本必须递增版本号如果和线上版本号相同会被拒绝。另外个人主体的审核周期通常比企业主体长一些常见的等待时间是1到5个工作日快的也有当天通过的慢的话可能要到7天。审核期间不要频繁重复提交每重复提交一次审核排队时长可能会重置这个是我亲身试出来的教训。7. 提审被驳回的典型原因和应对方案我前后提审过三次前两次都因为不同理由被退回来。这里把最常见的驳回原因和对应的解决办法整理出来能让你少走弯路。7.1 类目选择与实际内容不匹配这是最常见的驳回理由。比如你在后台选了工具-教育类目但游戏里有明显的关卡、计时器、积分系统审核人员会认为这属于游戏内容但未选择游戏类目直接驳回。我的处理办法是在符合免版号路径的前提下弱化明显的游戏元素。比如把生命值改成能量条把等级改成学习进度在UI和文案上尽量向工具属性靠拢。当然这只适用于本身就是轻量互动内容的项目如果你的产品本质就是个正统游戏就不要硬选了老老实实走小游戏类目。7.2 用户隐私政策缺失或未声明个人主体开发者很容易忽略这一项。小游戏如果调用用户头像昵称填写能力、获取位置等必须在后台隐私保护指引中声明并且代码里要有隐私授权弹窗。如果你什么都没做审核会以存在未经用户同意收集和使用个人信息的行为为由驳回。解决办法后台配置隐私保护指引前端在首次启动时调用相关API时弹出一个自定义的隐私弹窗用户点击同意后再继续游戏逻辑。微信提供了官方组件用于隐私授权Unity侧通过适配插件的接口调用即可。7.3 页面截图不符合规范提审时需要上传最多5张页面截图并在页面路径里填写这些截图对应的场景。很多开发者直接截PC调试窗口的画面分辨率比例不对或内容看不清会被驳回。正确做法是用真机预览在手机截屏获取标准尺寸的图片图片里尽量展示完整的核心玩法界面、操作说明、功能菜单。不要传首屏空白页或加载进度条页面。7.4 标题和描述涉及极限词或夸大宣传比如标题里带全网第一最强免费无限等词汇审核会以标题含有禁止使用的词汇驳回。我遇到过免费无限这个词被驳回的案例后来把标题改成普普通通的名称就过了。个人开发者起名字时尽量中性不要用营销号风格。7.5 分享行为诱导如果你的游戏里设计了分享后获得奖励分享到群才能解锁下一关这类机制审核基本必挂。微信对诱导分享的管控非常严格哪怕是个人开发者的小游戏也一样。我的做法是去掉所有强制分享的按钮分享入口做成用户主动且非强制的。分享时调用微信的分享API后在客户端也拿不到是否分享成功的回调所以这种设计本身也不利于逻辑实现。整个审核流程走通之后在公众平台后台版本管理里可以看到审核状态。审核通过后点击发布你的小游戏就正式上线了。发布时可以选择全量发布还是分阶段发布灰度个人主体也可以用灰度发布先给10%的用户看到观察几天数据没问题再全量放出。8. 上线后要盯的三个隐藏问题性能、数据和隐私合规游戏上架不是结束而是真正开始面对真实用户。分享几个我在线上遇到并解决过的问题这些问题在开发阶段很难触发但线上必现。8.1 性能问题的线上复现和优化线上最大的意外是同一份代码在同一台手机上有时流畅有时卡顿。关键在于WebGL的自动垃圾回收和Unity引擎的资源加载机制。我遇到的典型案例是进入某个场景时卡顿两秒原因是场景内所有UI的图集在第一次渲染时才上传GPU解决办法是把图集预先加载和预热。另外小游戏在Android端的兼容性整体弱于iOS低端Android机经常出现内存占用飙高、WebGL上下文丢失表现为游戏突然变白屏的问题。遇到这种情况建议在代码里监听WebGL上下文事件并尝试重新初始化实在不行提供重新启动按钮内存占用方面可以定时执行Resources.UnloadUnusedAssets并调用System.GC.Collect但注意别在游戏帧中频繁调用否则会造成卡顿。8.2 数据统计与分析微信公众平台自带基础数据统计可以看访问人数、打开次数、分享次数等但这些维度不足以指导游戏优化。我建议开发者自己接一个简单的数据分析SDK或者至少在后端记录关键事件启动、注册教程完成、首局游戏结束、留存回访等。个人开发者没有必要上一套复杂的BI系统在后端数据库里建一张事件表每次游戏上报事件时插入一条记录即可。有了事件数据才能有针对性地优化关卡难度、调整UI布局。很多团队不做事件埋点上线后只知道有用户玩却不知道玩家卡在哪一关这其实是最可惜的浪费。8.3 隐私合规的持续维护平台对隐私合规的要求是持续更新的。我第一次上线后没有任何问题过了半年平台更新了隐私保护政策要求所有获取用户头像昵称的小程序/小游戏必须使用新的头像昵称填写能力旧的wx.getUserInfo接口被强制废弃。我收到平台站内信提醒随后改用了新接口提交了更新。这个教训说明个人开发者也要持续关注平台公告不要上架后就不管了。还有一个容易忽略的细节隐私协议里声明了什么代码里就必须只做什么。如果你在协议里声明收集用户头像用于排行榜展示那么代码里就不能把头像数据上传到第三方统计平台一旦被检测到属于超范围收集轻则警告重则下架。上线后还应该规划版本迭代节奏。微信小游戏的版本更新不需要用户主动更新用户打开时平台会自动加载新版本这给开发者带来了非常好的迭代条件。但要注意新版本发布前一定要在开发者工具里做一次回归测试尤其是重点路径启动、核心玩法、存档和重点机型。个人开发者测试设备有限建议至少覆盖一台较低端的Android机比如入门级红米、一台主流Android旗舰、iPhone SE和主流iPhone。另外再分享一个针对Unity小游戏的优化小技巧如果你的游戏在启动时需要加载多个AssetBundle把第一个场景启动场景设计成纯代码生成的轻量界面不在这个场景里引用任何大资源让用户先看到界面、再在后台异步加载后续资源。这种设计能极大提升启动感知速度。我第一次上线时启动场景挂了一张1024×1024的启动图和几十个UI预制体冷启动耗时接近8秒用户流失严重后来把启动场景改成纯代码绘制的基础进图页面后冷启动降到了2秒左右留存率有明显回升。这件事给我最大的感触是小游戏的体验优化优先级最高的是启动速度和首帧渲染速度这两项直接决定用户留存。最后想说的是个人开发者做微信小游戏最大的优势不是低成本而是短反馈从代码到真机调试只需要几分钟从提审到上线只需要几天这个反馈速度是企业团队很难比的。善用这个优势多做版本迭代哪怕一开始只有几十个用户也能逐渐打磨出真正受欢迎的产品形态。我目前有几个小游戏就是这个路径上线维护的收益虽然不算高但看着自己的产品在微信里被陌生人打开这种成就感是其他项目给不了的。