—— 游戏开发知识点培训 · 从游戏循环到发行 ——

游戏开发的修炼之道

小哲的公司把企业软件做遍了——老板看游戏行业现金流好,一拍桌子:「进军游戏!先做休闲小游戏!」可游戏开发是「另一种软件」:它不是「响应请求」,而是「每秒 60 次循环」;不是 SQL,而是向量、物理、渲染。周师傅说:游戏程序员 = 程序员 + 半个数学家 + 半个艺术家。这一本,从游戏循环讲到发行。

🕹️ ⚙️ 🎨 📐 🎮 🏃 🖥️ 🌐 ⚡ 🚀 🧭
序 章

游戏是另一种软件

游戏开发全景:循环 · 渲染 · 物理 · 逻辑 · 发行
🧑‍💻
小哲

师傅!老板要做游戏了!我们团队全是写后端和应用的——游戏不也是软件吗?用我们那套技术栈能直接干吗?

🧙
周师傅

游戏是软件,但思维方式完全不同:

  • 业务软件:事件驱动——「用户点按钮,我响应」。
  • 游戏:循环驱动——「每秒 60 次:读输入 → 更新世界 → 画画面」,不管有没有人操作,世界一直在动。

游戏程序员的知识栈:引擎(循环)+ 渲染(画面)+ 数学/物理(世界规律)+ 输入/音频(交互)+ 逻辑/UI(玩法)+ 网络(联机)+ 优化(流畅)。来,十站路线——

1
游戏循环与引擎Update/Draw、FPS、Unity/Unreal/Godot、ECS
2
渲染管线GPU、顶点/光栅/片元、贴图光照、Shader
3
数学与物理向量/矩阵/四元数、碰撞检测、物理引擎
4
输入与音频输入映射、手柄/触屏、BGM/SFX、3D 音效
5
动画与关卡骨骼动画、状态机、A* 寻路、Tilemap、对象池
6
UI 与逻辑HUD、UI 框架、游戏状态机、事件系统
7
网络权威服务器、帧/状态同步、延迟补偿、防作弊
8
性能优化60fps、Draw Call、对象池、异步加载、Profiler
9
测试发行游戏测试、渠道发行、版本管理、买量
10
岗位职业策划/程序/美术、引擎工程师、独立游戏、学习路线
🧙
周师傅

记住一句话:业务软件是「响应式」的,游戏是「循环式」的——每一帧都是新的世界。走,第一站,先看游戏的心脏:游戏循环。

第 1 站

游戏循环与引擎:心脏

游戏循环 · FPS · deltaTime · Unity/Unreal/Godot · ECS

游戏和业务软件最大的不同:一个「游戏循环」在每秒 60 次地转动——读输入、更新世界、画画面。理解循环,就理解了游戏。

🧙
周师傅

游戏循环是游戏的心跳:

  • Update(更新):推进游戏世界——角色移动、碰撞检测、AI 思考。
  • Draw(绘制):把世界画到屏幕——渲染每一帧画面。

FPS(帧率):每秒循环多少次——60fps 是流畅标准(每帧 16.7ms),30fps 是手机游戏底线。

deltaTime(帧间隔):这一帧过去了多久——移动量 = 速度 × deltaTime,保证不同帧率下速度一致(不然 30fps 的角色比 60fps 慢一倍)。

开发用游戏引擎Unity(最流行,手游/休闲首选)、Unreal(3A 大作,画面顶级)、Godot(开源轻量,独立游戏新宠)——引擎帮你搞定渲染/物理/音频,你专注玩法。

游戏循环与 deltaTime(伪代码)
【游戏循环(灵魂)】
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(独立)。理解「循环」,就拿到了游戏世界的钥匙。

第 2 站

渲染管线:像素的艺术

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——游戏程序的「视觉魔法」在这站。

第 3 站

数学与物理:地基

向量/矩阵/四元数 · 碰撞检测 · 物理引擎

游戏程序员 = 半个数学家——向量算移动、矩阵算变换、物理算碰撞。这一站,把「游戏数学」讲成人话。

🧙
周师傅

三大数学兵器:

  • 向量(Vector):方向 + 大小——移动、速度、加速度全是向量(`position += velocity * dt`)。
  • 矩阵(Matrix):变换工具——平移/旋转/缩放一锅端(第 2 站渲染管线的顶点变换全靠它)。
  • 四元数(Quaternion):3D 旋转的「正确姿势」——比欧拉角好(无万向锁),Unity/Unreal 的旋转都用它。

物理:刚体(Rigidbody:受重力/力影响)、碰撞体(Collider:形状)、碰撞检测(相交判断)+ 碰撞响应(反弹/停止)——自己写很难,所以用物理引擎(Unity PhysX / 2D 的 Box2D)自动算。

游戏数学物理实战(Unity 视角)
【向量:移动的核心公式】
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% 的弯路。

第 4 站

输入与音频:怎么玩

输入系统 · 输入映射 · 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 空间。手感 = 画面+声音+震动——游戏好不好玩,一半在「感觉」。

第 5 站

动画与关卡:动起来

骨骼动画 · 状态机 · A* 寻路 · Tilemap · 对象池

角色怎么走路、敌人怎么追你、地图怎么搭——动画、AI、关卡三件套,让游戏世界「活起来」。

🧙
周师傅

动起来四件套:

  • 动画骨骼动画(3D:骨骼+蒙皮,动作像真人)、帧动画(2D:图片序列,Sprite 翻页)、动画状态机(Idle→Run→Jump,条件切换——和第十一本状态机一个思路)。
  • AI 寻路(A*):网格地图上找最短路径——敌人追玩家、单位寻路(第 3 站提过,这里展开)。
  • 关卡构建(Tilemap):用「瓷砖」拼地图——格子地图又快又省(第十五本爬虫里地图 DSL 的图形版)。
  • 对象池(Object Pool):子弹/粒子反复创建销毁太慢——预创建一堆复用(第十六本线程池的思路)。
动画 AI 关卡实战
【动画状态机(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 + 物理 + 音效的组合——游戏世界就是无数组件拼出来的。

第 6 站

UI 与逻辑:HUD 与规则

游戏 UI · HUD · 游戏状态机 · 事件系统 · 数值策划

血条、背包、菜单是「游戏 UI」;胜负规则、关卡进度是「游戏逻辑」——游戏 UI 和业务 UI 长得像,但讲究完全不同。

🧙
周师傅

游戏 UI 四件事:

  • HUD(Head-Up Display):战斗中叠在画面上的信息——血条、金币、技能 CD——不打断操作。
  • UI 框架:Unity UGUI / FGUI / 手游自研——布局、面板管理、适配不同分辨率(第十七本适配的老朋友)。
  • 游戏状态机:Menu → Playing → Pause → GameOver——游戏的「页面流转」(第十一本状态机 + 第 5 站动画状态机的逻辑版)。
  • 事件系统:角色死亡 → 广播事件 → UI 弹出 GameOver——解耦(发布-订阅模式)。

游戏逻辑的「灵魂」:数值策划——血量、伤害、掉落率、经济系统——游戏平衡的艺术(数据驱动的规则表)。

游戏 UI 与状态机实战
【游戏状态机(核心流程)】
  ┌─ 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 常驻 + 状态机管流程 + 事件系统解耦 + 数值表驱动平衡。游戏「先好玩再对」、业务「先对再讲」——思维切换是程序员转游戏的第一个门槛。

第 7 站

网络:多人联机

权威服务器 · 帧/状态同步 · 延迟补偿 · 防作弊

联机游戏是「网络编程的hard模式」——延迟、同步、防作弊全来了。这一站,从「一个人玩」到「一群人玩」。

🧙
周师傅

联机三件事:

  • 架构权威服务器——服务器说了算(玩家的操作发过去,服务器裁决后广播结果)——防作弊的根基。P2P 对等已少见(易作弊)。
  • 同步帧同步(每人跑相同逻辑,只同步输入——RTS/格斗,省流量但要求确定性)vs 状态同步(服务器广播位置状态——MMO/RPG,通用但流量大)。
  • 延迟优化延迟补偿(服务器用「玩家视角的过去时间」裁决命中——射击游戏必备)、预测回滚(客户端先动,服务器纠正)、插值(平滑补帧)。

配套:房间/匹配系统、断线重连、心跳保活——联机游戏的「工程底座」。

联机架构实战
【权威服务器模型(防作弊根基)】
  玩家A(按前走)→ 服务器(验证 → 更新位置)→ 广播给所有人
  → 玩家不能自己改血量/位置(服务器说了算)

【帧同步 vs 状态同步】
  帧同步:只同步输入(每帧指令),各端跑相同逻辑
    → 流量小、精确;但要求「确定性」(同输入同结果)
    → 适用:格斗/RTS/休闲竞技
  状态同步:服务器同步最终状态(位置/血量)
    → 通用、好实现;但流量大、延迟敏感
    → 适用:MMO/RPG/射击

【延迟补偿(射击游戏)】
  玩家 A 的子弹打到 100ms 前的玩家 B 位置?
  服务器按「A 开枪时刻的 B 位置」判定命中
  → 玩家体验「打中了」,而不是「打空气」(公平优先)

【联机工程底座】
  房间/匹配:创建房间 → 匹配对手 → 开局
  心跳保活:定期发心跳,断线自动重连
  掉线处理:重连恢复状态 / 观战等待
  跨服:分区(服务器列表)——海量玩家的架构

【防作弊】
  服务器权威 + 数据校验(别信客户端)
  反外挂:检测内存修改/加速器(对抗升级)
  → 先权威服务器,再谈反外挂
应用场景:休闲竞技小游戏的联机方案

小哲团队做「1v1 休闲对战」:客户端发操作指令 → 权威服务器裁决 → 帧同步广播 → 客户端预测+插值平滑。实测:60ms 延迟内手感如本地;外挂玩家改血量 → 服务器校验直接踢出。联机不是「加了网络就行」,是「架构设计决定公平与手感」。

联机术语

  • 权威服务器:服务器裁决——防作弊根基。
  • 帧同步:只同步输入——省流量但要求确定性。
  • 状态同步:同步最终状态——通用但流量大。
  • 延迟补偿:按过去时间裁决——射击游戏公平。
  • 预测回滚:客户端先动服务器纠正——手感。
  • 插值:平滑补帧——不卡顿。
  • 房间/匹配/心跳:联机工程底座。

本站收获:联机 = 权威服务器(公平)+ 帧/状态同步(选型)+ 延迟补偿(手感)+ 防作弊(可信)。网络编程的 hard 模式——架构决定公平,细节决定手感。

第 8 站

性能优化:流畅 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 到 55fps 的优化实录

休闲游戏在千元机上只有 20fps。Profiler 一看:Draw Call 300+ 次(太碎)、每帧 new 了 200 个字符串、子弹对象反复创建。整改:合批+图集(Draw Call 降到 40)、对象池、字符串优化——千元机 55fps。优化不是玄学,是「预算管理」。

性能术语

  • 帧预算:16.7ms/帧——资源分配的艺术。
  • Draw Call:渲染指令数——合批/图集降它。
  • 合批 / 图集:合并绘制 / 贴图打包。
  • GC 卡顿:每帧分配内存 → 垃圾回收卡——对象池解决。
  • 异步加载 / 热更新:边玩边载 / 动态更新资源。
  • Profiler:性能剖析器——先测量再优化。
  • 发热降频:手机特有问题——负载平缓。

本站收获:性能 = 帧预算管理 + Draw Call 合批 + 对象池防 GC + 异步加载 + Profiler 定位。16.7ms 是每一帧的「预算」——游戏优化就是「省着花」。

第 9 站

测试发行:上线之路

游戏测试 · 兼容 · 渠道发行 · 版本管理 · 买量

游戏做好了,怎么「上市」?游戏测试、渠道对接、版本管理、买量推广——游戏发行的「商业课」。

🧙
周师傅

发行五件事:

  • 游戏测试:功能测试(玩法没 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)+ 数据驱动(留存/流失)+ 双变现(内购+广告)。游戏是产品——发行和运营决定它活多久。

第 10 站

岗位职业:游戏人的路

策划/程序/美术 · 引擎工程师 · 独立游戏 · 学习路线

想进游戏行业?先看清「游戏公司长什么样」——岗位分工、职业路线、以及最重要的:先做一个能玩的小游戏。

🧙
周师傅

游戏公司四大岗位:

  • 策划:想「做什么玩法」——规则、数值、关卡设计(游戏的大脑)。
  • 程序:把玩法「实现」——客户端/服务器/引擎/工具(游戏的手脚)。
  • 美术:把世界「画出来」——原画/模型/动画/特效/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、对象池、异步加载、Profiler16.7ms 预算管理
测试发行兼容测试、渠道、版号、留存、内购广告、买量上线之路
岗位职业策划/程序/美术/运营、引擎工程师、独立游戏游戏人的路

面试高频题速记

  • 游戏循环是什么?→ 输入→更新→绘制,每秒 60 次——游戏的心脏。
  • 为什么用 deltaTime?→ 不同帧率下移动速度一致——速度×时间。
  • Unity 和 Unreal 区别?→ C# 手游 vs C++ 3A——按项目选。
  • Draw Call 是什么?→ 渲染指令数——合批/图集降低它。
  • 四元数为什么比欧拉角好?→ 无万向锁、插值平滑——3D 旋转标准。
  • 对象池干什么?→ 预创建复用——防 GC 卡顿(子弹/特效)。
  • 帧同步 vs 状态同步?→ 同步输入 vs 同步状态——选型看游戏类型。
  • 权威服务器是什么?→ 服务器裁决——防作弊根基。
  • A* 寻路原理?→ 网格 + 启发式搜索(已走+预估最小代价)。
  • 游戏卡顿怎么排查?→ Profiler 先测量 → 渲染/脚本/GC 定位 → 对症优化。
循环 引擎
渲染 管线/Shader
数学 向量/物理
交互 输入/音频
世界 动画/AI/关卡
规则 UI/状态机
联机 网络同步
流畅 性能优化
上线 发行运营 🚀
业务软件是「响应式」的,游戏是「循环式」的——
每一帧都是新的世界。
游戏程序员 = 程序员 + 半个数学家 + 半个艺术家——
引擎给你工具,数学给你规律,美术给你灵魂,
而「每秒 60 次的呼吸」,就是游戏的心跳;
做游戏不难,做好玩又流畅的游戏,是一生的修炼。
🕹️ ⚙️ 🎨 📐 🎮 🏃 🖥️ 🌐 ⚡ 🚀 🧭 🌳
✌ 语言