跳到正文
AI for Frontend · 微信公众号·· 4 小时前AI 评分55

用 AI 代码程序化生成平遥古城,打造可游玩的浏览器 FPS 地图

让AI用代码造了一座平遥古城,还能在城墙上打“CS”

AI 导读

作者用 AI 辅助编写代码程序化生成平遥古城 3D 场景,做成可在本地浏览器游玩的第一人称射击地图,支持 5V5 团队死斗与 10 人混战。文章拆解关键工程细节:角色不跳跃可直上约 10.56 米城墙步道、射击孔重构为真实可穿透的几何结构、投放 238 个木箱掩体并接入分层导航;古城建筑无美术建模导入,角色与枪械等资产仍含模型文件。

正文

原创 前端设计大神 2026-10-27 17:00 北京

千年古城遇上CS

先看三个重点

1. 无美术建模导入:古城主体建筑不走传统建模软件,由 AI 辅助编写代码直接生成 3D 几何体。

2. 真碰撞与战术交互:打通 10.56 米城墙台阶、镂空真射击孔、分层寻路与 238 个木箱掩体。

3. 浏览器即点即玩:本地流畅运行 5V5 团队死斗与 10 人混战,让千年古建空间变成战术语言。

当千年古城遇上第一人称战斗,代码就不再只是屏幕上的字符,而是一条可以走进去的街、一座可以登上的城楼。

如果平遥古城变成一张可以自由探索、可以在街巷与城墙间交战的射击游戏地图,会是什么样?

沿着古街向前,灰砖院墙挡住远处的视线。穿过门洞,商宅院落里摆着一批木箱,刚好成为临时掩体。你听见脚步声,举枪探出墙角,随后转身奔向南门。拾级而上来到城墙顶部,透过墙垛上的射击孔观察城外——这里的孔洞不是画上去的黑色贴片,而是真正可以观察、瞄准和射击的开口。

这是一座古城,也是一张战场。更有意思的是:构成这座古城的主体建筑,没有走“先在建模软件里做模型,再导入游戏”的常规路线,而是由 AI 辅助编写代码,直接生成 3D 几何体。

程序化生成的平遥古城全景:包含完整四面城墙、六座城门及内部街巷院落。

01 / 跨界实验

千年平遥,遇上“CS式”战斗

这个项目可以简单理解为一次跨界实验:用程序化生成的平遥古城,承载第一人称射击游戏的玩法。这里说的“遇上CS”,指的是熟悉的第一人称战斗体验:移动、瞄准、开火、换弹、切换武器,以及围绕掩体、通道和高低差展开交战(并非《反恐精英》官方产品,亦未使用其引擎)。

我们保留了古城最有辨识度的空间元素:完整的四面城墙、六座城门、市楼、票号、县衙、寺庙,以及成片的民居院落。这些建筑不再只是远处的背景,它们决定玩家能看到什么、能走到哪里,以及下一场交火会在哪里发生。

一条长街,可能是远距离对枪的路线;一处院门,可能是需要谨慎通过的交火点;一段城墙,则提供了与地面完全不同的观察角度。

千年古城的空间秩序,在这里变成了新的战术语言。

02 / 技术路径

“无模型、全代码”,究竟是什么意思?

这里的“无模型”并不是指运行时不存在三维网格,而是指古城主体建筑无需先在 Blender 或 Maya 里制作成一批独立的美术模型文件再逐个导入。

城墙的长度、门洞的宽度、屋檐的层次、柱子的间距、台阶的高度,全部写进代码参数。程序运行时,再把这些规则实时编译成真正的 3D 几何体。例如,一面带射击孔的墙垛,由左右砖框、上梁和下槛拼接而成,修改参数后,渲染画面与物理碰撞会自动同步更新。

一个院落、一间商铺、一座城楼的构造规则还能被反复调用,在统一的建筑语言下生成不同的空间组合。需要区分的是:古城主体场景采用程序化几何生成,而游戏中的角色与枪械等资产仍包含模型文件——这是一次以代码驱动大型建筑群落生成的工程实践。

03 / 工程落地

从“看起来像古城”,到“真的能在里面战斗”

让 AI 生成一张漂亮的古城概念图,与做出一座能走进去交火的 3D 古城是两回事。画面再好看,玩家一走就穿墙,体验就会瞬间崩塌。为此,我们重点打通了建筑外观与游戏规则的映射:

01 看得见的墙体,需要真实阻挡角色移动与子弹射线。

02 门洞与街巷通道,必须留出精确且无死角的可通行包围盒。

03 台阶和城楼楼板,需要提供连续、稳定且不卡脚的落脚面。

04 院落内部的木箱,既是场景陈设,也是交火时的真实掩体。

05 AI 机器人需要理解立体拓扑路线,能在地面街巷与城墙之间自如穿插。

04 / 细节打磨

南门台阶、真射击孔与 238 个木箱

① 南门登城台阶:在观赏型场景里台阶只要外观对齐即可,但在射击游戏里玩家真的会跑上去。最后一级台阶接不接得上平台?女墙是否挡住出口?角色会不会被微小高度差卡住?我们补齐了连接平台、留出女墙通口,最终让角色不跳跃、不传送,直接从地面一路跑到约 10.56 米高的城墙步道,并接入了上下分层导航。

② 城墙真射击孔:最初墙垛上的孔洞只是用黑色方块表现视觉凹陷,实则是一堵死墙。我们去掉了假贴片,将其重构为围绕洞口搭建的真实砖石几何结构并重算碰撞。现在子弹穿过洞口畅通无阻,打在周围砖框上则会正常阻挡。

③ 238 个战术货箱:单纯还原古建会导致长街视线过长、空地缺乏掩体。我们在避开墙体、门洞并适配地坪高度的前提下,向街巷和院落精准投放了 238 个运输场风格的木箱。灰砖、瓦檐与战术木箱并置,让这里真正像一座刚刚卷入战斗的古城。

“看起来能用”与“真的能玩”之间,隔着的就是这些不起眼的工程细节。

城墙垛口细节:不是黑色贴片,而是真正支持观察、瞄准与射线穿透的几何孔洞。

05 / 实机体验

目前这个版本能玩什么?

当前版本已在本地浏览器中跑通,平遥古城作为地图列表默认首项接入了快速游戏流程(当前以本地离线机器人对战为主,暂不含联网服务):

• 5V5 团队死斗:与 AI 机器人组成阵营,围绕古街与城楼展开攻防。

• 10人自由混战:高密度个人遭遇战,考验对院落掩体和巷道拐角的利用。

• 双端输入与汉化:支持键鼠及标准手柄输入逻辑;默认中文 UI 与中文角色名,支持中英切换。

• 画面渲染调优:采用原生渲染分辨率,专门针对砖瓦细节、屋顶高光及重叠装饰面做了防模糊与抗闪烁修正。

本地浏览器运行实机画面:接入快速对战流程,支持 5V5 团队模式与自由混战。

06 / 协作复盘

AI 在这个过程中,扮演了什么角色?

AI 并没有一键交付一个无需修改的完整游戏。它参与的是持续迭代的工程链路:阅读既有项目架构、复用建筑模块、编写几何生成规则、接入配置并计算碰撞与导航网格。

而人的判断同样不可替代:“我需要完整古城而不是一小块街区”、“南门台阶必须能跑上去”、“画面太糊且屋面在闪”、“射击孔不能是黑贴片,我要从这开火”。正是这些具体的人类反馈,把一个静态演示推向了真正可玩的交互产品。

AI 大幅缩短了从想法到可运行版本的距离,但好体验仍然来自一次次具体的观察、判断与修正。

当代码成为一种空间创作方式

建筑可以写成规则,规则可以生成空间;空间拥有了碰撞、路线与交互,一个想法就有机会从一句描述变成可以亲自走进去的世界。下一次,同样的方法也可以用来构建一条历史街区,或一张完全原创的战术地图。

如果进入这张地图,你更想在古城的哪个位置展开对战?是南门城墙上的远距离交锋,还是商宅院落里的近距离遭遇?欢迎在评论区聊聊。

体验链接

体验链接见置顶评论区

源码获取方式:《玩了两年 Vibe Coding,准备开放所有源代码》

项目与技术说明

1. 文中“完整古城”指已接入来源项目的全部场景模块,并非对现实平遥古城的测绘级或文保级复原。

2. 本项目系第一人称射击玩法与程序化古建场景的跨界技术实践,非《反恐精英(CS)》官方关联产品;程序化场景基于现有代码复用与改造,游戏角色等资产包含独立模型文件。

AI 编程 · 程序化建模 · Web 3D 空间交互

跳转微信打开

来源:AI for Frontend · 微信公众号 · mp.weixin.qq.com