
做了几年游戏开发我最大的感受是见过太多项目不是死在玩法上而是死在找工具的路上。尤其马年前后身边突然冒出一批想做生肖主题小游戏的朋友问得最多的就是“用什么引擎”“素材从哪来”“怎么上微信”。折腾久了我索性给自己搭了一套“马年游戏开发工具箱”把引擎、脚本、素材处理、调试、发布这些环节全部固定下来。今天这套东西分享出来重点讲免费商用引擎里Godot和Cocos到底怎么选以及用Cocos Creator从零做一个马年跑酷小游戏、打包发到微信小游戏的全过程。无论你是刚入行的新人还是一个人要顶一个团队的全干型开发者按这套路走至少能少踩一半的坑。1. 先把工具箱的思路理清楚1.1 为什么游戏开发也需要一个“工具箱”熟悉硬件圈的朋友一定用过那种“一站式检测工具包”把硬盘检测、内存测试、CPU跑分集成到一起平时修机器打开一个包就能解决问题。游戏开发其实也需要这种聚合思路。一个人做游戏的时候最烦的不是写不出代码而是今天要用网页压缩图片明天要下载音频处理软件后天又发现字体文件把包体撑爆了。每换一个环节就要重新找一次工具查找、下载、安装、试错一上午就这么没了。我自己的做法是给每个环节指定一个固定工具然后把它们按固定顺序用起来。不需要一网打尽更不用追求最新版本只要稳定、顺手、能解决当下问题就够了。这套集合我称之为“工具箱”本质上是一套工作流。比如做马年跑酷游戏步骤大致是用引擎搭场景用代码编辑器写逻辑用图片工具压缩美术资源用音频工具生成音效最后用引擎的构建功能导出微信小游戏。每个环节只碰一个工具碰到问题也只在固定工具里排查效率反而比装了一堆“专业软件”更高。1.2 一套基础设施的搭建清单下面是我目前实际在用的最小组合覆盖了从Asset到发布的全过程。模块常用免费工具解决什么问题游戏引擎Godot 4 / Cocos Creator 3.x场景、逻辑、动画、整体构建代码编辑器Visual Studio Code写脚本配合引擎插件使用美术处理Photopea / GIMP / Aseprite备选抠图、像素画、批量尺寸调整素材压缩TinyPNG / 本地压缩脚本控制图片体积降低包体音频处理Audacity SFXR录音剪辑、程序化合成音效版本管理Git 远程仓库防手滑、随时回溯版本发布工具微信开发者工具 / 浏览器预览、真机调试、上架发布这套组合有几个共同点免费商用、跨平台、社区案例多。我这里特别强调免费商用是因为游戏一旦上线就可能产生收入用错素材或工具的授权会给自己埋雷。美术工具里的Aseprite严格来说要付费如果你只是偶尔画点像素风素材可以用LibreSprite等开源替代品。音频方面SFXR能够直接合成跳跃、撞击、吃金币这类短音效省去到处找免版权音效的时间尤其适合一个人开发时的“没有音频资产”窘境。2. 引擎选型本命年工具就是求稳2.1 目前免费商用引擎有哪些底牌现在提到游戏开发很多人先想到Unity和Unreal。Unity确实积累了大量教程和资产但免费使用范围有营收门槛超出后要付授权费而且做个微信小游戏用Unity包体和启动速度会有点吃亏。Unreal更适合做高画质3A项目一个人做小游戏用它就像开卡车去菜市场买菜能开但没必要。真正适合轻量独立游戏、尤其是微信小游戏的是Godot和Cocos。Godot是开源免费的完全不存在授权抽成问题哪怕你做的游戏赚了几千万也没人找你要钱。它的2D能力很扎实场景树概念清晰自带脚本语言GDScript学起来像简化版Python动画、粒子、导航这类基础功能开箱即用。缺点是3D能力还在追赶而且官方对微信小游戏的适配没有Cocos那么完整。Cocos Creator是国内团队维护的引擎特别针对H5和微信小游戏做了大量优化。它的脚本写TypeScript或JavaScript前端程序员上手几乎没有门槛。构建面板直接提供微信小游戏选项从引擎到微信开发者工具是一条比较顺畅的链路。缺点是开源版和企业版功能有差别且版本迭代快网上教程经常对不上版本。2.2 只发微信小程序Godot和Cocos怎么选这个问题几乎每周都有人问。如果是“游戏开发只上线微信用Godot还是Cocos”我的结论很直接大多数人适合Cocos Creator。理由很简单微信小游戏本质上是一个浏览器里的运行环境引擎必须能把项目编译成WebGL和小程序适配层。Cocos团队长期做H5这块官方早就把微信登录、排行榜、支付、分包这些能力整合进构建流程你按照官方模板走一遍就能跑通。Godot虽然也能导出Web项目也有社区大佬写了各种微信小游戏桥接插件但官方没有完整适配遇到平台差异、性能瓶颈、插件冲突时只能自己啃对新手很不友好。这不是说Godot不好。如果你目标平台是PC、Web、Linux或者做单机游戏Godot的体验非常舒服。GDScript让写逻辑变成一件很自然的事场景编辑、动画状态机都很顺手。如果纯粹想学游戏开发编程思维Godot的低门槛和开源特性也很适合。只是“只上微信”这个约束条件一出来Cocos就是更求稳的选择。2.3 我的选型结论我自己现在是这样定的微信小游戏、HTML5活动类项目默认打开Cocos CreatorPC、MAC、Web上的独立小游戏或者想练手学引擎原理用Godot。两个引擎我都留着但绝不在一个项目里混用因为场景结构、脚本生命周期、节点命名规则完全不同切换成本太高。给还在犹豫的朋友一个决策流程先问自己第一发布平台是什么。要上微信、抖音小游戏选Cocos要上Steam、itch.io、网页选Godot。如果还没想清楚只想快速做出一个能发给朋友看的demo也选Cocos因为微信小游戏是目前个人开发者分享作品最轻量的渠道之一。如果团队里有熟悉TypeScript的人前端基础好Cocos更顺手如果团队都是学Python或者从零开始Godot上手更平滑。选完就别回头除非发现重大阻塞否则不要中途更换引擎。3. 围绕引擎补齐配套工具链3.1 代码编辑器与脚本环境不要只在引擎编辑器里写代码那太折磨了。我习惯用Visual Studio Code做外部脚本编辑器原因是插件多、Git集成强、跨文件搜索方便。Cocos Creator可以在编辑器设置里把“脚本编辑器”指向VS CodeGodot也有官方支持的外部编辑器设置。配合插件后在引擎里双击脚本文件就能直接跳转VS Code改完保存切回场景界面就能自动刷新。写代码时要养成好习惯类名用大驼峰变量和函数用小驼峰文件命名和类名保持一致。很多小游戏打包时会对代码做压缩混淆不规范命名大概率不会导致问题但保持可读性对你自己排查Bug绝对有好处。另外新手最容易犯的错是把所有逻辑全塞进update循环每帧创建一个节点、每帧加载资源、每帧改字符串游戏一瞬间就卡成PPT。正确的做法是能用事件触发的就不要每帧轮询该用对象池的不要反复销毁创建。3.2 美术、音频与字体图片处理是工具箱里不能缺席的一块。我在线修图常用Photopea它和Photoshop操作习惯很接近不需要安装软件本地处理用GIMP只是界面老气但功能足够。如果你做像素风Aseprite是最顺手的像素画软件不想付费就用开源替代。素材拿到手之后一定要经过压缩。PNG和JPG都可以用TinyPNG这类在线工具处理肉眼几乎看不出差异但体积能降到原来的三分之一。微信小游戏对包体有严格限制一张图省几百KB积少成多就能决定你能否顺利发布。音频方面Audacity是万能的免费剪录音工具降噪、剪切、转格式都能干。程序化音效则用SFXR鼠标点几下就能生成跳跃、射击、爆裂音非常适合那些找不到合适音效又不愿意听“免费音效站”广告的场景。字体是大坑中文字体动辄几MB放进小游戏直接拉爆包体。我现在的做法是优先用系统字体如果必须用自定义字体就做字体子集化只保留游戏里出现过的几百个汉字能省掉大部分体积。3.3 调试与性能分析工具链里最容易被忽略的是调试器和性能分析器。Cocos Creator自带性能检测面板可以看到Draw Call、顶点数、内存占用。Godot也有调试器和性能监视器。我的习惯是每完成一个小玩法就开真机预览跑一遍看看到底是玩家控制的卡顿还是渲染问题。真机和编辑器表现往往差很大尤其微信小游戏运行在手机上随便几十个重叠节点都可能导致掉帧。性能优化的常规套路是把零散小图合成图集减少Draw Call避免使用大面积半透明粒子数量严格控制动态怪物用对象池而不是反复实例化。很多人喜欢把障碍物每隔一秒生成一个撞掉后就销毁这在PC上没问题但手机上频繁回报可能导致内存碎片和卡顿对象池能明显改善。3.4 版本管理与效率小工具版本管理是工具箱里的安全网。哪怕是你一个人写游戏也要用Git每天收工前提交一次。远程仓库相当于硬盘之外的第二份备份防止电脑坏了全盘归零。提交信息建议写清楚今天做了什么比如“把障碍物碰撞改成了对象池”这样一个月后回看还能知道当时在想什么。其他效率小工具也很有用批量重命名工具、JSON编辑器、自动压缩脚本。但记住一个原则工具是拿来解决问题的不是拿来收集的。如果你发现某个软件装了一个月都没打开过可以直接卸载它大概率不是你的工具箱成员。另外提醒一句网上很多“绿色工具箱”下载站会夹带私货下载游戏开发工具时一定要去官网或者官方GitHub仓库别图方便去第三方下载站。已经不小心装上的到系统设置的应用列表里卸载再检查开机启动项和计划任务把干净还给电脑。4. 从零做马年跑酷小游戏实操记录4.1 准备工程与场景这里我用Cocos Creator 3.8做演示因为目标是微信小游戏。创建新项目时选择2D模板新建一个场景叫Game。场景里Canvas下安排四个层Background、Ground、Player、Obstacle。先设置设计分辨率为竖屏720x1280适配模式选SHOW_ALL。这样无论手机屏幕比例是19.5:9还是16:9画面内容都能完整显示不会出现刘海遮挡关键按钮。把提前压缩过的马角色图片拖到Player节点下地面用一张重复纹理铺满背景用滚动图片。在项目设置里打开图集打包让引擎自动合并零散资源这一步能明显降低首包大小。4.2 玩家角色与跳跃控制玩家控制我采用刚体加触摸输入的方式。给Player节点添加RigidBody2D类型设为Dynamic和碰撞体再挂一个Player脚本。核心代码很简单import { _decorator, Component, Input, input, RigidBody2D, Vec2 } from cc; const { ccclass, property } _decorator; ccclass(Player) export class Player extends Component { property jumpSpeed 480; onLoad() { input.on(Input.EventType.TOUCH_START, this.jump, this); } jump() { const rb this.getComponent(RigidBody2D); if (rb) { rb.linearVelocity new Vec2(0, this.jumpSpeed); } } }这里说的思路是手指点击屏幕的瞬间把刚体的垂直速度改成正数让角色“窜”上去。要注意只监听TOUCH_START如果监听TOUCH_MOVE手指稍微滑动一下就会触发跳跃体验会很糟糕。还有刚体必须有合理重力设置。默认重力大概-1000左右jumpSpeed给到480到600之间比较合适。太低了跳不起来太高了又像坐火箭每次调完参数后真机测一下手感。如果你仔细看会发现这个脚本没有做“落地后才能跳”的判断实际玩起来会变成空中连跳。对于跑酷游戏要分两类处理如果玩法允许二段跳那没问题如果不允许就在变量里加一个onFloor在碰撞回调里把值设为true跳跃时置为false。很多新手忽略这个结果角色在空中一下一下抽动观感非常差。4.3 障碍物生成与碰撞逻辑障碍物不能手摆几个就完事跑酷游戏需要程序化生成。我的做法是提供一个Spawner脚本定时在屏幕右侧生成障碍物预制体并让它们以恒定速度向左移动。代码大致是这样import { _decorator, Component, Node, Prefab, instantiate, UITransform, Vec3 } from cc; const { ccclass, property } _decorator; ccclass(ObstacleSpawner) export class ObstacleSpawner extends Component { property({ type: Prefab }) obstaclePrefab: Prefab null; property interval 1.5; start() { this.schedule(this.spawn, this.interval); } spawn() { const item instantiate(this.obstaclePrefab); const layer this.node.getChildByName(Obstacle); layer.addChild(item); item.setPosition(new Vec3(360, -200, 0)); } }实际项目中要加一个对象池否则每隔1.5秒创建一个新节点十几分钟后场景里会有几百个废弃节点手机肯定吃不消。对象池的思路是游戏一开始就准备好一批障碍物节点需要时从池里取移出屏幕后再还回去而不是销毁重建。还要注意障碍物的移动速度推荐用一个全局变量控制速度随着玩家得分逐步加快游戏难度自然上升。碰撞逻辑有两种实现方式一种是在障碍物脚本里监听碰撞回调另一种是玩家节点检测是否和障碍物发生重叠。Cocos里比较方便的是在障碍物上添加RigidBody2D设为Static玩家刚体设为Dynamic用碰撞回调函数处理。一旦碰撞就弹出Game Over界面并记录当前分数。这套东西听着简单但我见过不少人把碰撞检测写在update里每帧遍历所有障碍物判断距离在手机上跑几十帧后性能惨不忍睹尽量不要这样写。4.4 导出为微信小游戏导出步骤没有太多神秘感。先在微信公众平台注册一个账号获得AppID。开发阶段用测试号也可以。回到Cocos Creator菜单栏打开“项目-构建发布”平台选择微信小游戏填好AppID选择初始场景为Game。构建完成后发布目录下会生成一个wechatgame文件夹。接下来打开微信开发者工具选择“导入项目”定位到这个目录就能在工具里看到游戏画面。首次开发会遇到两个高频问题。第一个是主包体积超过限制解决思路图片和字体压缩、资源转远程包。第二个是接口域名问题真机预览时如果请求外部服务器必须在微信公众平台配置合法域名。调试时建议开启微信开发者工具的“真机调试”扫码后在手机上看实时日志和Memory信息不要在模拟器上直接宣布完美真机场景差异非常大。5. 上线前的常见问题与避坑实录5.1 高频问题排查速查表现象可能原因处理办法微信开发者工具白屏初始场景未设置或构建目录不对检查构建参数选中Game场景重新构建后导入正确目录点击屏幕没有跳跃输入事件未注册或刚体类型不对确认Player挂了Player脚本刚体设为Dynamic碰撞后不触发结束碰撞掩码或回调函数没写检查物理碰撞分组确保静态刚体与动态刚体可碰撞主包体积太大图片和字体没压缩用TinyPNG压缩图片用字体子集化减少自定义字体安卓手机部分音效无声音频编码不兼容转成WAV或OGG格式短音效不要用高码率MP3Godot导出微信报错第三方插件版本不匹配更换与Godot版本匹配的导出插件或改用Cocos构建排查问题千万不要拍脑袋。先在微信开发者工具里看Console红色报错一般直接指向文件路径和行号。再看内存和Draw Call如果绘制压力大先压图片、合图集、砍特效。最后才是翻代码。我见过有人花一个下午找“为什么点击没反应”结果发现是Player节点被一个透明全屏UI挡住了触摸事件落在了UI上这种问题看事件分发比看代码更有效。5.2 个人实操中的几条纪律工具箱再满不守纪律也会翻车。我给自己立了几条规矩分享给你。第一不要在网上随便下载“绿色版”“免安装版”工具很多小网站会往安装包里塞各种全家桶。如果已经中招去系统设置卸载然后检查开机启动项和计划任务别让无用的后台程序拖慢电脑速度。游戏开发本身就很吃电脑性能系统越干净越好。第二一个项目固定一套工具链。原型阶段可以把引擎换来换去但一旦玩法验证通过后续美术、音频、代码都围绕这个引擎展开。中途换引擎等于把项目推倒重做损失的不是时间而是心气。第三每天至少跑通一次最小闭环。我做马年跑酷的时候第一天只做了角色和地面保证能跳第二天加障碍物和碰撞第三天加分数和重开。这样每天都有一个“能玩”的版本而不是两周后一次性憋一个大包结果崩到无法收拾。第四遇到问题先看项目自带的Docs和官方示例。很多引擎问题在官方示例里就有现成答案尤其Cocos和Godot的官方示例都覆盖了物理、UI、动画这些核心功能。搜索引擎上的教程经常隔代花几十秒看一眼官方文档比复制一段过时代码更省时间。最后再分享一个小技巧正式打包前可以把游戏的场景、脚本、纹理都做一次“清理”把开发调试用的脚本和测试节点移除。我用Cocos时会在构建面板勾选“热更新模式”和“压缩纹理”用Godot做原型时会把编辑器调试工具和日志输出关掉。这些细节单独看影响不大但叠加在一起能让首包体积和启动速度都有明显改善。马年的游戏不一定要做赛马题材我图的就是一个“跑”的意象。工具的意义在于把你从琐碎流程中抠出来把时间留给自己做玩法、调手感、讲故事。如果你也处于“工具收集了一堆一个成品都没做完”的状态我建议你先删掉一半工具把剩下的用熟然后从这个周末开始做一款能跑起来的demo。