玩文明6的人多少都遇到过这样的场景:派出去的侦查兵要么踩着蛮族营地边儿上晃悠,要么面对一大片未探索区域原地发呆,要么刚摸到城邦门口就调头回家。我花了整整几天把侦查兵的AI模板翻了个底朝天,这篇文章就是把那个藏在数据里的“决策脑”彻底拆开给你看。无论你是想把侦查兵用得更好的玩家、想从Mod层面调整单位行为的MOD制作者,还是对游戏AI设计好奇的人,读完都能明白文明6的侦查兵为什么“这么做”,以及怎么改。
1. 侦查兵AI模板到底是个什么东西
1.1 文明6的AI并不“聪明”,它只是按模板做选择
很多人一听到“AI”就以为是深度学习、神经网络那套东西。文明6的AI完全不是这样。它的本质是一个巨大的规则引擎:游戏每一帧都在给每个单位列一份“现在我该干什么”的清单,然后根据一堆优先级和权重选出得分最高的动作。侦查兵的行为逻辑,就藏在这些“AI模板”里。
所谓“模板”,并不是一份文档,而是一组数据表的集合。这些表定义了单位的攻击倾向、探索范围、任务执行方式、撤退条件等。比如在Units.xml里,你会发现UNIT_SCOUT这个条目下面有一堆数字和标签,它们共同决定了一队侦查兵是会优先探索远方、见到敌人就跑,还是会去踩蛮族营地。把这些标签组合在一起,就是我们要说的“AI模板”。
1.2 文明6里的AI模板到底长什么样
文明6的AI数据主要是XML格式,放在游戏文件夹的Base/Assets/Gameplay/Data/下面。对于单位AI来说,最常看的几个文件是:
Units.xml:定义单位的基础属性,包括攻击力、移动力、视野、造价,以及AI相关的提示标签。UnitAiInfos.xml:定义单位AI的类型(比如探索、进攻、防御、骚扰等)。AIOperations.xml:定义AI的宏观作战行动,比如探索行动、回城行动、进攻城市行动。Tactics.xml:定义在具体战斗或接触时的应变逻辑,比如是否追击、是否撤退。
这些文件层层嵌套,最终形成一个完整的行为模板。想理解侦查兵,不能只看Units.xml一行,它只是骨架;真正的“智慧”在AI类型和操作任务里。
2. 从数据层拆解侦查兵的决策逻辑
2.1 Units.xml里那些决定“侦查”身份的标签
打开Units.xml,搜UNIT_SCOUT,你会看到类似这样的记录(我做了简化):
<Row> <UnitType>UNIT_SCOUT</UnitType> <Cost>30</Cost> <BaseMoves>2</BaseMoves> <BaseSightRange>2</BaseSightRange> <Combat>10</Combat> <AIHints>EXPLORE</AIHints> </Row>这里最能体现AI行为的是AIHints标签。EXPLORE是侦查兵的核心标签,意思是“我的主要任务是探索地图”。只要这个标签存在,AI群管理器就会优先给侦查兵派探险任务,而不是让它去攻打城市。如果把这个标签换成AGGRESSIVE,侦查兵就会变成一个弱鸡但爱惹事的单位,天天追着敌人打。
BaseMoves和BaseSightRange决定了侦查兵能跑多远、看多远,间接影响探索效率。但注意,它们不等于AI“想不想”探索。移动力只是能力,AIHints才是意愿。
2.2 UnitAI类型:侦查兵默认是“探索者”还是“打手”
继续往UnitAiInfos.xml里看,侦查兵默认的AI类型一般对应UNITAI_EXPLORE。这个类型会告诉战术层:这个单位不参与正面战斗,除非遇到非常好的机会,否则优先绕开危险。
很多Mod作者一开始只改BaseMoves,以为让侦查兵走得快一点就算强化了,结果发现它还是傻站在原地。原因就在于UNITAI_EXPLORE这个AI类型还控制着一堆隐形行为,比如:
- 探索时会优先选择未被探索过的地块,而且是“尽量连续移动”,不会在一个格子上反复兜圈子。
- 遇到蛮族时,默认是“躲避优先”。只有在侦查兵周围没有其他部队、且蛮族营地明显防御空虚时,AI才会冒一次险。
- 发现村庄遗迹(部落村庄)后,会优先靠近拾取,拾取后重新进入探索状态。
这些行为并不是写在侦查兵的单位表里,而是UNITAI_EXPLORE这个“人设”附带的。理解了这一层,你才会明白为什么光加移动力治标不治本。
2.3 任务编排:探索行动是怎么跑起来的
单位AI类型只是“人设”,真正制定路线、派发任务的是AIOperations.xml。侦查兵最常触发的两个任务是:
ExplorationOperation:探索行动。AI会在地图上选一个未探索区域的核心点作为目标,然后给侦查兵下达一连串移动指令,直到目标被探索完成或路径受阻。ReturnToCityOperation:回城行动。通常在侦查兵受伤、城市被攻击、或者地图已经探索完的时候触发。
这里的调度逻辑有点像公司里的项目管理:UNITAI_EXPLORE是员工能力标签,AIOperations是项目计划,最终执行的每一步是“移动指令”。三者缺一不可。
当你吐槽“侦查兵为什么绕着蛮族营地走三圈都不进去”,其实是因为目标点和障碍判定之间没能形成一条“好路径”。这种情况多半是AIPlotPicker在选择目标地块时,把蛮族营地附近的区域标记成了“高威胁”区块,所以侦查兵宁可绕远路。
3. 实战:手把手修改侦查兵AI模板
3.1 环境准备:用ModBuddy建一个Gameplay Mod
在动手改之前,先准备环境。我建议直接用Firaxis的ModBuddy(在Steam工具里可以下载),新建一个“Gameplay”类型的Mod,因为游戏本体文件最好不要直接改,改动后会带来更新冲突,而且验证起来麻烦。
具体操作:
- 打开ModBuddy,选择“New Mod”,项目类型选“Gameplay”。
- 在
Content文件夹里新建一个Units.xml(名字可以自取,只要在ModBuddy的ModBuddy.xml里注册了就行)。 - 把后面测试的代码放进去,保存。
- 右键项目,选择“Build”,让Mod编译为
Mods文件夹下的一个带后缀的目录。
这里有个小坑:ModBuddy默认生成的.modinfo文件经常没有把XML文件挂到Gameplay/Data标签下。如果你发现改了没反应,去.modinfo里检查有没有一行<Files>Units.xml</Files>,并且<Action>里面设置了SetDependency之类的东西。最省事的方式是拿社区里现成的Gameplay Mod模板当底子,改文件名和内容。
3.2 案例1:让侦查兵更勤快地探路
最常见的需求是“侦查兵老是中途回家,或者在一个小角落绕圈”。这时候很多人第一反应是加移动力,而实际更卡脖子的是探索边界判定。
一个可行的修改思路是:把AIHints从单纯EXPLORE改成EXPLORE + LOW_PRIORITY_AGGRESSION,这意味着侦查兵依然视探索为第一优先,但在没有探索目标时不会死等,而会主动去找软柿子打。这在单位数据里是这么写的:
<Row> <UnitType>UNIT_SCOUT</UnitType> <AIHints>EXPLORE_LOW_PRIORITY_AGGRESSION</AIHints> </Row>不过不同游戏版本的枚举值写法不一样,有的版本里是单独一行加AIHints,有的需要写成AIHints"EXPLORE"。如果你用的版本更新,建议用“数据库浏览器”(或Ingame UI Mod)搜索一下UnitAiHints表,看当前版本支持哪些枚举。
除了改标签,还可以给侦查兵加一个“高地视野加成”的属性。比如在游戏的Modifiers表里新增一条Modifier,给UNIT_SCOUT附加ADJUST_UNIT_SIGHT_RANGE,把视野从2提到3。视野大了,AI能探索到更远的目标,自然会减少原地发呆的次数。
3.3 案例2:抑制侦查兵主动攻击蛮族
很多人玩蛮族多的地图,侦查兵动不动就撞到蛮族脸上,白白送掉。想让它“见到蛮族就跑”,可以把UnitAiInfos.xml里对应UNITAI_EXPLORE的攻击权重调低,但这个表通常是全局的,容易影响到别的探索单位。
更稳妥的办法是给侦查兵加一个“非战斗倾向”的标签。在Units.xml里加上:
<Row> <UnitType>UNIT_SCOUT</UnitType> <AIHints>EXPLORE_NON_COMBAT</AIHints> </Row>EXPLORE_NON_COMBAT不是所有版本都存在,但表达的意思很明确:我是一个探索者,我不主动开战。如果版本里没有这个枚举,就用另一种方法:把侦查兵的Combat值改成0。AI计算得失时会认为这个单位毫无战斗力,几乎不会派它去接敌。但这样改问题也很明显,蛮族一碰就死,基本等于废了。
我试过更折中的方案:把侦查兵回到城市后的“升级路线”做点文章,让它在远古时代只探索不战斗。办法是修改Units.xml中侦查兵的PromotionClass,给它配一个偏防御的晋升树。AI看到这个单位的主要培养方向是“活下来”,就会降低交战意愿。这套改法的好处是不影响单位基础数值,坏处是启动成本高,需要同时配置晋升表。
3.4 修改后的验证:用观察者模式测试
改完不是直接开一局就行。我习惯用观察者模式(Observer Mode)做一次快速沙盘测试。具体做法是:在创建游戏时勾选“启用调试模式”(可以通SetupUI修改),或者直接安装一个“简易Mod菜单”,然后开图选极大、8个AI对手、蛮族丰富。
进入游戏后,切换到观察者视角,重点看前30个回合内侦查兵的行动轨迹。你要盯几个指标:
- 侦查兵是否在10回合内走出了首都附近的探索范围。
- 遇到蛮族时,是主动避让还是迎头撞上去。
- 探索完一块大陆后,是否自动转向另一块区域,而不是原地待着。
如果行为还是不对劲,就在游戏里开“日志仪表板”(Debug Menu一般自带AI日志),查看当前单位的Operation归属。日志里能看到AIOperationState的状态:是Active、Waiting还是Completed。只要Waiting状态一直停在某个地块上,十有八九是目标选择出了问题。
4. 常见问题与排查技巧实录
4.1 为什么我的模板改了没反应
这个问题90%的情况是“改了文件,但游戏没有读它”。ModBuddy编译时,常常因为.modinfo没有正确注册Units.xml造成改动不生效。判断方法很简单:把XML内容故意写坏(比如加一个中文注释或者留个语法错误),如果进游戏没有报错提示,就说明这个文件压根没被加载。
还有可能是缓存问题。文明6会在Documents/My Games/Civilization VI/Mods下生成一些缓存文件。遇到改不动,可以把这个文件夹里的同名缓存删掉再启动游戏。注意别把存档和Mod本体删了。
另外,XML里面Row标签的字段必须跟当前游戏版本完全一致。有的字段在官方定义里是首字母大写,比如BaseMoves,你写成BaseMoves"2"就检查不出来。最靠谱的办法是用ModBuddy自带的“Schema验证”,它能告诉你某个字段到底存不存在。
4.2 如何快速定位一个AI行为对应的数据入口
改模板最容易卡住的问题就是找不到入口。我常用的笨办法是“搜词法”。比如想找侦查兵探索相关的配置,就在游戏数据目录里搜索Scout、EXPLORE、ExplorationOperation这几个关键词,一层层往里钻。
如果觉得手搜太慢,推荐用“Civilization VI Inspector”或“Ingame UI”这类Mod,它们能在游戏里直接浏览数据库表。进去后查三张表:
Units表,确认侦查兵当前带哪些AIHints。UnitAiInfos表,看它绑定的是哪个AI类型。GlobalParameters表,搜索EXPLORE相关参数,调整全局探索优先级。
这三个表通常就是90%行为逻辑的藏身之处。
4.3 踩过的坑:加移动力不等于AI更聪明
这是我最想反复强调的一点。Mod社区里不少新人想改侦查兵,第一反应就是给UNIT_SCOUT加移动力,从2改到3、4,结果发现侦查兵确实跑得快了,但仍然乱跑、该看的区域不看、该捡的村庄不捡。原因很简单:AI是先做“要不要探索”的决策,再做“怎么走”的路径规划。移动力只影响第二步,不影响第一步。
所以想让侦查兵高效率,重点应该放在AIHints、UNITAI_EXPLORE关联参数、以及AIOperations.xml的探索半径上。比如你可以调整“探索操作”的最小触发范围:如果侦查兵周围10格已经全部被探明,AI会认为现在没必要开启探索任务,自然会闲逛。这时候要把范围调大,或者在GlobalParameters里把“被探索过的区域判定”改得严格一些,它才会继续往远处走。
另外还有一个隐藏坑:侦查兵AI默认会“躲避非玩家单位的威胁”。你把移动力改成6,结果它跑得更远、更容易接近蛮族营地,AI反而会提前绕道,看起来就像“很胆小”。所以光堆数值经常适得其反。
4.4 社区Mod实例参考:从优秀成品里学模板
光看官方定义容易一头雾水,最快的学习路径是去看别人做好的侦查兵Mod。Steam创意工坊里搜“Scout AI”“Exploration”能翻出不少已经验证过的东西。下载后不要只放进Mods文件夹,而是解包看看它的.modinfo和XML结构。重点看对方改的是哪些表、哪些字段,然后对照我上面讲的三层结构去理解:先改人设(UnitAiInfos),再改任务(AIOperations),最后改数值(Units)。
我见过一个好用的Mod,核心改动只是把侦查兵的AIHints从EXPLORE改成了EXPLORE_HOME_DEFENSE,结果侦查兵在探索之外,会在自己城市周围巡逻防御,早期防蛮族效果极好。这个思路启发了我:不要总想着把侦查兵改成一个“超人”,而是根据你的玩法需要,给它一份“岗位说明书”。
改完几十个回合之后,我自己最大的感受是:侦查兵终于不再像个无头苍蝇了。它知道什么时候该出去看世界,什么时候该躲着蛮族走,什么时候该回家搬救兵。我还留了一个小私心:把侦查兵的视野加成放在“高复杂度地图”专属Mod里,只在极大图和群岛图上生效,让大图探索体验直接拉满。如果你正被文明6的侦查AI气到摔鼠标,不妨按照上面的思路,自己动手给它重新写一份“员工手册”,那种掌控感比换个国家文明好玩得多。