游戏开发的修炼之道
小哲的公司把企业软件做遍了——老板看游戏行业现金流好,一拍桌子:「进军游戏!先做休闲小游戏!」可游戏开发是「另一种软件」:它不是「响应请求」,而是「每秒 60 次循环」;不是 SQL,而是向量、物理、渲染。周师傅说:游戏程序员 = 程序员 + 半个数学家 + 半个艺术家。这一本,从游戏循环讲到发行。
游戏是另一种软件
游戏开发全景:循环 · 渲染 · 物理 · 逻辑 · 发行师傅!老板要做游戏了!我们团队全是写后端和应用的——游戏不也是软件吗?用我们那套技术栈能直接干吗?
游戏是软件,但思维方式完全不同:
- 业务软件:事件驱动——「用户点按钮,我响应」。
- 游戏:循环驱动——「每秒 60 次:读输入 → 更新世界 → 画画面」,不管有没有人操作,世界一直在动。
游戏程序员的知识栈:引擎(循环)+ 渲染(画面)+ 数学/物理(世界规律)+ 输入/音频(交互)+ 逻辑/UI(玩法)+ 网络(联机)+ 优化(流畅)。来,十站路线——
记住一句话:业务软件是「响应式」的,游戏是「循环式」的——每一帧都是新的世界。走,第一站,先看游戏的心脏:游戏循环。
游戏循环与引擎:心脏
游戏循环 · FPS · deltaTime · Unity/Unreal/Godot · ECS游戏和业务软件最大的不同:一个「游戏循环」在每秒 60 次地转动——读输入、更新世界、画画面。理解循环,就理解了游戏。
游戏循环是游戏的心跳:
- Update(更新):推进游戏世界——角色移动、碰撞检测、AI 思考。
- Draw(绘制):把世界画到屏幕——渲染每一帧画面。
FPS(帧率):每秒循环多少次——60fps 是流畅标准(每帧 16.7ms),30fps 是手机游戏底线。
deltaTime(帧间隔):这一帧过去了多久——移动量 = 速度 × deltaTime,保证不同帧率下速度一致(不然 30fps 的角色比 60fps 慢一倍)。
开发用游戏引擎:Unity(最流行,手游/休闲首选)、Unreal(3A 大作,画面顶级)、Godot(开源轻量,独立游戏新宠)——引擎帮你搞定渲染/物理/音频,你专注玩法。
【游戏循环(灵魂)】
while (game.isRunning) {
handleInput(); // ① 读输入:键盘/鼠标/触屏
update(deltaTime); // ② 更新世界:移动/物理/AI
render(); // ③ 绘制画面
}
→ 每秒 60 次,游戏世界一直在「呼吸」
【deltaTime 为什么必须】
错误:position += 5(每帧固定 5 像素)
→ 60fps 每秒动 300,30fps 每秒动 150 —— 速度不一致!
正确:position += speed * deltaTime
→ 任何帧率下每秒都动 speed×1 秒 —— 物理一致
【Unity 开发(最流行)】
MonoBehaviour:挂到 GameObject 上的脚本
void Update() // 每帧调用(游戏循环的更新阶段)
void FixedUpdate()// 固定时间步(物理计算用)
GameObject + Component:场景对象 + 能力组件(组合式设计)
【三大引擎选型】
Unity :C#,手游/休闲/跨平台——入门首选
Unreal :C++/蓝图,3A/画面党——大厂主流
Godot :GDScript,开源轻量——独立游戏新宠
【ECS 架构(进阶)】
Entity(实体:ID)+ Component(组件:数据)+ System(系统:逻辑)
→ 数据与逻辑分离,高性能(现代引擎趋势)
循环引擎术语
- 游戏循环:输入 → 更新 → 绘制——每秒 N 次。
- FPS(帧率):每秒帧数——60 流畅 / 30 底线。
- deltaTime:帧间隔——速度一致性关键。
- Update / FixedUpdate:每帧更新 / 固定步更新。
- Unity / Unreal / Godot:三大引擎——C# / C++ / 开源。
- GameObject + Component:组合式设计——场景对象 + 能力。
- ECS:实体组件系统——高性能架构。
本站收获:游戏循环 = 输入→更新→绘制,每秒 60 次;deltaTime 保速度一致;引擎选 Unity(入门)/Unreal(3A)/Godot(独立)。理解「循环」,就拿到了游戏世界的钥匙。
渲染管线:像素的艺术
GPU · 顶点/光栅/片元 · 贴图光照 · Shader你看到的每一帧画面,都是 GPU 跑完一条「渲染管线」的结果:3D 模型 → 顶点变换 → 光栅化 → 上色。这一站,画面是怎么来的。
渲染管线四阶段:
- 顶点处理:3D 模型的每个顶点(位置/法线)经过矩阵变换到屏幕坐标——数学课的主角(第 3 站)。
- 光栅化:把三角形网格变成「屏幕上的像素」——谁在三角形里谁就被点亮。
- 片元着色:每个像素算颜色——贴图采样 + 光照计算(Shader 的主场)。
- 输出合成:深度测试(近的遮远的)、混合、送到屏幕。
关键概念:网格(Mesh)(顶点+三角形组成模型)、贴图(Texture)(给模型上色/上细节)、光照(Lighting)(光影让世界立体)、Shader(着色器)(GPU 上跑的小程序,决定每个像素的颜色)。
3D 场景(模型+相机+灯光)
↓
① 顶点着色器(GPU 程序)
模型坐标 → 世界坐标 → 相机坐标 → 屏幕坐标(矩阵乘法)
↓
② 光栅化
三角形网格 → 覆盖的像素格子(硬件超快)
↓
③ 片元着色器(GPU 程序)
每个像素:采样贴图颜色 + 算光照(漫反射/高光/阴影)
↓
④ 深度测试 & 输出
近处遮远处 → 最终画面 → 屏幕
【核心概念速查】
网格(Mesh):顶点 + 三角形 —— 模型的身体
贴图(Texture):2D 图像 —— 模型的衣服(颜色/法线/粗糙度)
光照:方向光/点光/环境光 —— 立体感与氛围
Shader:GPU 小程序 —— 决定像素长啥样(着色器)
相机(Camera):观察视角 —— 画面就是相机看到的
【2D vs 3D 渲染】
2D:图片(Sprite)直接贴 —— 简单,休闲游戏主流
3D:网格 + 光照 + 材质 —— 复杂,表现力强
【Shader 的两种角色】
顶点着色器:处理顶点(位置变换)
片元着色器:处理像素(颜色计算)
→ 游戏画面「美不美」,一半看美术,一半看 Shader
渲染术语
- 渲染管线:顶点→光栅→片元→输出——画面的流水线。
- GPU:显卡并行处理器——一万个像素一起算。
- 网格 / 贴图:模型几何 / 表面细节。
- 光照:方向/点/环境光——立体感的来源。
- Shader:GPU 着色器——像素颜色的小程序。
- 深度测试:近遮远——3D 遮挡关系。
- 2D vs 3D:Sprite 直贴 vs 网格+光照。
本站收获:渲染 = 顶点变换(数学)→ 光栅化(硬件)→ 片元着色(Shader)→ 输出。画面美不美 = 美术 + 光照 + Shader——游戏程序的「视觉魔法」在这站。
数学与物理:地基
向量/矩阵/四元数 · 碰撞检测 · 物理引擎游戏程序员 = 半个数学家——向量算移动、矩阵算变换、物理算碰撞。这一站,把「游戏数学」讲成人话。
三大数学兵器:
- 向量(Vector):方向 + 大小——移动、速度、加速度全是向量(`position += velocity * dt`)。
- 矩阵(Matrix):变换工具——平移/旋转/缩放一锅端(第 2 站渲染管线的顶点变换全靠它)。
- 四元数(Quaternion):3D 旋转的「正确姿势」——比欧拉角好(无万向锁),Unity/Unreal 的旋转都用它。
物理:刚体(Rigidbody:受重力/力影响)、碰撞体(Collider:形状)、碰撞检测(相交判断)+ 碰撞响应(反弹/停止)——自己写很难,所以用物理引擎(Unity PhysX / 2D 的 Box2D)自动算。
【向量:移动的核心公式】
position += velocity * Time.deltaTime
// 向量点积(点乘):判断「面对的方向」
float dot = Vector3.Dot(forward, targetDir);
bool facing = dot > 0; // 点积>0 = 朝前
【矩阵:变换合一】
model * view * projection = 屏幕坐标(第2站渲染的数学)
// 引擎里:transform.position/rotation/scale 帮你封装了
【四元数 vs 欧拉角】
欧拉角:(30, 45, 0) —— 直观但会「万向锁」(转轴卡死)
四元数:quaternion(x,y,z,w) —— 无万向锁,插值平滑
→ 3D 旋转永远用四元数(引擎默认)!
【物理:刚体 + 碰撞体】
Rigidbody:受重力、可被力推动(质量/阻力)
Collider:碰撞形状(Box/Sphere/Mesh)
碰撞检测:两碰撞体相交 → OnCollisionEnter 回调
物理引擎:PhysX(3D) / Box2D(2D) —— 引擎自动算,别自己写!
【2D 游戏物理速查】
跳跃 = 给刚体一个向上的冲量(AddForce)
重力 = 引擎默认(-9.8)
摩擦/阻力 = 材质参数(Ice 滑、橡胶停)
【进阶:寻路与路径】
A* 算法:网格上找最短路径(第5站敌人 AI 用)
数学物理术语
- 向量:方向+大小——移动的基石。
- 矩阵:平移/旋转/缩放——变换合一。
- 四元数:3D 旋转标准——无万向锁。
- 欧拉角 vs 四元数:直观 vs 正确——用四元数。
- 刚体 / 碰撞体:物理属性 / 碰撞形状。
- 碰撞检测 / 响应:相交判断 / 反弹停止。
- 物理引擎:PhysX / Box2D——别自己写物理。
本站收获:游戏数学 = 向量管移动 + 矩阵管变换 + 四元数管旋转;物理交给引擎(刚体+碰撞体+物理引擎)。数学不好也能开发,但懂数学能省 90% 的弯路。
输入与音频:怎么玩
输入系统 · 输入映射 · BGM/SFX · 3D 音效玩家怎么「操作」游戏?键盘/手柄/触屏统一抽象成「输入」;游戏的「情绪」一半靠声音——这一站,交互与听觉。
输入系统三件事:
- 输入抽象:把键盘/鼠标/手柄/触屏统一成「动作」——比如「跳跃」不绑具体按键,而是绑到「Jump 动作」,换设备不改逻辑(输入映射)。
- 轮询 vs 事件:每帧查按键状态(Update 里)vs 按键触发回调——移动用轮询,菜单用事件。
- 触屏特化:点击/滑动/长按手势——手机游戏的主输入(虚拟摇杆/滑屏)。
音频:BGM(背景音乐,氛围)、SFX(音效,反馈:跳跃/打击/金币)、3D 音效(声音随距离/方向变化——脚步声从左后方传来)。音频中间件:FMOD/Wwise(专业游戏音频)。
【输入映射(解耦设备)】
动作:Jump / Move / Fire
映射:键盘(空格) + 手柄(A键) + 触屏(上滑) → 都触发 Jump
→ 逻辑只认「动作」,不认识具体按键
【Unity 输入代码】
// 轮询(每帧查状态——移动用)
float move = Input.GetAxis("Horizontal"); // 左右轴
rb.velocity = new Vector2(move * speed, rb.velocity.y);
// 事件(触发用——跳跃/开火)
if (Input.GetKeyDown(KeyCode.Space)) { Jump(); }
// 触屏(手机游戏)
Touch t = Input.GetTouch(0);
if (t.phase == TouchPhase.Began) { Jump(); }
【音频三兄弟】
BGM:循环播放,铺氛围(战斗激昂/小镇悠扬)
SFX:即时触发,给反馈(跳"哒"、金币"叮")
3D 音效:带位置——近大声远小声、左右分离
→ 游戏「手感」的一半是声音给的!
【音频工程】
AudioSource(发声体)+ AudioClip(音频文件)
音量分级:主音量/音乐/音效分开控制(玩家可调)
音频压缩:手机游戏音频要压(OGG/低码率)——省包体
【手感(Game Feel)小秘密】
反馈 = 画面(特效)+ 声音(音效)+ 震动(触觉)
→ 打击感:顿帧 + 震屏 + 重击音效 三件套
输入音频术语
- 输入映射:动作抽象——换设备不改逻辑。
- 轮询 vs 事件:每帧查状态 vs 回调触发。
- 触屏手势:点击/滑动/长按——手机主输入。
- BGM / SFX / 3D 音效:氛围 / 反馈 / 空间感。
- 音频中间件:FMOD / Wwise——专业音频工具。
- Game Feel:手感 = 画面+声音+震动。
- 打击感三件套:顿帧 + 震屏 + 重击音效。
本站收获:输入 = 动作抽象(映射解耦)+ 轮询/事件分工 + 触屏手势;音频 = BGM 氛围 + SFX 反馈 + 3D 空间。手感 = 画面+声音+震动——游戏好不好玩,一半在「感觉」。
动画与关卡:动起来
骨骼动画 · 状态机 · A* 寻路 · Tilemap · 对象池角色怎么走路、敌人怎么追你、地图怎么搭——动画、AI、关卡三件套,让游戏世界「活起来」。
动起来四件套:
- 动画:骨骼动画(3D:骨骼+蒙皮,动作像真人)、帧动画(2D:图片序列,Sprite 翻页)、动画状态机(Idle→Run→Jump,条件切换——和第十一本状态机一个思路)。
- AI 寻路(A*):网格地图上找最短路径——敌人追玩家、单位寻路(第 3 站提过,这里展开)。
- 关卡构建(Tilemap):用「瓷砖」拼地图——格子地图又快又省(第十五本爬虫里地图 DSL 的图形版)。
- 对象池(Object Pool):子弹/粒子反复创建销毁太慢——预创建一堆复用(第十六本线程池的思路)。
【动画状态机(Unity Animator)】
Idle ←→ Run(速度>0.1 切换)
Run ←→ Jump(跳跃键触发)
Run ←→ Attack(攻击键触发)
→ 条件驱动切换,引擎自动混合过渡
【A* 寻路(AI 追玩家)】
地图切成网格(每个格子=节点)
A* 算法:启发式搜索(代价 = 已走距离 + 预估距离)
→ 敌人绕过障碍物追玩家
引擎自带:Unity NavMesh(导航网格,一键烘焙)
【Tilemap 关卡(2D 地牢)】
# = 墙 . = 地板 E = 出口 M = 怪物
"#########",
"#E..M...#",
"#..#####.",
"#..#....#",
"#########"
→ 字符串地图 → 生成游戏关卡(策划友好!)
【对象池(性能关键)】
子弹每帧创建销毁 = GC 压力 + 卡顿
对象池:预创建 100 颗子弹,用完回收复用
→ 手机游戏流畅度的隐藏功臣
【整合:一个敌人怎么活】
动画状态机(走/追/攻击)+ A* 寻路(追玩家)
+ 碰撞体(被打中)+ 音效(嘶吼)+ 掉落物(金币)
→ 组件组合:一个「活着的怪物」
动画关卡术语
- 骨骼动画 / 帧动画:3D 骨骼驱动 / 2D 图片序列。
- 动画状态机:Idle→Run→Jump——条件切换。
- A* 寻路 / NavMesh:最短路径算法 / 引擎导航网格。
- Tilemap:瓷砖拼地图——字符串即可生成关卡。
- 对象池:预创建复用——防 GC 卡顿。
- 组件组合:动画+AI+物理+音效=活的怪物。
- 策划友好:Tilemap 让非程序员也能做关卡。
本站收获:动起来 = 动画状态机(表现)+ A* 寻路(智能)+ Tilemap(关卡)+ 对象池(性能)。一个「活的怪物」= 动画 + AI + 物理 + 音效的组合——游戏世界就是无数组件拼出来的。
UI 与逻辑:HUD 与规则
游戏 UI · HUD · 游戏状态机 · 事件系统 · 数值策划血条、背包、菜单是「游戏 UI」;胜负规则、关卡进度是「游戏逻辑」——游戏 UI 和业务 UI 长得像,但讲究完全不同。
游戏 UI 四件事:
- HUD(Head-Up Display):战斗中叠在画面上的信息——血条、金币、技能 CD——不打断操作。
- UI 框架:Unity UGUI / FGUI / 手游自研——布局、面板管理、适配不同分辨率(第十七本适配的老朋友)。
- 游戏状态机:Menu → Playing → Pause → GameOver——游戏的「页面流转」(第十一本状态机 + 第 5 站动画状态机的逻辑版)。
- 事件系统:角色死亡 → 广播事件 → UI 弹出 GameOver——解耦(发布-订阅模式)。
游戏逻辑的「灵魂」:数值策划——血量、伤害、掉落率、经济系统——游戏平衡的艺术(数据驱动的规则表)。
【游戏状态机(核心流程)】
┌─ MainMenu ─→ Loading ─→ Playing ─→ Pause ─┐
│ ↑ ↓ │
│ └────────┘ │
└──────────── GameOver / Victory ◄───────────┘
→ 每个状态一套逻辑:Playing 才更新世界,Pause 冻结一切
【事件系统(解耦)】
角色死亡 → 广播「OnPlayerDied」事件
→ 血条 UI 收到 → 隐藏
→ 音效系统收到 → 播放
→ 状态机收到 → 切 GameOver
→ 互不依赖,各听各的(发布-订阅)
【UI 适配要点(手机)】
不同分辨率/刘海屏 → Canvas 缩放 + Safe Area(第17本)
UI 层级:HUD 最顶层常驻,面板弹出盖上面
UI 性能:避免每帧刷新整个界面(只更新变化的部分)
【数值策划(游戏平衡)】
数据表驱动:策划改 Excel 表格 → 游戏数值变化
例:伤害公式 = 攻击力²/(攻击力+防御)(避免堆属性无敌)
经济系统:产出/消耗平衡(防通货膨胀)
→ 数值是游戏的「隐藏骨架」
【游戏逻辑 vs 业务逻辑】
业务:事务、一致性、持久化(严肃)
游戏:表现、节奏、爽感(活泼)
→ 思维不同:游戏「先好玩,再对」
UI 逻辑术语
- HUD:叠画信息——血条/金币不打断操作。
- UGUI / FGUI:Unity UI 框架 / 高性能 UI 框架。
- 游戏状态机:Menu→Playing→Pause→GameOver。
- 事件系统:发布-订阅——模块解耦。
- 数值策划:数据驱动平衡——伤害/经济/掉落。
- 数据表驱动:策划改表不改代码。
- UI 适配:分辨率/刘海屏/Safe Area。
本站收获:UI 逻辑 = HUD 常驻 + 状态机管流程 + 事件系统解耦 + 数值表驱动平衡。游戏「先好玩再对」、业务「先对再讲」——思维切换是程序员转游戏的第一个门槛。
网络:多人联机
权威服务器 · 帧/状态同步 · 延迟补偿 · 防作弊联机游戏是「网络编程的hard模式」——延迟、同步、防作弊全来了。这一站,从「一个人玩」到「一群人玩」。
联机三件事:
- 架构:权威服务器——服务器说了算(玩家的操作发过去,服务器裁决后广播结果)——防作弊的根基。P2P 对等已少见(易作弊)。
- 同步:帧同步(每人跑相同逻辑,只同步输入——RTS/格斗,省流量但要求确定性)vs 状态同步(服务器广播位置状态——MMO/RPG,通用但流量大)。
- 延迟优化:延迟补偿(服务器用「玩家视角的过去时间」裁决命中——射击游戏必备)、预测回滚(客户端先动,服务器纠正)、插值(平滑补帧)。
配套:房间/匹配系统、断线重连、心跳保活——联机游戏的「工程底座」。
【权威服务器模型(防作弊根基)】
玩家A(按前走)→ 服务器(验证 → 更新位置)→ 广播给所有人
→ 玩家不能自己改血量/位置(服务器说了算)
【帧同步 vs 状态同步】
帧同步:只同步输入(每帧指令),各端跑相同逻辑
→ 流量小、精确;但要求「确定性」(同输入同结果)
→ 适用:格斗/RTS/休闲竞技
状态同步:服务器同步最终状态(位置/血量)
→ 通用、好实现;但流量大、延迟敏感
→ 适用:MMO/RPG/射击
【延迟补偿(射击游戏)】
玩家 A 的子弹打到 100ms 前的玩家 B 位置?
服务器按「A 开枪时刻的 B 位置」判定命中
→ 玩家体验「打中了」,而不是「打空气」(公平优先)
【联机工程底座】
房间/匹配:创建房间 → 匹配对手 → 开局
心跳保活:定期发心跳,断线自动重连
掉线处理:重连恢复状态 / 观战等待
跨服:分区(服务器列表)——海量玩家的架构
【防作弊】
服务器权威 + 数据校验(别信客户端)
反外挂:检测内存修改/加速器(对抗升级)
→ 先权威服务器,再谈反外挂
小哲团队做「1v1 休闲对战」:客户端发操作指令 → 权威服务器裁决 → 帧同步广播 → 客户端预测+插值平滑。实测:60ms 延迟内手感如本地;外挂玩家改血量 → 服务器校验直接踢出。联机不是「加了网络就行」,是「架构设计决定公平与手感」。
联机术语
- 权威服务器:服务器裁决——防作弊根基。
- 帧同步:只同步输入——省流量但要求确定性。
- 状态同步:同步最终状态——通用但流量大。
- 延迟补偿:按过去时间裁决——射击游戏公平。
- 预测回滚:客户端先动服务器纠正——手感。
- 插值:平滑补帧——不卡顿。
- 房间/匹配/心跳:联机工程底座。
本站收获:联机 = 权威服务器(公平)+ 帧/状态同步(选型)+ 延迟补偿(手感)+ 防作弊(可信)。网络编程的 hard 模式——架构决定公平,细节决定手感。
性能优化:流畅 60fps
60fps · Draw Call · 对象池 · 异步加载 · Profiler游戏卡顿 = 玩家流失。游戏性能优化是「帧预算工程」——每帧只有 16.7ms,怎么分配?这一站,游戏性能方法论。
帧预算(每帧 16.7ms 怎么花):
- 渲染优化:Draw Call(告诉 GPU 画几次)是最大头——合批(把多个小模型合成一次画)、图集(贴图打包)——从几百次降到几十次。
- 代码优化:对象池(第 5 站)、避免每帧分配内存(GC 卡顿)、缓存组件引用。
- 加载优化:异步加载(边玩边加载)、场景分块、资源压缩——防「加载卡死」。热更新(动态下资源/代码)也是手游标配。
- 分析工具(Profiler):Unity Profiler / Unreal 工具——先测量再优化(全系列老朋友:先测量,别猜)。
【帧预算(60fps = 每帧 16.7ms)】
渲染 8ms + 逻辑 4ms + 物理 2ms + 余量 2.7ms
→ 超预算 = 掉帧 = 卡顿
→ 用 Profiler 看谁超了,再对症下药
【Draw Call(渲染第一杀手)】
100 个模型各画一次 = 100 次 Draw Call = 慢
合批:同材质物体合并 → 10 次 Draw Call = 快
图集:100 张小图合成一张大图 → 一次绑定
→ 手机游戏优化第一课
【代码层优化】
对象池:子弹/特效复用(别 new 了销毁)
避免每帧分配:字符串拼接 → StringBuilder
缓存引用:GetComponent 放 Start,别每帧查
【加载与内存】
异步加载:LoadSceneAsync——边加载边播过场
资源卸载:不用的场景/贴图及时释放(防内存爆)
热更新:资源/代码走 CDN 动态更新(手游标配)
【Profiler 工作流】
① 跑游戏 → Profiler 采样
② 找热点(哪一帧超了 16.7ms?)
③ 定位(渲染?脚本?物理?GC?)
④ 优化 → 复测对比
→ 先测量,再优化;别瞎猜(第十六本 cProfile 同款哲学)
【手机特有】
发热降频:手机过热 → CPU 降频 → 帧率暴跌
优化目标:负载平缓(别瞬间吃满),控温控帧
休闲游戏在千元机上只有 20fps。Profiler 一看:Draw Call 300+ 次(太碎)、每帧 new 了 200 个字符串、子弹对象反复创建。整改:合批+图集(Draw Call 降到 40)、对象池、字符串优化——千元机 55fps。优化不是玄学,是「预算管理」。
性能术语
- 帧预算:16.7ms/帧——资源分配的艺术。
- Draw Call:渲染指令数——合批/图集降它。
- 合批 / 图集:合并绘制 / 贴图打包。
- GC 卡顿:每帧分配内存 → 垃圾回收卡——对象池解决。
- 异步加载 / 热更新:边玩边载 / 动态更新资源。
- Profiler:性能剖析器——先测量再优化。
- 发热降频:手机特有问题——负载平缓。
本站收获:性能 = 帧预算管理 + Draw Call 合批 + 对象池防 GC + 异步加载 + Profiler 定位。16.7ms 是每一帧的「预算」——游戏优化就是「省着花」。
测试发行:上线之路
游戏测试 · 兼容 · 渠道发行 · 版本管理 · 买量游戏做好了,怎么「上市」?游戏测试、渠道对接、版本管理、买量推广——游戏发行的「商业课」。
发行五件事:
- 游戏测试:功能测试(玩法没 bug)+ 兼容测试(千元机/旗舰机/各分辨率都流畅——手机游戏的重灾区)+ 压力测试(同时在线)。
- 渠道发行:App Store / Google Play(第十九本)、国内安卓各商店(第十七本)、Steam(PC)、TapTap(国内手游核心)。每个渠道一套包 + 合规材料。
- 版本管理:版本号、热更新(第 8 站)、AB 测试(不同玩家看不同版本)、灰度发布(先小范围)——第十一本老智慧。
- 数据分析:DAU/留存/付费率/关卡流失点——数据驱动改游戏(第八本 + 第十本老朋友)。
- 买量与变现:广告投放买量(买用户)、变现:内购(IAP)+ 广告(激励视频)——游戏的商业闭环。
【从开发到上线】
开发完成 → 内部测试 → 兼容矩阵测试
→ 渠道包(多商店打包)→ 审核(各渠道)
→ 小范围灰度 → 全量上线 → 数据分析 → 版本迭代
【测试重点(游戏特有)】
功能:每个玩法/关卡/UI 流程无 bug
兼容:千元机(性能低)+ 旗舰 + 平板 + 不同分辨率
网络:弱网/断线重连(联机游戏)
存档:杀进程/切后台存档不丢(第17本老规矩)
回归:改个数值别把别的功能改坏了
【渠道注意(国内手游)】
版号:国内上架需要「游戏版号」(合规前提!)
渠道 SDK:登录/支付/统计接各渠道 SDK(工作量不小)
隐私合规:未成年人保护/实名认证(法规要求)
【数据指标(游戏版)】
留存:次日/7日/30日留存(游戏生命线)
付费:ARPU(每用户收入)/ 付费率
关卡流失:第 3 关流失 60%?→ 太难了,调!
→ 数据是游戏迭代的「方向盘」
【变现两兄弟】
内购(IAP):买皮肤/月卡/礼包——大 R 撑收入
广告(激励视频):看广告送金币/复活——平民也贡献
→ 平衡:太逼氪玩家跑,太佛系公司饿(数值策划的活)
【买量】
广告投放:素材 + 定向 → 买新用户
ROI:花的钱 vs 赚的钱(回本周期)
→ 游戏行业「买量是常态」,产品力是根本
「轻记账」团队第一款休闲游戏:3 个月开发 → 千元机兼容测试修掉 12 个卡顿 → 国内商店提审(版号+实名合规)→ TapTap 小范围测试(看留存)→ 第 3 关流失 55%,难度下调后降到 35% → 全量上线 + 激励视频广告变现。数据驱动,一周一迭代。
发行术语
- 兼容测试:千元机到旗舰机——手游重灾区。
- 渠道发行:App Store/安卓商店/Steam/TapTap。
- 版号:国内游戏上架合规前提。
- 留存/ARPU/关卡流失:游戏核心指标。
- 内购 + 广告:双变现模式。
- 买量 ROI:买用户的投入产出比。
- 数据驱动迭代:留存/流失定方向。
本站收获:发行 = 兼容测试(别让千元机劝退)+ 渠道对接(版号/SDK)+ 数据驱动(留存/流失)+ 双变现(内购+广告)。游戏是产品——发行和运营决定它活多久。
岗位职业:游戏人的路
策划/程序/美术 · 引擎工程师 · 独立游戏 · 学习路线想进游戏行业?先看清「游戏公司长什么样」——岗位分工、职业路线、以及最重要的:先做一个能玩的小游戏。
游戏公司四大岗位:
- 策划:想「做什么玩法」——规则、数值、关卡设计(游戏的大脑)。
- 程序:把玩法「实现」——客户端/服务器/引擎/工具(游戏的手脚)。
- 美术:把世界「画出来」——原画/模型/动画/特效/UI(游戏的脸)。
- 测试/运营:保证质量 + 让玩家留下来(游戏的保障)。
程序岗细分:客户端(Unity/Unreal,画面与手感)、服务器(联机/经济系统,业务后端的近亲!)、引擎(渲染/物理/工具链,最硬核)、工具(编辑器/流水线)。
程序员转游戏的最大优势:服务器/工具岗位和业务后端高度相通——你写过的网络、数据库、分布式全用得上。
【程序岗分工(你适合哪个?)】
客户端(Unity/C#) :玩法/UI/手感——游戏门面
服务器(网络/后端):联机/匹配/经济——你的老本行!
引擎(C++/渲染) :性能/渲染/工具——最硬核最稀缺
工具(自动化) :编辑器/CI/CD——开发提效
【学习路线(3 个月入行)】
第1月:Unity 入门(教程跑通)→ 搭一个场景 + 角色移动
第2月:做一个小游戏(打砖块/Flappy Bird 级)
:游戏循环 + 物理 + UI + 音效全走一遍
第3月:完善 + 上架(TapTap/itch.io)→ 简历作品
→ 「一个能玩的小游戏」= 最好的求职敲门砖
【练手项目梯度】
Lv1:Flappy Bird(单机关卡)——循环+物理+UI
Lv2:打砖块/跑酷——对象池+状态机+手感
Lv3:小地牢(Tilemap+A*+存档)——系统整合
Lv4:联机对战(权威服务器)——网络架构
【独立游戏(Indie)】
一个人/小团队全包——程序+策划+美术(或像素风)
Steam 发行 / Game Jam(48小时游戏开发节)
→ 浪漫但难:9 成不赚钱——先当副业/练手
【给转行者的建议】
先做 3 个小游戏再投简历(作品 > 学历)
服务器岗是「业务后端→游戏」的最近通道
别只玩游戏不写游戏——动手是唯一捷径
Game Jam 是快速入圈的好方式(认识人+练手)
职业术语
- 四大岗位:策划(想)/程序(做)/美术(画)/运营(养)。
- 客户端/服务器/引擎:程序三条线——服务器离你最近。
- 独立游戏:小团队全包——浪漫但难。
- Game Jam:48 小时游戏开发节——入圈捷径。
- 作品集:能玩的小游戏 = 最好简历。
- 转行通道:服务器岗与业务后端高度相通。
- 动手优先:写 3 个小游戏再投简历。
本站收获:职业 = 策划想/程序做/美术画/运营养;程序三线(客户端/服务器/引擎)——服务器岗是业务后端转游戏的最近通道。入行铁律:先做 3 个小游戏,作品比学历硬。
知识点速查 + 面试高频题
面试/开发前最后一页游戏开发知识全景表
| 领域 | 核心知识点 | 一句话人话 |
|---|---|---|
| 循环引擎 | 游戏循环、FPS、deltaTime、Unity/Unreal/Godot | 每秒 60 次的心脏 |
| 渲染 | 渲染管线、GPU、网格贴图、光照、Shader | 像素的艺术 |
| 数学物理 | 向量、矩阵、四元数、刚体碰撞、物理引擎 | 游戏的地基 |
| 输入音频 | 输入映射、触屏手势、BGM/SFX/3D 音效 | 怎么玩 + 什么感觉 |
| 动画关卡 | 骨骼动画、状态机、A* 寻路、Tilemap、对象池 | 让世界动起来 |
| UI 逻辑 | HUD、UGUI、游戏状态机、事件系统、数值 | 规则与界面 |
| 网络 | 权威服务器、帧/状态同步、延迟补偿、防作弊 | 一群人玩 |
| 性能 | 帧预算、Draw Call、对象池、异步加载、Profiler | 16.7ms 预算管理 |
| 测试发行 | 兼容测试、渠道、版号、留存、内购广告、买量 | 上线之路 |
| 岗位职业 | 策划/程序/美术/运营、引擎工程师、独立游戏 | 游戏人的路 |
面试高频题速记
- 游戏循环是什么?→ 输入→更新→绘制,每秒 60 次——游戏的心脏。
- 为什么用 deltaTime?→ 不同帧率下移动速度一致——速度×时间。
- Unity 和 Unreal 区别?→ C# 手游 vs C++ 3A——按项目选。
- Draw Call 是什么?→ 渲染指令数——合批/图集降低它。
- 四元数为什么比欧拉角好?→ 无万向锁、插值平滑——3D 旋转标准。
- 对象池干什么?→ 预创建复用——防 GC 卡顿(子弹/特效)。
- 帧同步 vs 状态同步?→ 同步输入 vs 同步状态——选型看游戏类型。
- 权威服务器是什么?→ 服务器裁决——防作弊根基。
- A* 寻路原理?→ 网格 + 启发式搜索(已走+预估最小代价)。
- 游戏卡顿怎么排查?→ Profiler 先测量 → 渲染/脚本/GC 定位 → 对症优化。
每一帧都是新的世界。
引擎给你工具,数学给你规律,美术给你灵魂,
而「每秒 60 次的呼吸」,就是游戏的心跳;
做游戏不难,做好玩又流畅的游戏,是一生的修炼。