超脑 · AI 游戏设计营 · 架构原理课

别让 AI「头痛医头」
—— 游戏为什么要「分层」

原神、三角洲,到星露谷、我的世界,看懂一个游戏的架构是怎么搭起来的

很多同学用 AI 做游戏时都踩过同一个坑:出一个问题,AI 就修一处;再出一个,再修一处。 代码、逻辑、数值、美术全糊在一起,越改越乱,最后自己都不知道动了哪里。 这不是 AI 笨,是游戏"没分层"。 这一课,我们就把商业游戏引擎(Unity / Unreal)真正的分层思路讲清楚—— 让你在动手之前,先想明白:哪些用代码写,哪些用数据填,谁负责哪一块。

The Pain · 先说痛点

"头痛医头、脚痛医脚",到底错在哪?

假设你想把手枪伤害从 20 调成 25。如果游戏没分层,这个 20 可能被硬写在了好几处代码里—— 开枪判定里一处、伤害结算里一处、UI 显示里又一处。AI 帮你改了一处,漏了另一处, 于是"改完更乱"。根因只有一个:逻辑、数据、代码,全搅在一锅里。

✗ 没分层:一锅粥
开枪逻辑 伤害=20 贴图路径 血量UI AI寻路 音效 关卡坐标 存档 后坐力=1.2 掉落表
改一个数值,要在一堆代码里翻来翻去。改漏、改错 → 新 bug → 再修 → 再坏。无限循环。
✓ 分好层:各归各位
资产 贴图 / 音效 / 模型
数据 伤害=20 · 后坐力=1.2 · 掉落表
逻辑 开枪判定 · 伤害结算
系统 战斗 / 背包 / 存档
引擎 渲染 / 物理 / 输入
改伤害?只动"数据"那一格。代码一行不碰,改完不会牵连别处。
The Idea · 核心思想

一个游戏,其实是五层叠起来的

不管 2D 还是 3D、不管什么引擎,一个像样的游戏都能拆成这五层。越往上越"具体、常改",越往下越"通用、稳定"。

资产层 · 玩家看到/听到的

ASSETS

模型、贴图、动画、音效、UI 图、剧情文本。就是画面和声音本身。

策划 / 美术

数据层 · 具体是什么

DATA / CONFIG

数值表、掉落表、关卡参数、角色属性。纯数据,不是代码(配置表 / JSON / ScriptableObject)。

策划 / AI 可安全改

逻辑层 · 规则怎么走

LOGIC / RULES

什么条件触发什么、怎么判定输赢、任务如何推进。游戏的"玩法规则"。

策划 + 程序

系统层 · 游戏的骨架

SYSTEMS

战斗系统、背包系统、任务系统、存档、状态机。一套套可复用的"机制框架"。

程序员

引擎层 · 通用能力

ENGINE

渲染、物理、输入、音频、网络。不关心你做什么游戏,只提供底层能力。

很少动
↑ 上层:具体 · 易变 · 天天改下层:通用 · 稳定 · 复用 ↓
🔑
代码定义"能做什么",数据定义"具体是什么"。 剑能造成伤害 → 是代码。这把剑造成 35 点伤害 → 是数据。想调平衡,改数据,别动代码。
The Craft · 商业引擎的三板斧

Unity / Unreal 是怎么做到解耦的

这三个概念,是所有主流引擎的地基。理解了它们,你就理解了"专业游戏为什么不会一改就崩"。

MOVE 01 · COMPONENT

组件化:一个物体 = 一堆零件拼起来

敌人士兵
位置 Transform 模型渲染 Mesh 碰撞体 Collider 血量 Health AI 行为 武器数据

不是写一个几千行的"敌人大类",而是把它拆成一个个可插拔的组件。想让这个敌人会开车?加一个"载具"组件就行,不用重写。组合,优于继承。

MOVE 02 · PREFAB / 预制体

预制体:做一个模板,生成一百个

敌人模板
Prefab
拼好的一整套组件
实例 #1河边
实例 #2桥上
实例 #3屋顶

把"敌人"做成一个模板(Unity 叫 Prefab 预制体),场景里放 100 个都是它的实例。想给所有敌人加个头盔?改模板一次,一百个全更新。

MOVE 03 · DATA-DRIVEN / 数据驱动

数据驱动:把数值从代码里"抽出来"

代码(稳定,不用改)
function 开枪(gun){ 伤害 = 读表(gun, "damage") 扣血(目标, 伤害) }
weapons.json(策划/AI 改这里)
武器damage后坐力
手枪251.2
步枪182.4
狙击905.0

代码只写"怎么开枪",具体每把枪多少伤害放进一张表。调平衡就是改表格里的数字——Unity 里叫 ScriptableObject,Unreal 里叫 Data Asset,通俗说就是"配置表"。代码一行不动,也就不会引入新 bug。

还有第四招 可视化脚本:Unreal 的 蓝图 Blueprint 把逻辑画成一张流程图,策划不写代码也能连线做玩法——这正是"逻辑和底层代码分离"的极致,也是 AI 更容易编辑的形态。

概念Unity 里叫Unreal 里叫解决什么
物体 = 零件拼装GameObject + ComponentActor + Component解耦,想加功能就插组件
可复用的模板Prefab 预制体Blueprint Class复用,改一处全生效
数据与代码分离ScriptableObjectData Asset数值可安全编辑
逻辑与代码分离Visual Scripting蓝图 Blueprint非程序员也能改玩法
Cases · 3D 游戏怎么分层

看两个 3D 大作:原神 & 三角洲

原神

引擎:Unity

开放世界 3D · 米哈游(HoYoverse)· 深度定制的 Unity 管线

  • 数据层角色、武器、圣遗物的属性全是配置表。出新角色,主要是填表 + 做资产,不是重写战斗代码。
  • 逻辑层元素反应(火+水=蒸发、雷+水=感电…)可以理解成一张"反应规则表"。想加新反应,扩表即可,不必动战斗引擎。
  • 资产层角色 = 模型 + 骨骼动画 + 特效,和上面的数值、逻辑完全分开维护。
💡 教学点:元素反应就是"用数据描述规则"的典范。规则表和引擎代码分离,所以内容团队能源源不断出新角色、新玩法,而底层几乎不动。

三角洲行动

引擎:虚幻 UE4 / UE5

军事射击 · 腾讯天美 J3(琳琅天上)· 主体 UE4,战役模式用 UE5

  • 数据层每把枪是一份数据:伤害 / 射速 / 后坐力 / 弹道 / 换弹时间。平衡性调整 = 改数据表,不改开枪代码。
  • 系统层武器系统、角色控制器、网络同步、关卡——各是独立模块,能单独替换和测试。
  • 逻辑层命中判定、伤害结算、击杀奖励等规则,与"具体数值"分开,所以能跨多把枪复用同一套逻辑。
💡 呼应我们自己的项目:你们做的 three-fps / GTA 沙盒,武器、视角、NPC 就该是这样一个个可替换的模块——而不是全糊在一个 main.js 里。
Cases · 2D 游戏怎么分层

再看两个 2D 神作:星露谷 & 我的世界

星露谷物语

C# + XNA / MonoGame

像素农场 · ConcernedApe 一个人做出来的 · 手写引擎(后迁移到 MonoGame)

  • 数据层几百种作物、物品、鱼、NPC 对话——绝大多数是数据文件,不是几百段代码。这才让一个人扛得住这么大的内容量。
  • 系统层时间/季节系统、种植系统、好感度系统各自独立,互不打架。
  • 证据庞大的 Mod 社区能随便改物品、加作物——正因为"内容是数据、和引擎代码分开",外人才改得动。
💡 教学点:"一个人做出一款大游戏"的秘密,不是他代码写得多,而是他把内容做成了数据。数据越多,代码不必跟着变多。

我的世界

Java · 自研引擎

沙盒建造 · 把"数据与资产分离"做成了官方标准

📦 数据包 Data Pack
loot_table/*.json  ·  recipe/*.json
方块行为 · 战利品表 · 合成配方
规则和数值,全是 JSON,不碰引擎源码。
🎨 资源包 Resource Pack
textures/*.png  ·  sounds/*.ogg
贴图 · 音效 · 模型 · 字体
画面和声音,只换美术,不影响玩法。
  • 分离Minecraft 官方就把游戏拆成两个包:一个管"逻辑数据",一个管"美术资产"。这就是活教材级别的分层。
  • 极致红石电路,本质是"让玩家在游戏里编程"——把逻辑彻底从引擎里解放出来,交给内容。
💡 教学点:Data Pack(逻辑/数值)和 Resource Pack(美术),就是我们说的"数据层 vs 资产层"最直观的证明。你改战利品表,不需要会 Java。
Compare · 2D 和 3D 的异同

换成 2D,哪些一样,哪些不一样?

好消息:分层的思想完全通用。不同的,主要是最底层(引擎)和最表层(资产);中间那三层,2D 和 3D 长得几乎一样。

2D 游戏
资产层图片 / 图集 Sprite / 瓦片 Tilemap / 骨骼(Spine)
数据层数值表 / 掉落表 / 关卡参数 通用
逻辑层触发 / 判定 / 任务流程 通用
系统层战斗 / 背包 / 对话 / 存档 通用
引擎层2D 渲染 / 正交相机 / AABB 碰撞 / 图层 z-order
3D 游戏
资产层模型 Mesh / 贴图 / 材质 / 骨骼动画 / 特效
数据层数值表 / 掉落表 / 关卡参数 通用
逻辑层触发 / 判定 / 任务流程 通用
系统层战斗 / 背包 / 对话 / 存档 通用
引擎层3D 渲染+光照+Shader / 透视相机 / 刚体+射线碰撞
维度2D3D
空间X / Y 平面 + 图层前后X / Y / Z 三维 + 深度
渲染Sprite 精灵图 / 瓦片地图网格 + 材质 + 光照 + Shader
相机正交(没有近大远小)透视(有景深、有视角)
物理碰撞矩形 / 圆形 2D 碰撞碰撞体 / 射线 / 刚体
资产图片、图集、2D 骨骼模型、贴图、3D 骨骼动画
中间三层几乎完全通用 —— 背包、任务、数值、对话系统,2D 和 3D 写法一样

所以,你在 2D 里学会的分层习惯,搬到 3D 完全用得上。换维度换的是"引擎能力"和"美术形式",不变的是"怎么把游戏拆干净"。

Why it matters · 回到 AI 协作

分层,是让 AI 能安全帮你改游戏的前提

现在回头看开头那个"头痛医头"的坑,答案就清楚了。混在一起时,AI 改一处就动全身,你根本不敢让它放手改; 而分好层之后,AI 的活动范围被框住了:

🧩
我们自己的 GTA 沙盒,就是这么拆的:scene.json(内容)+ rules.json(规则)+ 引擎代码 三分离。 还做了一个"抽象模拟器"——很多逻辑 bug 不用渲染画面、不用截图,在纯数据层跑一遍就能测出来,比开着游戏找快得多。

一句话:你分层分得越干净,AI 就越帮得上忙、越不容易帮倒忙。架构不是给程序员的负担,而是你和 AI 协作时的"安全护栏"。

Checklist · 动手之前先问自己

做游戏前,先分层的 5 个问题

下次让 AI 帮你做游戏,别一上来就说"帮我写个游戏"。先花五分钟,回答这五个问题。

1
这个东西,哪部分是"能做什么"(代码),哪部分是"具体是什么"(数据)?能做什么写进代码,具体数值全部丢进配置表。
2
我的物体,能不能拆成一个个组件别让 AI 写一个几千行的"大类",让它按组件拆。
3
会重复出现的东西,有没有做成可复用的模板(Prefab)改一处能不能全生效?不能,就是没抽象好。
4
调平衡、改数值,我需要动代码吗如果需要动代码,说明数据还没从代码里分离出来。
5
出了 bug,我能说清它属于哪一层吗引擎?系统?逻辑?数据?说得清,才修得准,才不会"头痛医头"。
资料来源(供老师核对): 三角洲行动引擎(天美 J3,UE4/UE5): IT之家 · 维基百科; 星露谷(C#+XNA→MonoGame,ConcernedApe 独立开发): Wikipedia; 我的世界数据包/资源包(JSON 战利品表): Minecraft Wiki · Loot table。 原神基于 Unity 为业界公认;文中"元素反应=数据表"为帮助理解的示意,非官方源码结构。 Unity(GameObject/Prefab/ScriptableObject)与 Unreal(Actor/Blueprint/Data Asset)为两引擎公开的官方设计概念。