在Unity中,为什么我的IndexOutOfRangeexception在尝试debugging时消失?

从Unity“游戏”选项卡播放时,我不会收到错误。 但是,当我建立一个可执行文件(开发与否)它stucks。 我得到“IndexOutOfRange”exception。 这也奇迹般地消失(是的),当我添加一些debugging线:

这不起作用:

for (int i = x1; i <= x2; i++) for (int j = y1; j <= y2; j++) { int a, b; a = 7 + i; // Out of range b = 7 + j; // Out of range submap[a, b] = world.WalkableMap[(int)CurrentWalkableTile.x + i, (int)CurrentWalkableTile.y + j]; } 

这工作:

 for (int i = x1; i <= x2; i++) for (int j = y1; j <= y2; j++) { int a, b; a = 7 + i; b = 7 + j; if (a < 0 || a > 15) // now with this never gets out of range Debug.Log("A out of range: " + a); if (b < 0 || b > 15) // now with this never gets out of range Debug.Log("B out of range: " + b); submap[a, b] = world.WalkableMap[(int)CurrentWalkableTile.x + i, (int)CurrentWalkableTile.y + j]; } 

我找不到任何意义。 这个例外从字面上隐藏起来

其他信息也许是有用的:

 x1 = (CurrentWalkableTile.x - 7) >= 0 ? -7 : -(int)CurrentWalkableTile.x; x2 = (CurrentWalkableTile.x + 7) < world.wmap_x_size ? 7 : (world.wmap_x_size - (int)CurrentWalkableTile.x - 1); y1 = (CurrentWalkableTile.y - 7) >= 0 ? -7 : -(int)CurrentWalkableTile.y; y2 = (CurrentWalkableTile.y + 7) < world.wmap_y_size ? 7 : (world.wmap_y_size - (int)CurrentWalkableTile.y - 1); 

我想发布更多的信息,但我甚至无法debugging发现问题。

 if (a < 0 || a > 15) // now with this never gets out of range Debug.Log("A out of range: " + a); if (b < 0 || b > 15) // now with this never gets out of range Debug.Log("B out of range: " + b); 

submap是bool [15,15](根据评论)

那应该是

 if (b < 0 || b >= 15) 

要么

 if (b < 0 || b > 14) 

指数15将已经超出界限(15号,0号到14号)

既然你不能用当前的if语句跟踪你的bug,这导致了结论,导致exception的无效索引是15,而不是负索引。


由于第一部分没有find问题,下一个机会是不检查submap [a] [b]数组,而是world.WalkableMap []数组。

就像做一个b一样。

 int c = (int)CurrentWalkableTile.x + i; int d = (int)CurrentWalkableTile.y + j; if (c < 0 || c >= world.WalkableMap.length) Debug.Log("C out of range: " + c); 

if (d < 0 || d >= world.WalkableMap[0].length) Debug.Log("d out of range: " + d);

因为您正在使用两个数组,但是到目前为止您还没有排除导致IndexOutOfBoundsException的一个数组。