一、自动战斗系统就像炒菜
去年夏天我在做独立游戏时,发现给敌人写AI就像教家里金毛玩飞盘——既要让它主动出击,又不能让它瞎跑。自动战斗系统的核心就三件事:什么时候出招、怎么选目标、打完怎么收场。

1.1 给AI装个沙漏
在《暗黑破坏神》的怪物AI源码里见过,他们用倒计时决定攻击频率。试着在Unity里写个这样的计时器:
- 创建AttackInterval变量(建议1.5-3秒)
- 用Time.deltaTime累加计时
- 超过阈值就触发攻击动画
| 行为 | 时间(秒) | 随机浮动 |
| 普通攻击 | 2.0 | ±0.3 |
| 技能释放 | 5.0 | ±1.2 |
二、给电脑玩家装个大脑
近在改自己的横版格斗游戏时,发现敌人老是撞墙。后来用射线检测做了个智能寻路,现在它们会绕开障碍物追击了。
2.1 状态机:AI的交通信号灯
参考《Game AI Pro》书里的案例,给AI设计四个基本状态:
- 巡逻(Patrol)
- 追击(Chase)
- 攻击(Attack)
- 撤退(Retreat)
用C写个状态切换的代码骨架:
public class AIStateMachine : MonoBehaviour {
private enum State { Patrol, Chase, Attack, Retreat }
private State currentState;
void Update {
switch(currentState) {
case State.Patrol:
if(发现玩家) currentState = State.Chase;
break;
case State.Chase:
if(距离小于2米) currentState = State.Attack;
break;三、让战斗看起来更聪明
有次测试时,玩家吐槽敌人像木头人。后来加了行为树,现在AI会吃药、躲技能、甚至假装逃跑。
3.1 行为树实战技巧
参考Unreal引擎的行为树设计,可以这样分层:
- 根节点:持续检查生命值
- 第一层:选择攻击策略
- 第二层:执行具体动作
记得给每个节点加执行权重,
| 行为 | 触发概率 | 条件 |
| 连招攻击 | 40% | 距离<1米 |
| 远程射击 | 30% | 有弹药 |
四、调试时遇到的坑
上周三凌晨三点,我的AI突然集体跳海。后来发现是导航网格没烘焙好,分享几个救命技巧:
- 用Gizmos绘制实时检测范围
- 给不同状态的角色换颜色
- 记录AI决策日志
在Unity里可以这样可视化检测范围:
void OnDrawGizmosSelected {
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, detectionRange);五、让战斗更带感的秘诀
看《只狼》的GDC分享时学到的,现在给我的AI加了这些细节:
- 攻击前摇时播放预警
- 被连击时增加防御概率
- 血量低于30%会切换狂暴模式
试着在状态机里加个愤怒系数:
float angerLevel = Mathf.Clamp(1
(currentHealth/maxHealth), 0, 1);
attackSpeed = 1 + angerLevel 0.5f;六、性能优化的那些事
当屏幕上出现20个AI时,帧率从60掉到15。通过这三个方法救回来了:
- 把Update改成协程分帧处理
- 用对象池管理战斗
- 减少不必要的物理检测
分帧处理的协程示例:
IEnumerator ProcessAI {
while(true) {
for(int i=0; i<5; i++){
if(i >= aiList.Count) yield break;
aiList[i].UpdateAI;
yield return null;窗外的知了又开始叫了,我保存了刚调好的追击逻辑。测试场景里,那个穿着铠甲的AI终于不再卡在墙角,而是灵活地绕开木箱朝玩家冲去。按下F5时,手边的冰咖啡刚好凝结出水珠。
郑重声明:
以上内容均源自于网络,内容仅用于个人学习、研究或者公益分享,非商业用途,如若侵犯到您的权益,请联系删除,客服QQ:841144146
相关阅读
HeroFighterX:2025格斗游戏新标杆解析
2026-02-18 18:39:54蚁群模拟游戏:体验蚂蚁生活趣事
2026-02-11 14:08:19游戏升级攻略:从萌新到老玩家的成长之路
2026-02-06 12:57:35恐怖游戏生存解谜攻略
2026-02-05 13:20:29沉浸式盗墓游戏体验解析
2026-02-05 13:06:40