Unity 2D Roguelike游戏玩家仅移动一次触发ArgumentOutOfRangeException错误求助
问题解决:Unity 2D Roguelike 玩家仅移动一次触发索引越界错误
错误原因分析
从错误日志和代码来看,问题明确出在GameManager的MoveEnemies协程中:
- 你在for循环里硬编码使用索引
1访问enemies列表(enemies[1].MoveEnemy()),但场景中的敌人数量可能小于2(比如当前仅生成了1个敌人),这直接触发了ArgumentOutOfRangeException(索引超出集合有效范围)。 - 循环变量
i完全没被利用,代码本意是遍历所有敌人,但实际每次都试图访问第二个敌人,逻辑完全错误。
修复代码
将MoveEnemies协程中的for循环部分修改为:
IEnumerator MoveEnemies() { enemiesMoving = true; yield return new WaitForSeconds(turnDelay); if (enemies.Count == 0) { yield return new WaitForSeconds(turnDelay); } for (int i = 0; i < enemies.Count; i++) { // 用循环变量i代替硬编码的1,遍历每个敌人 enemies[i].MoveEnemy(); yield return new WaitForSeconds(enemies[i].moveTime); } playersTurn = true; enemiesMoving = false; }
修复说明
- 替换后,循环会依次访问
enemies列表中的每个敌人(从索引0到enemies.Count-1),彻底避免索引越界问题。 - 逻辑上也符合Roguelike游戏的敌人回合机制:每个敌人按顺序完成移动动作。
内容的提问来源于stack exchange,提问作者Rothcol
相关产品推荐
相关产品推荐

