Unity:如何实现回合制AI的逐个移动与攻击?
回合制敌人逐个执行移动攻击的解决方案
核心思路
不用给每个敌人写独立脚本,而是做一个全局的敌人行动控制器,统一管理所有敌人的行动顺序,让每个敌人的移动、攻击动作按队列依次完成。
具体实现方案(以Unity为例)
队列+协程组合方案
- 先把所有需要行动的敌人收集起来,放进一个队列里按顺序排列
- 写一个协程方法,逐个从队列里取出敌人,先调用它的移动逻辑,等移动完全结束后,再调用攻击逻辑,等攻击完成后再处理下一个敌人
- 示例代码:
public class EnemyTurnController : MonoBehaviour { [SerializeField] private List<EnemyAI> _allEnemies; private Queue<EnemyAI> _enemyActionQueue; private void Start() { // 初始化队列,按列表顺序加入敌人 _enemyActionQueue = new Queue<EnemyAI>(_allEnemies); } // 调用这个方法启动敌人回合 public IEnumerator StartEnemyTurnSequence() { while (_enemyActionQueue.Count > 0) { var currentEnemy = _enemyActionQueue.Dequeue(); // 等待敌人完成移动协程 yield return StartCoroutine(currentEnemy.DoMove()); // 等待敌人完成攻击协程 yield return StartCoroutine(currentEnemy.DoAttack()); // 如果是循环回合,行动完把敌人重新加回队列 _enemyActionQueue.Enqueue(currentEnemy); } } }- 每个EnemyAI脚本只需要负责自己的移动和攻击逻辑,并且用协程返回动作完成的信号,不用管顺序问题
状态机驱动方案
- 做一个全局的回合状态机,包含「敌人回合启动」「单个敌人行动中」「敌人回合结束」这些状态
- 当处于「单个敌人行动中」状态时,标记当前正在行动的敌人,等它完成移动+攻击后,自动切换到下一个敌人,直到所有敌人都走完流程
- 这种方法扩展性更强,后续加玩家回合、回合切换动画之类的逻辑会很方便
关于发布板块的说明
如果是用Unity引擎开发,发布到Game Development Stack Exchange的Unity分区最适合;如果是通用的回合制游戏开发问题,直接发布在Game Development Stack Exchange主板块就可以。
内容的提问来源于stack exchange,提问作者Fygar
相关产品推荐
相关产品推荐

