第八章:游戏AI基础与演化
本章导言
在现代游戏中,“智能”不仅体现在高画质与复杂系统,更藏于每一个与你互动的敌人、NPC、任务和剧情背后。无论是潜行游戏中巧妙巡逻的守卫,还是动作游戏中灵活闪避的Boss,人工智能(AI)都是塑造游戏世界活力与挑战性的关键技术。
本章将带你走进游戏人工智能的世界,从基本概念出发,了解游戏AI与通用AI的异同;回顾从《吃豆人》到现代大语言模型的游戏AI演进历程;探索游戏中AI的核心应用场景,包括敌人行为控制、程序内容生成、个性化体验、自动测试与故事生成等;并剖析一系列经典的游戏AI技术,从有限状态机、寻路导航到强化学习与大语言模型,逐步构建你对游戏AI系统的整体理解。
最后,我们将以《吃豆人》的幽灵AI为案例,深入分析早期游戏AI如何以极简算法实现深度互动,借此启发你如何用Godot构建自己的智能游戏世界。
1 人工智能和游戏AI
无论是在通勤路上挑战手机里的“象棋大师”,还是在 3A 大作中潜行躲避卫兵的视线,人工智能(AI)早已是游戏体验中不可或缺的灵魂。但在真正开始使用Godot开发游戏AI之前,我们首先需要厘清两个核心概念:什么是人工智能(Artificial Intelligence)?游戏中的“AI”到底指的是什么?
1.1 人工智能的基本概念
人工智能,简称 AI,广义上是指“使机器具备类似人类智能的能力”。这种能力通常建立在四个支柱之上:
- 感知:感知外部世界,例如识别图像、理解语音;
- 推理:根据已知信息推导出结论或做出判断;
- 学习:通过经验或数据不断改进自己的表现;
- 行动:控制设备或系统,完成某种目标任务。
在工业领域,AI 追求的是真实性与精确度,如路径的最优解;但在游戏开发中,这些能力被重构成了一种表现性的控制逻辑。例如在游戏中,敌人躲避攻击、NPC识别玩家并做出反应等。你可以这样理解:如果说工业界的AI追求“让机器思考”,那么游戏AI更追求“让机器表演”。
1.2 什么是游戏AI?
游戏 AI 并非通用人工智能的子集,而是一套以“体验”为核心的模拟技术方案。它的目标不是为了创建真正有意识的智能体,而是为了“让游戏世界更有生命力”。
在游戏中,“AI”可能指代以下对象:
- 行为驱动:控制敌人的巡逻、追击与掩护策略。
- 导航系统:NPC 在复杂地形中寻找合理路径的逻辑。
- 动态环境:程序化生成(PCG)的地图、任务或对白。
- 体验调节:实时预测玩家状态并动态调整游戏难度(DDA)。
游戏AI通常更关注“表现是否自然”“行为是否有趣”而不是“是否真实”。它的首要任务是服务游戏设计目的,而非追求智能本身的完整性。游戏AI和通用AI的差异可以用如下表格归纳:
| 比较维度 | 通用AI | 游戏AI |
|---|---|---|
| 核心目标 | 真实智能、推理与学习 | 表现智能、可控性与娱乐性 |
| 技术偏好 | 数据驱动,追求泛化能力 | 规则驱动,强调可预测与调节性 |
| 成功标准 | 是否智能、是否准确 | 是否好玩、是否符合设计意图 |
| 复杂度 | 高度复杂,模型规模庞大 | 控制复杂度,追求实现效率与维护性 |
| 实时性 | 可以容忍延迟(如离线训练) | 高度实时响应(如每帧决策必须迅速) |
| 典型应用 | 自动驾驶、语音助手、医疗诊断 | 敌人AI、NPC交互、程序生成内容 |
1.3 游戏AI的设计哲学
相比于真实世界中难以预料的复杂性,游戏世界是人为构建的虚拟系统。在这个世界中,游戏开发者可以控制所有规则、所有变量。因此,游戏AI并不总是追求“最优解”或“自适应演化”,反而需要保持行为的可解释性与可调节性。游戏AI在某种程度上,是“导演”与“演员”的合体。它既要在既定脚本下完成剧情,又要有即兴表演的能力。你要让它“足够聪明”,但不能“过于聪明”;它要“具有挑战性”,但不能“绝对击败玩家”。这决定了游戏 AI 的特殊设计准则:我们不需要“最强”的对手,我们需要“最合适”的演员。
想象一个拥有“上帝视角”且计算完美的狙击手 AI:它能在你露头的一瞬间实现百步穿杨。这种 AI 在技术上是完美的,但在设计上是灾难性的,它剥夺了玩家的生存空间与成就感。优秀的游戏 AI 应该具备“拟人化的缺陷”:
- 它们会犹豫(给玩家预警时间);
- 它们会犯错(让玩家能通过策略反制);
- 它们会沟通(通过台词暗示它们的下一步行动)。
通过让 AI “透明化”,我们赋予了玩家“掌控感”。这意味着我们要设计的是一套能够被设计师轻松调节、逻辑清晰的行为框架,而非不可控的黑盒算法。
作为游戏开发者,掌握游戏AI不是为了研究深度神经网络或大模型算法,而是为了以下目标:
- 提升玩家体验:通过智能行为提升游戏张力与沉浸感;
- 减轻开发负担:自动化生成内容、脚本或事件;
- 增加系统复杂性:让游戏具有更多可能性与重复可玩性;
- 增强交互表现:让NPC与世界更具“生命感”;
- 实现玩法差异化:利用AI带来独特的策略玩法或剧情生成机制。
2 游戏AI的历史演变
2.1 萌芽阶段(1950s–1980s)
人工智能技术在游戏领域的应用最早可以追溯到上世纪50年代。最初的尝试主要集中在棋类游戏上,例如跳棋、国际象棋等。1951年,克里斯托弗·斯特雷奇(Christopher Strachey)编写的跳棋程序以及1957年亚瑟·塞缪尔(Arthur Samuel)开发的学习型跳棋程序,奠定了AI游戏的最初基础。随着IBM的“深蓝”在1997年战胜卡斯帕罗夫,这类经典博弈游戏AI达到了高峰。
然而,真正意义上的“电子游戏AI”起步较晚。1972年推出的《Pong》是一款双人对战游戏,尚无AI敌手。到了1978年,街机游戏《太空侵略者》(Space Invaders)成为AI萌芽的重要标志。它通过逐步加快敌人速度、根据玩家行为调整节奏等方式,初步实现了动态响应玩家的“AI行为”。
更具代表性的是1980年的《吃豆人》(Pac-Man)。游戏中的四只幽灵AI以不同的“个性”驱动行为:Blinky(红)追击、Pinky(粉)伏击、Inky(青)协助伏击、Clyde(橙)则会临时脱离追击。这些逻辑虽为硬编码规则,但高度差异化的行为表现,使得敌人展现出拟人化的特性,成为AI行为设计的经典案例。
在此期间,程序化内容生成也悄然起步。例如,《Beneath Apple Manor》(1978)和《Rogue》(1980)开始采用随机生成地下城地图以提升可重复游玩性。而1984年的《Elite》则以32KB的存储空间生成包含数千个星球的庞大宇宙,通过种子算法重现宇宙规模,展示了PCG的早期潜力。
2.2 技术确立阶段(1990s)
进入90年代,随着图形界面和系统性能的提升,AI不再仅是简单的行为触发,而是逐渐系统化。最具代表性的技术突破是路径寻路算法(Pathfinding)与有限状态机(Finite State Machine, FSM)。
\(A*\)算法成为路径规划的行业标准,为NPC提供避障路径、目标追踪功能。例如,在RTS游戏《沙丘2》中,单位虽然偶有直线冲撞问题,但AI开始尝试计算路径。《魔兽争霸》和《星际争霸》系列进一步强化了多单位寻路能力,使AI可协调移动和战斗。
与此同时,FSM被广泛应用于控制NPC状态切换。例如,《半条命》(1998)中,士兵敌人的AI通过巡逻、发现玩家、攻击、撤退等状态组成的FSM,实现了敌人协同作战、避让手榴弹等战术行为。FSM的优点在于逻辑清晰、行为可控,但随着复杂性提升,状态数量激增可能导致维护困难。
在AI学习方面,《Creatures》(1996)是一项突破:游戏中生物的“神经网络大脑”可通过强化学习接受玩家正负反馈,自主调整行为。这种“涌现式AI”虽未广泛普及,却在当时展示了AI个体学习的潜力。
在内容生成上,《上古卷轴II:匕首雨》(1996)实现了数百万平方公里的地图世界,其中绝大部分由PCG生成,为未来大规模开放世界游戏打下基础。《模拟人生》(The Sims)亦采用多智能体系统,通过简单规则模拟NPC之间复杂互动,展现了模拟AI系统在非战斗类游戏中的潜力。
2.3 多样化扩展阶段(2000s)
2000年代,AI技术在游戏开发中的应用大幅扩展,出现了诸如行为树(Behavior Tree)和目标导向动作规划(GOAP)等结构化行为建模方式。
《光晕2》(Halo 2, 2004)采用行为树构建敌人AI,允许NPC根据环境切换行为模式,如巡逻、攻击、撤退、投掷手雷等,并能针对特殊事件(如指挥官死亡)触发恐慌子行为。《F.E.A.R.》(2005)则运用GOAP,使AI士兵能基于当前情境动态规划一系列动作,展现更高层次的战术灵活性。
行为树的模块化设计和可重用性,让开发者能在不引起系统崩溃的前提下轻松添加新行为,使其迅速成为游戏AI设计的主流。
在程序生成方面,《上古卷轴III:晨风》和《IV:湮灭》分别结合PCG与手工修饰,创造广阔而细致的世界。尤其《湮灭》推出的“Radiant AI”系统试图赋予NPC动态日常计划(吃饭、工作、睡觉),虽然最终因系统复杂性而简化,但概念深远。另一个爆款是《Minecraft》(2011年开发),完全依赖PCG构建无限方块世界,PCG不再仅是工具,而成为游戏核心玩法。
AI也开始应用于玩家建模。《求生之路》(Left 4 Dead)引入“AI导演”,根据玩家当前情绪强度动态控制僵尸生成、资源投放和节奏张弛。微软的《极限竞速》系列自2005年起推出“Drivatar”系统,用机器学习记录玩家驾驶行为,训练AI车手模仿其风格,用于玩家离线时的对战。
AI在测试中的应用亦开始萌芽。开发者使用自动化脚本或机器人进行关卡通关测试和数值平衡模拟,初步展现AI在游戏设计流程中的辅助功能。
2.4 数据驱动阶段(2010s)
2010年代,随着深度学习技术的发展,AI在游戏中的应用逐步向数据驱动转变。最具代表性的事件是DeepMind的AlphaGo(2016)击败围棋世界冠军,引发全球关注。此后,AlphaStar(2019)在《星际争霸II》中达到宗师水平,表明强化学习(RL)和深度神经网络结合后,AI可在实时战略游戏中超越人类。
虽然这些AI尚未直接集成到商业游戏中,但它们的成功推动了游戏公司采用RL进行自动化测试。例如,EA展示了RL代理可以快速通关关卡、检测不合理设计,甚至模拟不同角色配置以优化游戏平衡。
游戏内AI方面,程序化叙事进入新阶段。《中土世界:暗影魔多》的“复仇女神系统”根据玩家行为动态生成敌人档案、记忆与成长,使每名玩家遭遇的对手与恩怨故事完全独一无二。Rockstar的《荒野大镖客2》则建立了一个数百名NPC拥有日常行为、动态记忆与多样响应的沉浸式世界。
程序内容生成亦进入高潮。《No Man's Sky》(2016)通过程序算法生成18亿亿颗星球,挑战游戏内容生成极限。尽管初期遭遇“程序化燕麦片”批评,但后续版本增加人工润色与机制丰富性后获得好评。与此同时,独立游戏如《Spelunky》、《FTL》、《Into the Breach》等以高质量程序关卡证明PCG依旧可塑性极强。
AI驱动的叙事也逐渐成型。文本冒险游戏《AI Dungeon》(2019)通过大型语言模型(GPT-2/3)即时生成剧情,使游戏主线不再预设,而是由玩家与AI共创。玩家只需输入文字,AI即可生成剧情响应和下一步走向,成为程序化叙事的重要实验平台。
此外,玩家行为数据驱动的个性化游戏设计日趋成熟。《生化危机4》与《Left 4 Dead》的AI动态难度系统作为早期样本被广泛效仿。游戏开发者通过遥测数据监控玩家表现,自动调整资源分配、敌人配置或任务类型,形成“隐形AI导演”机制。
2.5融合创新阶段(2020s至今)
进入2020年代,AI在游戏中的角色发生质变,不仅是系统行为的驱动者,还成为了游戏内容本身的合作者与创造者。
大语言模型(LLM)如GPT-4进入游戏开发领域,促使NPC对话从预设转向实时生成。英伟达在2023年推出ACE技术,将语音识别、自然语言理解、LLM对话生成与语音合成整合,NPC可即时理解玩家问题并进行自然回答与表情反馈,初步实现“开放式NPC对话”。
AI角色行为也日益智能化。索尼开发的Gran Turismo Sophy赛车AI通过强化学习达到专业水准,学习驾驶线、超车、守规等策略,对人类玩家实现压倒性胜利。这预示未来游戏或将加入离线训练的神经网络NPC,使敌人不再“预编程”,而是“训练得来”。
PCG结合AI进一步拓展,《超级马里奥》地图生成、角色美术生成、环境纹理合成等均可通过生成模型(如GAN)或语言模型辅助完成。不仅如此,一些项目已实现LLM根据玩家行为自动撰写支线任务、道具背景故事与动态对白。
玩家个性化系统进入2.0阶段:AI根据玩家习惯适时调整游戏节奏、任务配置甚至叙事风格。例如,《生化危机2 重制版》中Tyrant(X先生)的行为由AI动态控制,会根据玩家脚步声、战斗偏好、行动节奏调整追踪方式,形成完全不同的惊吓体验。
AI在开发流程中的地位进一步上升,部分工作室已使用AI进行实时关卡测试与BUG发现,甚至辅助关卡设计。“AI助手”可在编辑器中分析当前地图热区、预测玩家行为偏好,提示设计优化方向。
程序化叙事也趋向智能化。GDC 2025中提出“无限小说”概念:游戏通过AI动态编织剧情,避免传统剧情分支限制,实现真正的“你玩你自己的故事”。结合大语言模型与AI导演系统,玩家行为与情节发展深度耦合。
3 游戏AI的核心应用
游戏 AI 在现代游戏开发中已不再仅仅是“会走路的敌人”,它已渗透进从底层逻辑构建到顶层玩家体验的方方面面。以下是游戏 AI 的五个核心应用维度。
3.1 非玩家角色(NPC)行为
游戏中的NPC行为决策是AI最传统也是最核心的应用领域之一。主流的方法从简单到复杂,大致经历了有限状态机(Finite State Machine, FSM)、行为树(Behavior Tree, BT)再到更高级的规划算法和学习算法等阶段。有限状态机通过预定义状态和转换来控制NPC,例如早期的《半条命》等FPS游戏就采用了FSM来实现敌人的状态切换。行为树在2000年代中期流行起来,由《光晕2》等游戏推动成为业界标配。GOAP(目标导向行动规划)则是一种自动规划技术,由《F.E.A.R》首次引入使敌人表现出灵活多变的战术。GOAP为NPC设定一系列可选动作及其前提/效果,由AI实时规划达到目标的动作序列,使NPC表现出动态的策略选择。
除了FSM和行为树等确定性方案,一些游戏AI决策引入了实用主义决策(Utility AI)模型,通过对多种行为打分选取权重最高的行动。强化学习等算法也备受关注,例如研究中用深度强化学习训练的FPS对手、多智能体协作战术等。然而在实际商业游戏中,强化学习尚未大规模采用,原因在于不可控和调试难:设计师往往需要精确控制NPC行为(如巡逻路径、反应时间、概率触发等)以实现预期体验。目前大多数游戏更倾向用脚本明确规定NPC行为(例如“每隔15秒举枪巡视一次,发现玩家有X%概率退缩、Y%概率直接攻击”),并通过调整参数来平衡难度,而不是让NPC自己学。可预测的行为也方便设计多人游戏的公平性,因为NPC表现一致,不会随机偏离。总的来说,在NPC行为控制上,经典算法稳健可控,因此依然主导着绝大多数游戏AI开发,而学习型算法多处于实验与点缀性质,如何平衡智能涌现与可控性、如何减少训练和调试成本,仍是工程上的一大挑战。
3.2 程序化内容生成(PCG)
程序化内容生成(Procedural Content Generation, PCG)指利用算法自动创建游戏内容的技术,已经有数十年应用历史。它广泛用于生成游戏中的地图地形、关卡布局、道具装备、剧情任务等各类内容,提高了内容产出的效率和多样性。经典案例如1980年的Roguelike鼻祖《Rogue》随机生成地下城迷宫,90年代《暗黑破坏神》系列采用地图与掉落的随机生成提高可玩性,再到《我的世界》通过噪声算法无限生成地形、《无人深空》利用分形算法和规则组合创造18个独特星球。这些游戏通过PCG实现了海量且独一无二的游戏空间,极大拓展了玩家的探索体验。
现代PCG实践常是算法生成+人工干预相结合。完全无限制的随机生成容易导致内容质量参差不齐或重复无聊。实际开发中,通常由设计师制定规则边界,AI在约束内随机。例如开放世界游戏会先由美术设计地貌基调,再用PCG填充植被岩石,最后人工微调关键场景。这种受控生成确保既有丰富度又不失设计意图。著名开放世界如《地平线:零之曙光》《荒野大镖客2》《GTA V》等据报道都在场景制作中使用了PCG来批量布置自然元素和支线事件,同时通过人工校准保持内容的真实性和趣味。
3.4 个性化游戏体验
个性化游戏体验指游戏根据玩家的行为和喜好,动态调整游戏内容或难度,为不同玩家提供定制化的体验。这在设计上包含自适应难度和动态内容响应两方面。最经典的是动态难度调整(Dynamic Difficulty Adjustment, DDA)技术:游戏实时监测玩家表现并调节挑战强度,使菜鸟不会过早受挫、高手也不会感到无聊。例如Valve的《求生之路》系列引入了著名的AI导演(AI Director)系统,根据玩家团队状态动态生成敌人和资源。当玩家状态良好时,AI导演会加大僵尸潮攻击频率和数量,制造紧张感;若玩家频频受伤,则减少敌人给予喘息机会。每次游玩僵尸的出现节奏都不同,保证了紧张刺激但张弛有度的体验。
AI个性化还体现在对玩家风格的适应上。例如一些竞速游戏中有橡皮筋AI机制:若玩家落后太多,AI对手会放慢速度,反之则加速,以保持比赛紧张(尽管这是简单规则实现,但也是一种适应性)。更先进的,如任天堂游戏在玩家连续失败时会提供辅助道具,这些都是根据玩家表现调整内容难度的设计。Capcom在《生化危机4》等也暗藏难度调节机制:玩家若总是精确爆头、毫发无伤,则游戏悄悄提高敌人伤害和数量,反之降低。通过这些隐性调整,让不同水平玩家都保持恰当的挑战和成就感。
3.5 自动化测试与数值平衡
测试与数值平衡是开发过程中耗时耗力但至关重要的环节。通过自动化测试和智能平衡分析,大幅提升开发迭代效率。传统上,游戏测试主要依赖人工和脚本编写,但复杂游戏中可能的状态组合极其庞大,完全人工测试往往难以覆盖所有情况。为此,开发者开始使用AI测试机器人来自动执行游戏,寻找bug和不平衡之处。
AI自动测试的思路是赋予软件代理和玩家一样的输入控制,让它反复尝试各种操作组合,监测是否出现异常行为或崩溃。Ubisoft的La Forge部门则提出打造“超级测试员”:用AI模拟进行数百万次游戏对局,专门搜寻必胜组合、漏洞利用和数值失衡等问题。例如在格斗游戏中,AI可以尝试各种连招,如果发现某一连招几乎无解地必胜,这就提示设计存在漏洞,需要削弱相应招式威力。又比如在卡牌游戏里,让AI打上万次对局统计胜率,如果某张卡有90%以上胜率,那基本判定其过强需要平衡。这样的AI测试能够在短时间内覆盖远超人工的游戏局数,从而高效发现高端玩家才能触及的失衡点。
游戏AI在测试与平衡领域的应用能显著降低人工成本、提高问题发现速度。尤其在大型多人游戏、复杂开放世界中,AI自动测试已逐渐成为标配工具。未来我们或许会看到更加智能的“虚拟QA”,可以模拟真实玩家行为来进行高度逼真的测试,为开发者提供更深入的洞察。例如监测到某新关卡大部分AI玩家玩到一半就退出,则暗示关卡设计不合理。通过这些手段,开发团队可以更快迭代打磨游戏品质,打造既无漏洞又平衡好玩的游戏体验。
3.6 智能叙事与情节生成
让AI参与游戏叙事创作,是游戏AI最具想象力的应用之一。传统游戏剧情多是线性或分支脚本,剧本固化而缺乏动态变化。而引入AI的目标是在保持整体叙事架构的同时,让剧情细节或分支根据玩家行动自动生成,从而提高故事的互动性和重复可玩性。
近年来,随着自然语言处理的飞跃,生成式大语言模型(LLM)在游戏叙事中展现出巨大潜力。以ChatGPT为代表的语言模型能够根据提示生成连贯的文本,这为游戏实时对话和剧情描述生成打开了大门。玩家可以输入任意行动,AI会继续描述故事推进,剧情走向天马行空、不拘一格。这种体验近似无穷的互动小说,每个玩家的冒险都是独特的。然而纯粹依赖AI模型会遇到一致性和可控性难题:模型可能产生违背设定的情节或风格跑偏的对白(所谓AI的“幻觉”问题)。例如在严肃奇幻背景里突然插入现代梗,或者NPC性格前后不一致。这会破坏沉浸感,甚至可能生成不当内容,引发伦理风险。
尽管困难重重,AI赋能叙事代表了游戏沉浸感的新前沿。想象未来RPG中,每个NPC都能根据玩家身份即兴发挥独特对话,每次新开档都会生成不同的支线故事和结局,再没有千篇一律的剧情套路。这将大大增强游戏的重玩价值和沉浸感。在这个过程中,游戏编剧的角色也会演变,更像是剧情策划+AI训练师,通过设置框架和示例,引导AI创作出符合世界观的故事内容。总之,AI在游戏叙事领域的应用仍在早期摸索,但无疑为互动叙事打开了想象空间。也许有朝一日,我们将玩到完全由AI实时生成的开放结局剧情,每个玩家都真正走出一条独一无二的英雄之旅。
4 经典的游戏AI技术
4.1 随机概率决策
随机概率决策是游戏 AI 最古老也最有效的手段之一。它的核心目标是通过引入不确定性来打破 AI 行为的周期感和死板感。在 Godot 中,这通常表现为利用随机数驱动的逻辑分支,让 NPC 在相同的情境下做出略微不同的反应。

优缺点分析:
优点:
- 提高AI行为的不可预测性,让玩家无法轻易摸清固定套路,从而使游戏体验更有新鲜感。适度的随机性可模拟人类决策中的偶然因素,使NPC表现更逼真。
- 实现简单,对性能要求低。只需在决策逻辑中加入随机数判断,就能为现有规则添加变化,无需复杂算法支持。
缺点:
- 过度随机可能导致AI行为缺乏逻辑连续性。当NPC表现得毫无规律甚至自相矛盾时,玩家可能感到困惑或挫败,认为AI“不讲道理”或“不公平”。
- 随机特性增加了设计平衡难度。开发者无法严格保证AI难度的一致性:有时随机使AI过强或过弱,可能破坏游戏原有的节奏和平衡性,需要通过大量测试来调整概率参数。
设计方法
-
拟人化模拟:人类在决策时会受到体力、情绪或意外干扰。AI 引入随机性(如 10% 的概率出现“发呆”或“射击失误”)能有效模拟这种不完美,让玩家感受到一个更真实的对手。
-
权重控制:这是随机决策的高级形式。开发者不再是“抛硬币(50/50)”,而是根据敌人的个性设置概率。例如,狂暴型怪物有 80% 的概率攻击,20% 的概率咆哮;而谨慎型怪物则有 60% 的概率后退。
-
与其它技术结合:开发者会限定随机性的触发条件和范围,让随机行为在合理情境下才出现,从而避免彻底的无序。例如在“进攻”的状态行为下,再通过随机概率决定是“轻击”还是“重击”。
Godot 实战
Godot提供了完善的随机数生成功能,可用于AI中的随机行为、概率决策等。主要类为 RandomNumberGenerator(随机数生成器),使用PCG32算法生成伪随机序列。开发者可以创建该类实例并使用其方法生成各种随机值。例如,randf() 返回0到1之间的随机浮点,randf_range(from, to)返回指定范围内随机浮点;randi()和randi_range(from, to)则生成随机整数。Godot还提供了加权随机和正态随机等高级用法:rand_weighted(weights) 根据给定权重数组返回随机索引(用于加权概率选择);randfn(mean, deviation) 按高斯分布生成随机数,可设定均值和标准差。
4.2 有限状态机(Finite State Machine)
有限状态机(FSM)是游戏 AI 开发中应用最广泛、最经典的架构之一。它通过将复杂的行为逻辑拆解为一系列离散的状态(State)以及连接它们的转换(Transition),让 NPC 能够根据环境变化做出有条理的反应。例如守卫的AI可以设计为:初始处于“巡逻”状态,当侦测到玩家进入视野则转换到“警戒”或“攻击”状态;若玩家逃出视野一段时间又转换回“巡逻”。每个状态封装相应动作(巡逻时四处走动,攻击时追击和开火等),转换条件则根据感知信息或计时器触发。FSM也被广泛用于角色动画控制(不同移动姿态之间的切换)和简单剧情对话流程等,因为状态机图形直观,方便设计和调试。

优缺点分析:
优点:
- 逻辑直观,易于理解和调试。 FSM将复杂行为划分为若干独立状态,每个状态逻辑相对简单,转移关系有限。程序流程就像清晰的“盒子-箭头”图,开发者和设计师很容易检查和调整。这一点在实践中极为重要:当AI行为不符预期时,FSM的明确定义使得追踪问题并修改变得相对简单。
- 实现成本低,执行效率高。 FSM多以硬编码或简单的条件判断实现,运行时只需检查当前状态及转换条件,计算开销小且适用于资源受限的环境。同时,其结构决定了状态数量和转移都是有限集,使得AI决策过程具有确定的最坏情况性能。
缺点:
- 扩展性差,复杂度爆炸。 随着AI行为需求增加,FSM状态数可能急剧膨胀,状态之间的转换关系更会呈几何级增长。当状态和转换非常多时,维护整个状态机变得困难,状态图容易演变为杂乱的“意大利面条”结构。这种复杂度问题在大型游戏AI中尤为突出,增加新行为可能需要增加状态并更新多个转换,稍有不慎就引入漏洞。
- 表现有限,缺乏灵活性。FSM本质上遵循预先脚本化的规则,NPC只能在设计者定义的状态和路径中行动,缺乏自主学习或智能调整能力。当遇到未覆盖的情况时,FSM可能无响应或表现出死板行为。相对于更复杂的AI模型,有限状态机难以表现出随机性或连续性的决策变化**(除非人为加入随机规则),在模拟高智能角色时显得不够逼真。
针对有限状态机在大型行为系统中的局限,业界和学界提出了多种改进和替代方案。分层状态机是一种常见做法,即将庞大的状态机拆分为多个子状态机(模块)分别管理,例如角色的移动、攻击、感知各自一个状态机,再在高层用一个总状态机调度,以减少单一图的复杂度。
设计方法
设计一个健壮的 FSM 通常遵循以下核心要素:
- 状态封装(State):每个状态只负责一件事情。例如“巡逻状态”负责移动,“攻击状态”负责开火。状态通常包含进入(Enter)、执行(Update)和退出(Exit)三个生命周期函数。
- 转换条件(Transition):定义从 A 状态跳转到 B 状态的“触发器”。例如:“如果(玩家距离 < 5米)则切换到追击”。
- 分层改进(HFSM):为了解决复杂度爆炸问题,现代设计常采用分层有限状态机。例如,角色处于“战斗”大状态下,内部可以再细分为“填装弹药”、“寻找掩体”等子状态,从而简化顶层逻辑图。
Godot实战
在 Godot 中,虽然官方没有内置名为 FSM 的节点,但其基于树状节点的架构为实现 FSM 提供了得天独厚的条件。节点即状态(Node-based FSM)是 Godot 社区最推崇的设计模式。你可以创建一个 StateMachine 节点作为父节点,并为每一个行为(巡逻、攻击)创建一个子节点脚本。父节点持有当前活动节点的引用,并在 _physics_process 中调用活动节点的逻辑。切换状态时,只需调用父节点的 change_to("Attack") 方法。
Godot 的 AnimationTree 节点中的 State Machine 模式实际上是一个可视化的 FSM。它不仅能控制动画,还可以通过监听信号来驱动游戏逻辑。对于依赖动画表现的 AI(如 Boss 阶段转换),这是最直观的实现方式。
对于追求极致性能和复杂逻辑的开发者,LimboAI 是目前 Godot 生态中最强力的 AI 插件。它将层次化状态机(HSM)与行为树(BT)完美融合,提供了专业级的可视化编辑器。底层使用 C++ 编写,支持在数千个 Agent 上同时运行复杂逻辑。运行时可以实时查看 AI 当前处于哪个状态、哪个分支正在被激活,极大地降低了 AI 调试的痛苦。
4.3 视野感知与避障
如果说状态机是 AI 的“大脑”,那么感知与避障就是 AI 的“眼睛”和“双腿”。感知系统决定了 AI 何时能“发现”玩家,而避障技术则保证 AI 在复杂环境中移动时不会显得愚蠢。

优缺点分析:
优点:
- 感知系统让NPC具备基本“觉察”能力,使游戏世界更逼真。玩家不能随意在敌人眼皮底下行动,必须考虑隐藏和噪音,增加了游戏的策略深度和挑战。同时,NPC对环境变化(如听到同伴的呼喊或看到火光)做出合理反应,提高了AI的可信度。
- 避障功能保证NPC移动路线流畅,不会愚蠢地一直撞墙或卡住,有效避免常见的AI穿模、乱转圈等现象,使NPC行动看起来更聪明。。
缺点:
- 感知系统往往需要频繁的物理检测(如每帧对多个NPC做视线射线检测或范围检测),在NPC数量很多的情况下会增加CPU负担。特别是以前采取简单碰撞体积触发作为感知机制时,一旦场景中NPC和触发区域过多,可能出现性能问题。为此开发者需要在感知刷新频率、检测精度上做权衡,并利用空间划分、批处理等优化技术。
- 避障算法参数选择不当可能导致NPC躲避动作过剧烈(不停左右闪避)或不够及时(仍然碰撞),调优这些行为需要经验。如果遇到非常复杂的动态环境(如多个NPC同时在狭窄通道躲避彼此),简单算法有时会失败或陷入局部振荡,需要引入更复杂的协同避让策略。
设计方法
视野感知(Visual Perception):视野感知的典型实现是为NPC设置视野锥体(Field of View)和视线遮挡(Line of Sight)判定。只有玩家角色进入NPC的视野角度并且无障碍遮挡时,NPC才能“看见”玩家。
- 范围检测:一般会使用圆锥体或扇形区域确定“警戒区”。
- 视线校验(Line of Sight):即使目标在范围内,也必须通过射线检测确认中间没有墙壁遮挡。
- 延迟识别:为了增加容错,通常会加入一个“警觉值”条,只有玩家在视野内停留一定时间,AI 才会进入攻击状态。
避障技术(Steering Behaviors):避障技术则属于运动层面的AI,使NPC在移动过程中自动检测前方障碍物,并调整路径或方向以避免碰撞。
- 射线预判:在 AI 移动方向的前方射出一条或多条的探测线(左前、正前、右前)。
- 转向力(Steering Force):当射线撞击障碍物时,给 AI 施加一个垂直于障碍物表面的推力,使其平滑地滑过障碍,而非直接撞停。
Godot 实战
Godot 虽然没有直接命名为“视野”的节点,但其强大的物理系统提供了完美的实现方案:
核心组合是 Area2D/3D + RayCast2D/3D。在AI角色下添加一个Area2D,并赋予扇形或圆锥形的碰撞形状作为视野区域。当玩家物体进入Area时,会触发body_entered信号,表示目标进入了AI的视野范围。当需要判断是否有遮挡时,可从AI位置向目标位置发射一条 RayCast2D 射线,调用get_collider()函数以检测射线是否碰到目标。如果射线直接命中目标,表示之间无障碍物,AI即可“看见”目标;若射线被墙壁等其他物体阻挡,则目标虽在范围内但不可见。这样就实现了视野感知和视线判断的基础功能。
此外,Godot 的 NavigationAgent2D/3D 节点内置了 RVO(Reciprocal Velocity Obstacles)自适应避障算法。你只需开启 avoidance_enabled 选项,NPC 在移动时就会自动避开带有 NavigationObstacle 标签的其他角色或物体。这对于处理“多个 NPC 挤在一起”的情况非常有效。
如果你需要更复杂的群体行为(如鱼群、鸟群或流体般的士兵冲锋),推荐使用社区里GDQuest团队开发的 Steering AI Framework。此框架支持2D/3D环境下的寻路、分离、队列、游走等行为组合。这类框架通常通过射线、扇区检测来感知邻近障碍,并计算转向力调整运动方向,实现更平滑的避障运动。在需要模拟群体AI(如鱼群/鸟群)的场景,steering行为库也提供了“分离-对齐-凝聚”等算法让多个AI避免彼此碰撞。
4.4 寻路导航(Pathfinding and Navigation)
如果说感知是 AI 的眼睛,那么寻路导航就是 AI 的大脑地图。它让 NPC 能够避开障碍物,在复杂的关卡中规划出一条通往目标的最佳路径。在现代游戏开发中,寻路不仅仅是单纯的数学计算,更是一套集成了地形抽象、路径搜索与动态修正的综合系统。

优缺点分析
优点:
- 高效求解路径,保障AI行动合理性:借助\(A*\)算法等,NPC几乎总能在复杂地图上快速找到一条可到达目标的路径,而不会陷入原地打转。\(A*\)以启发式引导搜索,能在毫秒级得到接近最短的路径,是游戏开发中事实上的标准算法。有了路径规划,NPC行动就具备了全局视野:知道何处有墙壁、水域等不可通行区域,避免了蠢撞死路的情况,大幅提升AI可信度。
- 导航网格优化性能与路径质量: NavMesh用较少多边形精确描绘可行走区域,省去了在巨大空旷地带创建海量节点的浪费。因此路径计算更快,内存占用更低。同时网格上的寻路路径更贴合地形,避免了像方格那样锯齿状的拐弯,NPC移动线路显得自然流畅。导航网格还支持跨层路径(如上下楼梯),满足立体关卡需求。
- 易于结合高级AI逻辑:寻路结果(路径点序列)可供更高层的AI决策使用,例如结合战术选择:AI可以评估多条路径的曝光度、长度等选择最佳路线。寻路系统也能与掩体系统结合,找到一条经过掩体的安全路径。这些都拓展了NPC行动的战术多样性。
缺点:
- 动态环境适应性有限:传统寻路对静态地图效果很好,但遇到频繁变化的场景(如可破坏环境、移动平台)会遇到困难。导航网格预先烘焙生成,更新代价高,若环境改变需要重新生成网格,无法实时完成。此外\(A*\)在规划时假定环境固定,如果前方道路突然被堵,NPC可能按照旧路径撞上障碍。因此需额外机制(如定期重新寻路、或结合避障临时绕路)来处理动态变化。
- 多智能体/大规模寻路开销: 当游戏中有大量NPC同时寻路时(例如上百单位同时移动的战争游戏),\(A*\)计算总量和路径碰撞问题会带来性能与效果挑战。每个单位各自寻路可能导致路径互相干扰(挤在一起或频繁重算)。为此需要更复杂的技术(如分层寻路、流水线式路径规划或流场(Flow Field)寻路)来优化大规模场景下的效率。这增加了开发难度。
设计方法
几乎所有需要NPC移动的游戏都会用到寻路导航系统。例如RTS即时战略游戏中,玩家命令一队士兵移动到某点,AI会用寻路算法为每个士兵计算一条绕过障碍的行军路线。又如开放世界RPG里,NPC需要在城市街道漫步或跟随玩家同行,开发者会在场景中烘焙生成导航网格,然后NPC通过调用引擎的导航系统获取路径点列表,再逐一朝这些点移动,完成长距离移动。寻路系统还能结合动态障碍更新:如果途中出现新的障碍(如关上的门或塌方的道路),AI可以触发重新寻路或使用备用路径数据。
-
\(A*\)算法(启发式搜索):它在地图网格或导航图上搜索代价最低的路径,被广泛认为是游戏中最快且效果最好的路径算法。\(A*\)利用启发式估计引导搜索方向,大幅减少遍历节点数量,因此能够在复杂地图上实时算出近似最优路径。
-
导航网格(NavMesh):现代寻路通常基于导航网格(NavMesh)而非简单方格地图。导航网格将游戏地形抽象为一系列多边形区域,NPC只允许在多边形表面行走。这避免了在大片空旷区域生成过多节点,提高了寻路效率和路径质量。导航网格还能自然地表示斜坡、高低层等复杂地形,比规则网格更灵活。
-
路径跟随与平滑(Path Following):寻路返回的是一系列途径的航点。AI 需要通过“拐角切削”或曲线插值,让移动看起来像是在行走而非机械的折线滑动。
Godot 实战
Godot 提供了开箱即用的高性能导航架构,其核心由 NavigationServer 驱动,并通过以下节点实现:
-
NavigationServer:底层服务器模块,负责在导航网格上计算两个点之间的最短路径。NavigationServer采用导航地图(NavMap)的概念,将多个导航区域组合成一个整体,并在内部使用\(A*\)算法寻找路径。开发者一般不直接调用NavigationServer,而是通过更高级的节点接口。
-
NavigationRegion:导航区域节点,承载一块
NavigationMesh资源(通常由场景几何体烘焙生成),定义可行走区域。多个Region加入同一地图后会自动连接相邻边界形成连续导航空间。可以启用/禁用区域,或通过navigation_layers位掩码划分楼层、阵营等不同寻路层级。 -
NavigationLink:导航链接节点,用于连接不连续的导航网格区域。例如角色可通过楼梯、传送门、跳跃点等在不同网格间移动时,可放置NavigationLink来指明两个区域间的特殊通路。Link可设为单向或双向,并可配置代价(影响路径计算权重)。注意,链接只告诉寻路算法这些点可达,实际通过跳跃等动作需由角色AI脚本处理。
-
NavigationAgent:导航代理节点,绑定到游戏中的移动角色上(需作为
CharacterBody等Node节点的子节点)。它充当NavigationServer接口的高级封装:在设置目标位置后,Agent会请求服务器计算路径,并逐帧给出下一步移动目标或直接提供避障后的速度向量,辅助角色平滑移动。开发者可连接其信号(如navigation_finished、target_reached等)来知道AI是否到达目的地或路径阻塞,并通过get_next_path_position()等方法获取下一个航点进行移动。 -
AStar2D/3D:除了基于导航网格,Godot还提供通用的\(A*\)寻路类
AStar2D和AStar3D。这些类用于自定义图路径规划,比如基于网格的地图或离散节点网络的寻路。它可以在代码中手动添加顶点和边,赋予权重,再调用get_point_path()获得两点间最短路径。如果游戏需要完全自主控制寻路算法,AStar类是理想选择。它也常用于回合制或格子地图的AI移动。相比NavigationServer,AStar不依赖导航网格,适用范围更广但需要自行构建图数据。
4.5 程序化内容生成(Procedural Content Generation)
程序化内容生成(PCG)是游戏开发中的“炼金术”。它通过算法和预设规则自动创造游戏资源(如关卡、地形、装备),而非由开发者手工逐一摆放。PCG 的核心在于随机性与约束性的平衡:利用随机种子(Seed)驱动算法,在既定的设计框架内产生无穷无尽的变化。

优缺点分析
优点:
- 节省开发成本,提高效率: 程序化生成能在不显著增加人力的情况下快速产出海量内容。对于大世界游戏或内容消耗快的游戏,PCG降低了关卡设计、美术制作的压力,让小型团队也能构建大型游戏世界。开发者可以把时间投入规则设计和打磨上,由算法来填充细节。此外,某些基于规则的生成还能自动适配不同参数(如地图大小、难度),提高内容重用性。
- 增强可重玩性(Replayability):由于PCG带来的内容多样性,玩家每次游戏都会遇到不同的地图布局、事件组合,避免了“一次通关便索然无味”的情况。随机生成的关卡让游戏充满未知,增加了探索乐趣和挑战,延长了游戏寿命。很多Roguelike或生存游戏以PCG为核心卖点,玩家乐于反复游玩去体验新的组合。
缺点:
- 控制与质量保证难度高:让算法生成有趣且合理的内容是PCG最大的挑战之一。纯随机内容若缺乏结构,可能导致关卡杂乱无章、不知所措,降低游戏体验。开发者需要精心设计规则和约束,以确保生成结果既多样又连贯。即便如此,也难免出现一些无聊或不平衡的关卡。调试和测试PCG生成内容十分困难,由于内容每次不同,传统测试无法覆盖所有情形。这意味着可能存在某些极端随机种子生成了不可通关的关卡或漏洞,发现和修正具有相当挑战。
- 个性和艺术性不足:程序生成的内容往往中规中矩满足规则,却缺乏人工精心设计的亮点。比如随机地牢虽无限,但可能缺少剧本化的高潮桥段或精巧布局,让人感觉“千洞一面”。完全交给算法可能牺牲一些艺术巧思和情感表达。许多游戏实际上采取人工+PCG结合,人工打造关键场景,其余部分用PCG扩充,以兼顾独特性和规模。
设计方法
- 噪声函数(Noise Functions):使用如Perlin Noise等数学噪声函数生成自然起伏的地形和纹理。典型应用是《我的世界》的地形算法,通过对二维Perlin噪声采样构造山丘洞穴等。
- 细胞自动机(Cellular Automata):细胞自动机常用于洞穴/迷宫的生成:先随机填充初始网格,再根据简单的邻居生存规则多次迭代,使地图逐渐形成连通的洞窟形态。不少Roguelike游戏采用此法打造复杂迷宫。
- 波函数坍缩(Wave Function Collapse, WFC):从一个充满无限可能性的空白画布开始,通过随机选择第一个点并确定其状态,然后让这个选择的影响像波浪一样传播开来,限制其邻居的可能选择,一步步直到整个画布的所有格子都坍缩为唯一状态。
- 模块化拼接(Dungeon Prefabs):设计师先制作若干个标准房间(Room Prefabs),由算法根据“出口-入口”匹配规则将它们随机串联,既保证了单个房间的质量,又实现了整体布局的变化。
Godot 实战
Godot 引擎为 PCG 提供了底层支持与灵活的扩展接口,使开发者能高效实现自定义生成逻辑。
Godot 内置了 FastNoiseLite 类,封装了多种常用噪声算法。FastNoiseLite基于开源库,提供Perlin噪声、Simplex噪声、Cellular噪声等多种生成模式。开发者可配置噪声类型、频率、分形层数、振幅等参数,然后调用如 get_noise_2d(x,y) 获取二维噪声值,用于生成随机高度图、纹理图案,或结合TileMap阈值划分地形。噪声具有平滑连续的特性,非常适合模拟自然地形、纹理细节等。
Godot 的 TileMap 节点非常适合 PCG。结合 set_cell() 方法,开发者可以根据算法算出的数组瞬间铺满整个关卡。利用 Terrain Sets(地形集),引擎还能自动处理方块边缘的衔接,让随机生成的地图看起来自然连贯。
为简化常见PCG任务,社区提供了一些插件和库。例如Procedural Map Generator 插件,它是一个通用的程序地图生成工具,支持多种算法包括元胞自动机(Cellular Automata)、波函数塌缩(WFC, Wave Function Collapse)以及Gram-Elites方法。开发者可将其应用于TileMap,通过参数配置自动生成洞穴迷宫、随机迷宫等关卡。例如利用元胞自动机模拟洞穴、WFC生成具有规则的地形。该插件还附带示例场景便于测试效果。
4.6 机器学习和强化学习
在现代游戏 AI 的前沿,机器学习(Machine Learning) 正引领着一场从“人工编写规则”到“数据驱动决策”的变革。而作为其最引人注目的分支,强化学习(Reinforcement Learning, RL) 更是让智能体具备了在复杂环境中通过“试错”自我进化的能力。
机器学习 (ML):广义上是指让计算机利用算法从数据中找出规律。在游戏中,这表现为 NPC 能够通过分析玩家的历史操作(如出招频率、走位习惯)来动态调整自己的应对策略。
强化学习 (RL):这是 ML 的一种特殊范式。智能体(Agent)就像在迷宫中探险的孩子,通过状态(State)感知环境,采取动作(Action),并根据环境反馈的奖励(Reward)来修正自己的行为策略(Policy)。其终极目标是获得最大的长期累积奖励。

优缺点分析
优点:
- 能够处理复杂决策情形:相比人工规则,机器学习模型可以根据训练数据习得非常复杂的行为模式。例如神经网络可以综合数十上百种输入(距离、血量、敌人位置等)后输出决策,这种非线性映射关系往往超出人力直观编程能力。这使得ML有潜力在极其复杂的游戏环境下表现出高水平甚至超人的决策能力(正如AlphaGo在围棋上展示的)。对于一些传统AI难以调教的任务(如即时战略游戏的大规模战术决策),ML提供了一条新思路。
- 决策表现多样且可能更“自然”: 通过学习人类数据或从目标导向出发优化,ML驱动的NPC行为中可能涌现出人类式的细节或创造性的策略,增加游戏对战的新鲜感。机器学习还可以赋予不同NPC不同风格,因为训练数据或随机初始化不同,每个模型都有独特倾向,使游戏世界的角色不再千篇一律。
- 可以挖掘最优策略,达成人类难以企及的表现: RL算法通过海量训练,有能力找到复杂博弈问题的高效策略。对于一些没有现成解法的游戏决策,RL提供了自动探索途径。它往往能发现人类想不到的创新打法,给玩家造成惊喜与挑战。例如AlphaGo出现了出人意料却高明的下法。
- 自适应环境变化:理论上,RL智能体如果在游戏中持续学习,可以随着玩家策略演变不断调整对应策略,做到“知己知彼”。哪怕游戏环境规则变化(例如加入新道具、新地图),RL智能体也能通过继续训练重新适应,不需要开发者手动修改行为规则。
缺点:
- 不可控性与调试困难:机器学习模型(尤其深度神经网络)的内部决策逻辑对开发者而言几乎是黑盒,这在游戏AI领域是巨大缺陷。传统脚本AI出现问题时,设计者可以直接修改规则或参数;但如果一个ML驱动NPC做出了不合设计预期的行为(例如在不该逃跑时逃跑),很难直接定位原因并迅速修正。即使调整训练数据或奖励函数,也存在模型学不到或学偏的风险。游戏AI要求可控的体验,而黑盒模型的不可预测性让设计师无法精细掌控AI表现,这是ML应用于游戏最大的阻碍之一。
- 难以确保游戏性导向:在数字游戏里我们往往希望AI“适度地输给玩家”以提供娱乐,而让ML/RL自己学习往往会学出过于强大的策略。开发者可以尝试在奖励函数中加入“不要太难”之类的衡量,但实践证明调整这些激励非常困难,AI可能在“过强”、“过弱”、“怪异”之间来回摆动,难以稳定在理想中间状态。
- 训练成本和迭代周期长:训练一个高水平RL智能体需要反复试错成千上万次,这在游戏开发中难以大规模实践。每当游戏修改规则或属性,AI可能就要重新训练调整。而且训练过程中AI可能走很多弯路,开发者需要监控以确保其朝预期目标学习。相比之下,编写规则调参虽然费人工,但可以随时快速微调,迭代周期短;
设计方法
- 离线训练在线执行:在开发阶段使用 RL 训练出高水平的动作模型,然后将其导出为静态文件嵌入游戏。这样既保留了高智能,又规避了实时学习带来的崩溃风险。
- 模仿学习与行为克隆:开发者可以收集人类玩家的操作数据,再让 AI 观看人类玩家的录像进行“预热”,然后通过 RL 训练细化操作,使其行为风格更接近真人。一个实际例子是赛车游戏中的“AI车手”曾采用玩家比赛记录训练的模型,使AI驾驶风格更接近真人而非程序设定。
- 混合 AI 架构(Hybrid AI):这是目前最务实的做法。用传统行为树(BT)搭建逻辑框架,保证 AI 的基础行为可控;但在某些特定决策点(如射击预判、路径优先级评估)调用 ML 模型。
- 自动化测试(QA Bot):训练一个 RL 代理疯狂地玩游戏,利用其“寻找最优解”的天性去探测地图的漏洞、必胜的数值 Bug 或不平衡的技能组合。
Godot 实战
Godot当前没有内置的机器学习模块。有一些开源项目试图在Godot中直接实现部分机器学习算法:例如Godot AI Kit插件。这是一个用GDScript编写的AI算法库。包含简易的神经网络实现(支持多层感知机、激活函数,提供SGD、Adam优化)、卷积神经网络(用于图像识别)的演示,以及经典算法如决策树和启发式搜索等。由于GDScript执行效率限制,这些实现更适合作为教学或验证用途。
目前 Godot 生态中重要的RL开源框架是Godot RL Agents。它提供了一整套方案,使游戏开发者和研究者能够在Godot中训练复杂行为的智能体。其核心思想是将Godot场景包装成Gym接口风格的环境,AI算法可以控制游戏中的Agent执行动作、读取状态、获得奖励,从而运用强化学习算法训练。Godot RL Agents支持常见的深度RL算法,例如DQN(深度Q网络)、策略梯度等,并提供示例教程。通过该库,开发者可以让游戏中的NPC通过自我学习掌握技能。
在 Godot 中使用神经网络的推荐方式是:在 Python 中完成模型训练,并导出为 ONNX 格式。然后在 Godot 中通过 ONNX Runtime 加载模型,仅负责推理(Inference)。但是,Godot 需要 C++ 接口版本,技术门槛较高。
另一种常见且更灵活的替代做法是:将神经网络推理放在独立的 Python 进程或服务中运行。Godot 作为客户端,通过 Socket 或 HTTP 等方式向推理服务发送当前游戏状态,并接收模型返回的决策结果。这种架构将游戏逻辑与机器学习计算解耦,不仅降低了 Godot 端的复杂度,也便于模型的调试、更新和扩展,在 AI 游戏、强化学习和智能桌面应用中被广泛采用。
4.7 大语言模型(Large Language Models)
如果说强化学习赋予了 AI “行动的智慧”,那么大语言模型(LLM) 则赋予了 AI “语言的表达”。LLM 是一种基于深度学习的语言处理架构(如 Transformer),通过对海量人类文本的学习,使其具备了理解复杂指令、逻辑推理以及生成自然流畅对话的能力。
优缺点分析
优点:
- 对话灵活自然,提升沉浸感:相较固定的对话树,LLM赋予NPC“即时对答”能力,使玩家感觉像在和真正有思考的人物交谈。NPC回应可以更加上下文相关富有个性,不再千篇一律。玩家提出奇特的问题时,LLM也能给出合理的回答,而不是因为未覆盖到的问题而无言以对。这种开放式对话极大增强了游戏的剧情沉浸:玩家可以深入发问NPC背景、意见,获得丰富的信息和体验,仿佛NPC有自我意识般。
- 减少内容重复,扩展剧情分支:语言模型能够创造多样的表达方式,避免NPC每次都说相同的几句台词。例如路边守卫拦下玩家时,LLM或许每次都会有些不同的措辞或态度,防止玩家厌倦。同时,由于NPC对话不局限预设分支,玩家的自由度大大提高,可以尝试各种话题和交涉策略,可能触发一些以前罕见的对话情景。这为游戏剧情带来了更发散的可能,尤其在RPG等注重对话互动的游戏中,LLM让剧情不再仅沿几条主线发展,而是出现许多基于玩家语言选择的微分支。
缺点:
- 一致性和控制难题:大语言模型生成的内容具有随机性和即兴性,这在游戏中带来叙事一致性风险。如果没有严格限制,NPC可能说出与游戏设定不符的内容。例如明明某NPC不知道某秘密,LLM却可能基于上下文“猜”出并说给玩家,破坏剧情悬念。开发者必须设计复杂的提示和过滤机制,确保模型遵循角色背景和剧情需要,但即便如此仍难完全杜绝模型跑题或产出矛盾对白的情况
- 性能与资源开销:*大型语言模型参数量动辄数亿到数十亿,实时推断消耗的算力和内存相当可观。在本地运行大模型可能导致帧率下降,调用云端API又依赖网络且增加成本。尤其多个NPC同时对话时,如何在性能允许范围内运用LLM是个挑战。
设计方法
要让 LLM 在游戏中真正好用,通常需要构建一个“思维框架”。
- 提示词工程(Prompt Engineering):开发者不再编写台词,而是编写“人设”。例如:“你是一位隐居森林、性格古怪但博学的炼金术师,讨厌粗鲁的人,说话带有草药味。”
- 知识库注入(RAG, 检索增强生成):为了防止 NPC “胡说八道”,可以将游戏的背景设定集、历史地图、角色关系放入数据库。当玩家提问时,AI 先检索相关事实,再结合 LLM 组织语言,确保内容真实可靠。
- 情感状态机关联:将 LLM 生成的文本与 NPC 的表情和动作系统关联。例如,当模型判定回复内容属于“愤怒”时,自动触发 NPC 的拍桌子动画或改变音调。
Godot 实战
Godot 本身定位为轻量化引擎,不建议直接在主进程中加载动辄数 GB 的 LLM 模型,但它提供了强大的网络与接口能力来实现对接。
-
云端 API 集成(主流方案): 利用 Godot 的
HTTPRequest节点,可以轻松对接 OpenAI 或通义千问。核心逻辑是将玩家输入拼接到特定的 JSON 模版中,通过 POST 请求发送,解析返回的文本并显示在对话框中。利用await语法处理网络等待,确保游戏画面在 AI 思考时不会卡死。 -
本地私有化部署(进阶方案): 如果你希望游戏在离线状态下也能对话,可以利用 LocalAI 或 Llama.cpp 等工具在后台启动一个轻量级的推理服务器(如 Llama-3-8B)。Godot 通过本地端口(localhost)与其通信,既保证了数据隐私,又免去了 API 费用。
Godot 的插件市场(AssetLib)中已有多个开源工具,例如 OpenAI GPT Chat 插件。它允许在Godot中聊天并调用GPT模型,还可对代码进行分析。安装插件后,在Godot场景中添加对应节点,设置好API密钥,即可调用。
5 经典游戏《吃豆人》中的AI系统分析
《吃豆人 (Pac-Man)》是1980年问世的街机经典,其中的幽灵AI系统在当时属于最复杂的游戏AI之一。《吃豆人》的幽灵 AI 是有限状态机(FSM)与差异化算法结合的典范。设计者并非让四个幽灵简单地追逐玩家,而是赋予了它们不同的“导航目标”计算逻辑,从而产生了复杂的包围战术。促成了《吃豆人》经久不衰的玩法魅力。接下来,我们将深入分析原版《吃豆人》中幽灵AI的各个方面,包括四个幽灵各自的行为逻辑与个性差异、路径选择机制、三种AI状态及切换规则等。
5.1 四个幽灵的行为差异
《吃豆人》中每只幽灵都被设计出独特的“性格”,这实际上对应着不同的AI追踪策略。在日文原版中,它们的昵称直接点出了各自行为特征:“追赶者”、“埋伏者”、“多变者”和“愚笨者”,对应Blinky、Pinky、Inky、Clyde。美国版则将其称作Shadow(影子)、Speedy(速度鬼)、Bashful(害羞鬼)和Pokey(迟钝鬼),常用昵称即Blinky、Pinky、Inky、Clyde。下面分别介绍这四只幽灵在追逐模式下的目标定位策略与行为特点:
Blinky(红色幽灵)
Blinky的行为定位是“追踪者”。它总是直接以玩家当前的位置为目标进行追击,是最具有侵略性的幽灵。在追逐模式中,Blinky始终瞄准Pac-Man所在的网格(tile),因此它会执拗地沿最直接的路线尾随玩家。随着玩家吃豆子数量的增加,Blinky还会出现特殊的加速状态,俗称“巡航埃尔罗伊 (Cruise Elroy)”。例如,在第一关当迷宫中剩下20粒豆子时,Blinky变成Elroy状态,移动速度提升到不亚于Pac-Man的速度,并且从此刻起**即使进入分散模式也不再去固定角落,而是继续穷追玩家不放。当豆子剩余10粒时,Blinky会进一步提速,甚至超过Pac-Man的速度。也就是说,Blinky在末段会变得异常凶猛,永不停歇地追击玩家。这种直接而高速的行为使Blinky的轨迹最容易预测,但在后期也给玩家造成最大压力。
Pinky(粉色幽灵)
Pinky被称为“埋伏者”,它不会像Blinky那样直接瞄准Pac-Man当前位置,而是试图跑到玩家的前面埋伏。在追逐模式下,Pinky的目标位置是相对于Pac-Man前进方向前方四个网格处的坐标。简单来说,Pinky会预测Pac-Man的前进方向并以其前方4格作为追踪目标。例如,当Pac-Man向右移动时,Pinky瞄准其右侧4格远的位置;Pac-Man向下,则Pinky目标为其下方4格处;Pac-Man朝左,则以其左侧4格为目标;Pinky总体策略是占据玩家前方的路径,常与Blinky形成前后夹击之势,把Pac-Man围堵在角落。
Pinky的这一“四格埋伏”机制使其成为最容易被玩家“控制”方向的幽灵之一。由于Pinky始终追逐的是Pac-Man前方的点,玩家改变移动方向会立即改变Pinky的目标,从而可以在关键时刻诱使Pinky转向,对付方法是所谓的“摇头假动作”技巧。例如,当Pinky紧追玩家时,若玩家快速反向移动一瞬再立即折回原方向,Pinky可能因为玩家短暂的方向改变而提前拐弯,从而失去对Pac-Man的直接追击路径。运用这种技巧,玩家可以在关键路口欺骗Pinky选择错误的拐弯方向,进而甩开追兵。
Inky(蓝色幽灵)
Inky在四只幽灵中行为最为复杂和难以预测,在日文中被称为“Kimagure”,意为“善变、反复无常”。它的追逐目标计算包含了两个变量:Pac-Man的位置与方向,以及Blinky的位置。具体算法是:取Pac-Man前进方向前方两格处作为一个中间点,然后以Blinky当前所在位置指向该中间点的矢量为基础,将该矢量延长两倍,矢量延伸终点所对应的网格就是Inky的最终目标。简而言之,Inky的目标位置等于Pac-Man前方2格偏移点 + 从Blinky到该点的增量(放大一倍)。例如,如果Pac-Man朝右移动2格得到中间点A,Blinky当前位于点B,那么Inky将以B到A的方向继续延伸同样的距离,落在更远处的某点作为目标。这个复杂逻辑使得Inky有时表现得像Blinky一样直接追击,有时又会像Pinky那样提前绕到Pac-Man前方,还有时候则因为Blinky距离较远而自己在迷宫另一侧游荡,类似Clyde的行为。
总体来说,Inky是最难预测的幽灵。当Blinky远离Pac-Man时,Inky的目标会落在Pac-Man前方很远,使其行动迟缓散漫;但当Blinky逼近Pac-Man时,Inky的目标也会靠近Pac-Man,从而骤然变得凶狠。因此玩家常感觉Inky忽冷忽热,捉摸不定。然而也正是这种不确定性,使Inky在不经意间可能走出令人意外的路线,对玩家形成致命夹击。许多高手认为Inky可能是最危险的幽灵,因为它的多变行为模式很难用固定策略对付。
Clyde(橙色幽灵)
Clyde的绰号“Otoboke”意为“装傻、假装迟钝”,表现为一种双重性格:一方面有时模仿Blinky追击玩家,另一方面又经常自行游荡不理睬玩家。实际上,Clyde在追逐模式下采用了距离条件触发的策略。Clyde会首先计算自己与Pac-Man之间的欧几里得距离(直线距离对应的网格距离)。如果距离>=8个网格,那么Clyde会像Blinky那样以Pac-Man当前位置为目标追赶。但一旦距离小于8格,Clyde就会立刻放弃追击,转而以自己的散居目标(固定的角落点)为新目标,假装“不知道”玩家的位置,径直朝迷宫左下角游去。只有当Pac-Man再次拉开距离 (>8格) 时,Clyde才又切换回追逐Pac-Man的模式。这种行为让Clyde看起来一会儿冲向玩家,一会儿突然掉头走开,让玩家摸不清它究竟要追还是要散开。由于Clyde经常自行离队游荡在迷宫左下区域,它对玩家的威胁相对较低,但偶尔因其“神出鬼没”也会造成麻烦。
需要补充的是,每只幽灵在分散模式下都有各自固定的“家”(散开目标点):Blinky的固定散点在右上角,Pinky在左上角,Inky在右下角,Clyde在左下角。在分散模式中,它们不再追Pac-Man,而是各自朝这个固定位置巡航。这些散点的位置选择与幽灵个性相呼应,比如Clyde的家就在它经常游荡的左下角区域。散点使幽灵在分散模式下彼此远离玩家,为玩家提供短暂的喘息空间。
这种精巧的差异化设计保证了游戏过程的动态平衡:玩家无论往哪个方向或采用何种路线,总会有不同风格的幽灵对其形成威胁,让游戏既有规则性又充满变数。

5.2 路径选择与追踪机制
幽灵在确定各自目标位置后,还需要通过迷宫移动来追踪目标。《吃豆人》的幽灵没有采用复杂的\(A*\)算法,而是使用一种计算开销极低的路口转向算法。每只幽灵在行进过程中只能在迷宫的交叉路口 (拐角) 处改变方向,而在直行的通道中则继续前进直到下一个路口。这使幽灵的运动严格对齐于网格路径。
具体的路径选择算法如下:当幽灵到达一个十字路口或T字路口时,它会计算各个可能转向方向(直行、左转、右转,不包括直接倒退朝反方向,游戏规则禁止幽灵原地掉头除非模式切换触发强制反转)。对于每一个可选方向,幽灵设想如果沿该方向前进,其下一个网格的位置,然后计算该位置与幽灵当前“目标Tile”之间的距离。幽灵将选择使目标距离最短的那个方向作为转弯选择。这样,每次在路口,幽灵都朝着朝目标距离递减的方向行进,从而逐步逼近目标位置。
值得一提的是,这里的距离指的是直线欧几里得距离,并非真正考虑迷宫墙壁绕行的路径长度。幽灵不会提前规划完整路线,而只是局部地贪心选择“朝向目标更近”的下一个网格。这种贪心策略在大多数情况下有效,但在某些迷宫结构下可能并不是全局最优路径。例如,如果幽灵和目标之间隔着墙壁,简单的直线最近方向可能走入死胡同,需要绕路才能到达。但由于Pac-Man迷宫结构比较对称且通路有限,这种局部决策足以让幽灵有效地逼近玩家,同时也造成了一些可以被高手利用的AI破绽。
当多个方向计算出的距离相同时,幽灵使用一个固定的优先顺序来打破平局:上 > 左 > 下 > 右。也就是说,如果两个方向距离目标的直线距离完全相等,幽灵会倾向于往上拐;如无上则选左,依次类推。这个隐藏规则确保了幽灵行为的确定性,不会因为距离相等而产生随机选择。此外,它也解释了一些幽灵特定行为模式,例如在某些对称位置幽灵总是选择固定的拐弯方向。
总的来说,《吃豆人》的幽灵路径寻径属于启发式贪心算法:它没有复杂的搜索或图算法支持,而是靠每次转弯时的一步预判。这种简单机制计算开销极低,完美适应了当年硬件性能有限的环境,又通过精心调整细节(如距离计算和优先级)让幽灵表现出足够的智能和挑战性。
5.3 幽灵AI的三种状态与切换
原版《吃豆人》中幽灵AI有三种主要行为状态:追逐 (Chase)、分散 (Scatter) 和恐慌 (Frightened)。此外,当幽灵被吃掉后还会有一个短暂的“眼睛返巢”状态,不过通常不计入主要三种。游戏通过全局的模式计时器和事件触发在这几种状态间切换,使幽灵行为呈现周期性的变化。下面我们分别说明这三种状态的特点及转换逻辑:
-
追逐 (Chase):这是默认的攻击状态。在追逐模式中,所有幽灵都会按照各自的算法以Pac-Man为目标进行追踪(如前文所述的四种不同策略)。Ghosts在追逐模式下给玩家施加直接压力,是游戏的主要对抗阶段。
-
分散 (Scatter):在此状态下,幽灵停止追击玩家,转而各自前往预定的角落巡逻。四只幽灵分别有自己的角落散布点,在分散模式时它们倾向于朝各自角落移动并绕附近区域巡航。当进入分散模式时,幽灵会立即掉头反向而行(因为刚才可能在追Pac-Man方向,切换为去角落需要转身),这一突然的180度转向是玩家识别状态切换的明显标志。分散模式的设计目的是给玩家短暂的喘息时间,幽灵暂时不紧追玩家,可以趁机清理一些危险区域的豆子。经过数秒的分散后,幽灵又会恢复追逐模式。
-
恐慌 (Frightened):也称“蓝色模式”。当Pac-Man吃下能量豆 (Power Pellet)后,所有在迷宫中的幽灵立即进入恐慌模式。幽灵会统一变成深蓝色并减慢速度(例如第一关降至正常速度的50%),同时失去各自原本的AI目标,转为随机游荡。在恐慌状态下,幽灵的转弯是通过伪随机数来决定方向的:程序利用一个PRNG生成随机值来选择一个新方向尝试,如果该方向被墙堵住再换下一个。由于不能掉头的约束仍然适用,幽灵在路口会随机选择除返回来路外的方向前进。幽灵在恐慌状态时变成猎物,Pac-Man碰到蓝幽灵即可将其吃掉得分。恐慌状态不会持续太久,时间因关卡而异(在早期关卡可能有5-6秒,之后逐渐缩短)。快结束时蓝幽灵会闪烁白色提示(闪烁次数也随关卡提升而增加)。恐慌时间一到(或幽灵被吃掉变成眼睛返回),幽灵恢复到之前的追逐/分散模式状态并继续原本行为。
状态切换规则:游戏按一定时间表在追逐和分散两种模式之间交替循环,并通过能量豆触发恐慌模式。具体而言,每一关开始后,幽灵首先进入分散模式数秒,然后切换到追逐模式一段时间,如此交替进行四个周期。在典型的第1关中,前两次分散各持续7秒,第三次分散5秒,第四次分散约5秒;每次分散间的追逐模式持续20秒(仅第三次追逐在第1关也是20秒,而更高关可能更长)。当第四次分散结束后,幽灵将永久进入追逐模式直至该关卡结束。换言之,每局前半阶段幽灵会周期性地“进攻-退却”四次,之后就不再给玩家休息间隙了。
随着关卡提升,能量豆触发的恐慌模式持续时间越来越短,例如第1关约6秒,第2关5秒,到第5关只有2秒左右,再往后可能不到1秒甚至完全没有恐慌时间(幽灵仅短暂闪烁后立刻恢复正常)。这意味着在高级关卡里能量豆不再给玩家提供有效的反杀机会,只能利用其触发的一瞬间幽灵掉头来暂时摆脱包围。
综上,幽灵AI的三态系统营造了张弛有度的节奏:追逐阶段幽灵紧逼玩家,分散阶段稍作退却给玩家缓冲,恐慌则短暂扭转猎物与猎人的关系。全局的状态计时使这种节奏循环往复,并在高难度时逐渐取消玩家的缓冲,从而不断提高挑战。有限状态机的巧妙运用正是Pac-Man幽灵AI设计的精华,它在资源有限的情况下实现了丰富的行为模式。
Pac-Man幽灵AI至今仍被奉为经典案例,在于它体现了游戏设计与AI设计的高度融合。现代游戏AI开发者可以从中汲取的启发包括:
- 利用有限状态机清晰地组织NPC行为,让不同状态有截然不同的风格,增加对抗的层次感。
- 为NPC赋予差异化策略,制造复杂的交互涌现效果,避免敌人千篇一律。哪怕基础AI很简单,不同参数与规则组合也能提升可玩性。
- 在路径规划上,根据游戏需要平衡智能程度和趣味性。最聪明的AI不一定带来最好玩的体验,适度的可预测性和破绽反而能让玩家感到成就感。
- 充分考虑玩家体验,通过AI行为模式的设计给予玩家学习和掌握的空间。Pac-Man幽灵AI的深度正是在于玩家可以不断摸索其规律并与之博弈。
Pac-Man的幽灵AI作为早期游戏AI的里程碑,其影响深远。从中我们既能看到现代许多AI技巧的雏形(FSM、多代理协作、不同行为风格设计),也能体会到游戏设计以简单明了的规则创造复杂乐趣的智慧。对于当今的游戏开发者和AI研究者而言,重温和分析这样的经典案例,无疑有助于更好地理解游戏AI设计的艺术和平衡之道。
本章小结
本章全面梳理了游戏人工智能的核心概念、发展历程、典型应用与经典技术。从“让机器思考”到“让游戏角色表现得像人”,你不仅理解了游戏AI的哲学目标:服务可玩性与表现力,也掌握了常见的AI结构如有限状态机、行为树、感知系统与路径规划等的基本原理与Godot实现方式。
游戏AI的设计,并不追求绝对智能,而在于营造恰当的互动体验。通过分析《吃豆人》中的幽灵AI,你看到了早期经典如何巧用规则与节奏设计创造出丰富策略空间。这些设计理念依然适用于今天的游戏开发。
随着深度学习和大语言模型等新AI技术的兴起,游戏AI正不断拓展边界。下一步,你将在实战案例中尝试构建属于自己的游戏AI系统,让游戏中的角色更“有生命”。