2016-11-22 61 views
0

私はuniで私のプロジェクトのキューブスワップゲームを作っていますが、私のコードが存在しない配列アドレスにアクセスしようとすると問題が発生します。それにアクセスする。何らかの理由で2回目または3回目のパスでl、m、nを5に設定し、配列が5×5×5単位しかないので何も見つかりません。Unity c#配列のインデックスが範囲外です

public void matchCheck() 
{ 
     int l; 
     int m; 
     int n; 
    //sweep x axis for matches 

    for (l = 0; l < 5; l++)  // the letter k is unclean and must be purged 
    { 
     for (m = 0; m < 5; m++) 
     { 
      for (n = 0; n < 5; n++) 
      { 

       if (n > 0) 
       { 
        if (grid[n - 1, m, l] == grid[n, m, l] && xcombo < 6) 
        { 

         xcombo += 1; 

        } 
        else 
        { 

         switch (xcombo) 
         { 
          case 4: 
           Debug.Log("match 5" + cube[n - 1, m, l] + cube[n - 2, m, l] + cube[n - 3, m, l] + cube[n - 4, m, l] + cube[n - 5, m, l]); 
            grid[n - 1, m, l] = randomNumber(); 
            grid[n - 2, m, l] = randomNumber(); 
            grid[n - 3, m, l] = randomNumber(); 
            grid[n - 4, m, l] = randomNumber(); 
            grid[n - 5, m, l] = randomNumber(); 
            xcombo = 0; 
            refreshGrid(); 

           break; 
          case 3: 
           Debug.Log("match 4" + cube[n - 1, j, l] + cube[n - 2, j, l] + cube[n - 3, j, l] + cube[n - 4, j, l]); 
           grid[n - 1, m, l] = randomNumber(); 
           grid[n - 2, m, l] = randomNumber(); 
           grid[n - 3, m, l] = randomNumber(); 
           grid[n - 4, m, l] = randomNumber(); 

           xcombo = 0; 
           refreshGrid(); 

           break; 
          case 2: 
           Debug.Log("match 3" + cube[n - 1, j, l] + cube[n - 2, j, l] + cube[n - 3, j, l]); 
            grid[n - 1, m, l] = randomNumber(); 
            grid[n - 2, m, l] = randomNumber(); 
            grid[n - 3, m, l] = randomNumber(); 
           xcombo = 0; 
           refreshGrid(); 
           break; 
         } 
         Debug.Log("combo" + xcombo); 
         xcombo = 0; 
         refreshGrid(); 

        } 

       } 

      } 
      n = 0; 
     } 
     m = 0; 
     xcombo = 0; 
    } 

} 
+0

ロギング/デバッグから、3つの変数すべてがある時点で5に設定されていると判断しましたか? – Serlite

+0

ええ、そのスーパーwierd、私は別の3を使用していた私は、jとkは、私は他の方法でループのために使用していたと思って、彼らはどこか他のしかし、lとmとnは5に設定ローカルでmatchcheck() –

+0

このエラーが発生します IndexOutOfRangeException:配列インデックスが範囲外です。 (ラッパーによって管理される)オブジェクト:ElementAddr_3_8(オブジェクト、int、int、int) –

答えて

1
grid[n - 5 

そのときN低い(N-1を除く)全ての同様のラインが負の数になります。

また、forループはnが0から始まりますが、すぐに0より大きいかどうかをチェックします。ただ1で始まらないのはなぜですか?

関連する問題