You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity:如何实现回合制AI的逐个移动与攻击?

回合制敌人逐个执行移动攻击的解决方案

核心思路

不用给每个敌人写独立脚本,而是做一个全局的敌人行动控制器,统一管理所有敌人的行动顺序,让每个敌人的移动、攻击动作按队列依次完成。

具体实现方案(以Unity为例)

  • 队列+协程组合方案

    1. 先把所有需要行动的敌人收集起来,放进一个队列里按顺序排列
    2. 写一个协程方法,逐个从队列里取出敌人,先调用它的移动逻辑,等移动完全结束后,再调用攻击逻辑,等攻击完成后再处理下一个敌人
    3. 示例代码:
    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);
            }
        }
    }
    
    1. 每个EnemyAI脚本只需要负责自己的移动和攻击逻辑,并且用协程返回动作完成的信号,不用管顺序问题
  • 状态机驱动方案

    1. 做一个全局的回合状态机,包含「敌人回合启动」「单个敌人行动中」「敌人回合结束」这些状态
    2. 当处于「单个敌人行动中」状态时,标记当前正在行动的敌人,等它完成移动+攻击后,自动切换到下一个敌人,直到所有敌人都走完流程
    3. 这种方法扩展性更强,后续加玩家回合、回合切换动画之类的逻辑会很方便

关于发布板块的说明

如果是用Unity引擎开发,发布到Game Development Stack Exchange的Unity分区最适合;如果是通用的回合制游戏开发问题,直接发布在Game Development Stack Exchange主板块就可以。

内容的提问来源于stack exchange,提问作者Fygar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:25:31