Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 索引超出了数组的边界。三维阵列_C#_Arrays_Unity3d - Fatal编程技术网

C# 索引超出了数组的边界。三维阵列

C# 索引超出了数组的边界。三维阵列,c#,arrays,unity3d,C#,Arrays,Unity3d,IndexOutOfRangeException:索引超出了数组的边界。(wrapper managed to managed)System.Object.ElementAddr_4(Object,int,int,int)Camera_s.Start()(位于Assets/scripts/Camera_s.cs:19) Script Move.cs: 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共阶级运动:单一行为 { 公共区块sc

IndexOutOfRangeException:索引超出了数组的边界。(wrapper managed to managed)System.Object.ElementAddr_4(Object,int,int,int)Camera_s.Start()(位于Assets/scripts/Camera_s.cs:19)

Script Move.cs:
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共阶级运动:单一行为
{
公共区块scr;
公共摄像机;
公共转换我的街区;
私有int[,]网格;
void Start()
{
my_block=gameObject.transform.parent;
scr=my_block.GetComponent();
cam=GameObject.Find(“主摄像机”).GetComponent();
网格=凸轮网格;
}
void OnMouseDown(){
如果(scr.IsActive){
如果(gameObject.transform.name==“左”){
my_block.position-=新矢量3(cam.Jump_大小,0f);
}
else if(gameObject.transform.name==“right”){
my_block.position+=新矢量3(cam.Jump_大小,0f);
}
else if(gameObject.transform.name==“up”){
my_block.position+=新矢量3(0f,凸轮跳转尺寸);
}
else if(gameObject.transform.name==“向下”){
my_block.position-=新矢量3(0f,凸轮跳转尺寸);
}
}
}
无效更新()
{
}
}
脚本Block.cs:
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类块:单一行为
{
公共bool IsActive=false;
公共摄像机的摄像机脚本;
公共int Id;
公共国际合作;
公共int颜色;
私有int[,]网格;
void Start()
{
Camera_Script=GameObject.Find(“主摄像头”).GetComponent();
Id=摄影机\脚本。块\最大值+1;
Camera_Script.Block_max+=1;
grid=摄影机\脚本.grid;
网格[coords[0],coords[1],0]=1;
网格[coords[0],coords[1],0]=颜色;
}
void OnMouseDown(){
IsActive=true;
Camera_Script.Active=Id;
Debug.Log(“活动”);
}
//每帧调用一次更新
无效更新()
{
如果(照相机脚本激活!=Id){
IsActive=假;
}
}
}
脚本摄影机\u.cs:
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类摄像机:单一行为
{
public int Active=-1;
公共整数块_max=-1;
公共浮点数;
公共int[]网格大小;
公共int[,]网格;
void Start()
{
Grid=newint[Grid_Size[1],Grid_Size[0],2];
对于(int i=0;i<3;i++){
对于(int j=0;j<5;j++){
网格[j,i,0]=0;
网格[j,i,1]=0;
}
}
}
//每帧调用一次更新
无效更新()
{
}
}
我知道我的for有问题,但我不知道如何解决

代码的主要部分,我犯了错误:

for (int i = 0;i < 3;i++){
            for (int j = 0;i < 5;j++){
                Grid[j, i, 0] = 0;
                Grid[j, i, 1] = 0;
            }
        }
for(int i=0;i<3;i++){
对于(int j=0;i<5;j++){
网格[j,i,0]=0;
网格[j,i,1]=0;
}
}
Unity Editor输入的数据:

跳跃大小=3f;网格大小=[5,3]


谢谢

如果你输入的是网格大小=[5,3],这意味着你的前两个维度被翻转了。 您可以简单地纠正这一点,但如果只有一个值对产生错误,则不应公开大小

Grid = new int[Grid_Size[0], Grid_Size[1], 2];
for (int i = 0;i < Grid.GetLength(1);i++){
    for (int j = 0;j< Grid.GetLength(0);j++){
        Grid[j, i, 0] = 0;
        Grid[j, i, 1] = 0;
    }
}
Grid=newint[Grid_Size[0],Grid_Size[1],2];
对于(int i=0;i
如果您翻转输入,但仍使用与以前相同的访问顺序,则会产生与以前相同的数组维度。当然,具体如何实现这一点取决于您希望对数组执行什么操作

此外,建议检查输入值是否正确,在块中,再次使用编辑器中的输入(coords)索引网格。我建议确保输入在数组的预期范围内

Grid = new int[Grid_Size[0], Grid_Size[1], 2];
for (int i = 0;i < Grid.GetLength(1);i++){
    for (int j = 0;j< Grid.GetLength(0);j++){
        Grid[j, i, 0] = 0;
        Grid[j, i, 1] = 0;
    }
}