创游世界AI系统设计入门
一句话摘要
创游世界敌人 AI 行为设计的完整指南,涵盖 AI 状态机、巡逻路径、追击逻辑、攻击模式、技能使用等,帮助开发者做出有挑战性且有趣的敌人行为。
适合谁阅读
- 想要设计敌人AI的开发者
- 需要实现智能敌人行为的创作者
- 想学习游戏AI设计技巧的进阶用户
你将学到什么
- AI状态机的基本概念
- 常见敌人行为模式
- 巡逻、追击、攻击的实现方式
- AI难度平衡技巧
- 常见AI设计模式
AI系统基础概念
什么是AI系统
AI系统是指游戏中非玩家控制角色(NPC/敌人)的行为逻辑,让它们看起来「智能」。
AI系统的核心要素
AI系统
├── 感知(玩家在哪、距离多远)
├── 决策(该巡逻还是追击)
├── 执行(移动、攻击、使用技能)
└── 状态(巡逻中、追击中、攻击中)一、状态机设计
1.1 什么是状态机
状态机是一种将AI行为分解为不同「状态」的设计模式,每个状态有特定的行为逻辑。
1.2 常见AI状态
| 状态 | 说明 | 触发条件 |
|---|---|---|
| 待机 | 原地等待,不做动作 | 无目标时 |
| 巡逻 | 按路线移动 | 待机超时/未发现目标 |
| 追击 | 向玩家移动 | 发现玩家 |
| 攻击 | 执行攻击动作 | 进入攻击范围 |
| 撤退 | 后退或逃跑 | 生命值低 |
| 发呆 | 随机小动作 | 巡逻暂停 |
1.3 状态转换图
待机 ←→ 巡逻
↓ ↓
追击 ←→ 攻击
↓
撤退1.4 状态机实现
// 状态机脚本
当开始时
设置自身属性 "当前状态" 为 "待机"
设置自身属性 "警戒范围" 为 200
设置自身属性 "追击范围" 为 150
设置自身属性 "攻击范围" 为 50
结束
重复执行(每秒1次)
获取玩家距离
如果 自身属性.当前状态 = "待机" 那么
如果 玩家距离 < 警戒范围 那么
设置自身属性 "当前状态" 为 "追击"
发送广播 "敌人_发现玩家"
结束
如果 自身属性.当前状态 = "追击" 那么
如果 玩家距离 > 追击范围 那么
设置自身属性 "当前状态" 为 "待机"
否则
如果 玩家距离 < 攻击范围 那么
设置自身属性 "当前状态" 为 "攻击"
结束
结束
如果 自身属性.当前状态 = "攻击" 那么
如果 玩家距离 > 攻击范围 那么
设置自身属性 "当前状态" 为 "追击"
结束
结束
结束二、巡逻行为
2.1 简单巡逻
当开始时
设置自身属性 "巡逻点索引" 为 0
设置自身属性 "巡逻点列表" 为 [点1坐标, 点2坐标, 点3坐标]
结束
重复执行(每秒)
获取当前巡逻点坐标
移动向 当前巡逻点
如果 到达巡逻点 那么
设置自身属性 "巡逻点索引" 为 (巡逻点索引 + 1) % 巡逻点数量
结束
结束2.2 条件巡逻
// 白天巡逻,夜晚待机
重复执行(每秒)
获取当前时间
如果 时间范围 = "白天" 那么
如果 当前状态 = "待机" 那么
切换为 "巡逻"
结束
否则
如果 当前状态 = "巡逻" 那么
切换为 "待机"
结束
结束
结束2.3 随机巡逻
当开始时
设置自身属性 "巡逻点列表" 为 [多个随机坐标]
结束
重复执行
随机选择巡逻点
移动向 巡逻点
等待 随机秒数(3-8秒)
结束三、追击行为
3.1 基础追击
当收到广播 "敌人_发现玩家" 时
设置自身属性 "当前状态" 为 "追击"
结束
重复执行(每秒10次)
如果 当前状态 = "追击" 那么
获取玩家位置
移动向 玩家位置
结束
结束3.2 追击速度控制
重复执行
如果 当前状态 = "追击" 那么
设置移动速度为 正常速度 * 1.5
否则
设置移动速度为 正常速度
结束
end3.3 追击范围限制
重复执行
获取玩家距离
如果 当前状态 = "追击" 那么
如果 玩家距离 > 最大追击范围 那么
设置自身属性 "当前状态" 为 "待机"
返回巡逻点
结束
结束
end四、攻击行为
4.1 近距离攻击
当收到广播 "敌人_进入攻击范围" 时
设置自身属性 "当前状态" 为 "攻击"
播放攻击动画
造成伤害
等待 攻击间隔
如果 玩家仍在攻击范围 那么
继续攻击
否则
设置自身属性 "当前状态" 为 "追击"
结束
end4.2 远程攻击
当收到广播 "敌人_进入射程" 时
如果 当前状态 ≠ "攻击" 那么
设置自身属性 "当前状态" 为 "攻击"
结束
播放远程攻击动画
生成子弹 朝向 玩家位置
等待 攻击间隔
end4.3 攻击冷却
当执行攻击时
如果 自身属性.攻击冷却 > 0 那么
显示 "冷却中"
停止
结束
执行攻击
设置自身属性.攻击冷却 = 攻击间隔
重复执行
等待 0.1 秒
设置自身属性.攻击冷却 = 攻击冷却 - 0.1
如果 攻击冷却 <= 0 那么
设置属性.攻击冷却 = 0
停止循环
结束
结束
end五、技能系统
5.1 技能触发条件
// 血量低于50%时使用技能
当生命值改变时
如果 当前生命 < 最大生命 * 0.5 那么
如果 技能冷却 = 0 那么
使用技能 "狂暴"
设置技能冷却 = 60
结束
结束
end5.2 多种技能轮换
当开始时
设置自身属性 "当前技能索引" 为 0
设置自身属性 "技能列表" 为 [技能A, 技能B, 技能C]
end
当满足技能释放条件时
获取当前技能
使用当前技能
设置自身属性 "当前技能索引" = (当前技能索引 + 1) % 技能数量
设置当前技能冷却
end5.3 特殊技能
// 召唤小怪技能
当生命值 < 30% 时
如果 召唤冷却 = 0 那么
生成 3 个 小怪 在 自身位置附近
设置召唤冷却 = 30
显示 "召唤支援!"
结束
end六、难度平衡
6.1 基础数值调整
| 数值 | 简单 | 普通 | 困难 |
|---|---|---|---|
| 生命值 | 100 | 150 | 200 |
| 攻击力 | 10 | 15 | 25 |
| 移动速度 | 80% | 100% | 120% |
| 攻击间隔 | 1.5秒 | 1秒 | 0.7秒 |
| 警戒范围 | 100 | 150 | 200 |
6.2 行为难度调整
// 简单AI:只追踪
如果 发现玩家
移动向玩家
结束
// 普通AI:会攻击
如果 发现玩家
如果 在攻击范围
攻击
否则
移动向玩家
结束
结束
// 困难AI:会预判、会闪避
如果 发现玩家
预测玩家移动方向
绕到玩家身后
如果 在攻击范围 且 玩家正在施法
使用破招技能
结束
end6.3 BOSS设计要点
| 要点 | 说明 |
|---|---|
| 多阶段 | 血量低于X%进入下一阶段 |
| 特殊机制 | 每隔X秒召唤小怪 |
| 高伤害技能 | 需要玩家躲避 |
| 攻击提示 | 攻击前有明显预警 |
| 弱点设计 | 特定状态下有加成伤害 |
七、常见AI模式
7.1 巡逻兵模式
状态机:
待机(3秒)→ 巡逻(随机点)→ 待机(3秒)→ ...
↓ 发现玩家
追击 → 攻击
↓ 玩家逃跑
返回待机7.2 刺客模式
状态机:
待机(隐蔽处)
↓ 玩家靠近
快速冲刺 → 攻击 → 脱离
↓ 玩家反击
返回隐蔽处待机7.3 射手模式
状态机:
保持距离(始终与玩家保持一定距离)
↓ 玩家靠近
后撤 → 远程攻击
↓ 玩家远离
继续追击7.4 守护模式
状态机:
巡逻(守护区域)
↓ 玩家进入区域
追击 → 战斗
↓ 玩家离开区域
返回守护点八、AI优化技巧
8.1 减少计算开销
| 技巧 | 说明 |
|---|---|
| 分组检测 | 每组选一个代表检测,其他跟随 |
| 间隔更新 | 不需要每帧更新AI决策 |
| 距离判断 | 先用简单距离判断,再用精确判断 |
8.2 优化寻路
// 简化寻路
如果 玩家在直线距离内
直接移动
否则
使用预设路径点
结束8.3 批量AI管理
// 创建AI管理器
当收到广播 "更新AI" 时
获取所有敌人物体列表
遍历列表
对每个敌人执行AI决策
结束
endAI系统速查
| 需求 | 实现方式 |
|---|---|
| 状态机 | 用属性记录当前状态,重复执行检查状态转换 |
| 巡逻 | 按路径点移动,到达后切换下一个 |
| 追击 | 获取玩家位置,持续向玩家移动 |
| 攻击 | 在攻击范围内时执行攻击逻辑 |
| 技能 | 根据条件触发,设置冷却时间 |
| 难度 | 调整数值和行为复杂度 |
相关页面
待验证问题
以下问题需要进一步验证:
| 问题 | 状态 | 验证方向 |
|---|---|---|
| 具体寻路算法的实现细节 | 🔄 待验证 | 需要引擎文档确认 |
| 不同游戏类型的AI设计差异 | 🔄 待验证 | 需要多类型测试 |
📝 说明:AI系统设计核心方法已稳定,具体实现属于进阶内容。
后续优化方向
- [ ] 补充更多AI行为模式
- [ ] 增加群体AI协调说明
- [ ] 完善BOSS战AI设计专题
