数组的长度在C#Unity中始终为零

数组的长度在C#Unity中始终为零,c#,arrays,unity3d,C#,Arrays,Unity3d,我正在尝试使用unity游戏引擎创建一个基本的井字游戏。这是我的密码: public int[] board = new int[9] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; public bool xTurn = true; public void OnGUI() { float width = 75; float height = 75; for (int y = 0; y < 3; y++) {

我正在尝试使用unity游戏引擎创建一个基本的井字游戏。这是我的密码:

public int[] board = new int[9] {
    0, 0, 0, 
    0, 0, 0, 
    0, 0, 0
};
public bool xTurn = true;

public void OnGUI() {
    float width = 75;
    float height = 75;
    for (int y = 0; y < 3; y++) {
        Debug.Log("Value of y = " + y);
        for (int x = 0; x < 3; x++) {
            Debug.Log("Length of array = " + board.Length);
            int boardIndex = (y * 3) + x;
            Rect square = new Rect(x * width, y * height, width, height);
            Debug.Log ("Value of boardIndex = " + boardIndex + " value of x = " + x);
            string owner = board[boardIndex] == 1 ? "X" :
                board[boardIndex] == -1 ? "O" : "";
            if(GUI.Button(square, owner))
                SetControl(boardIndex);
        }
    }
}
public int[]board=new int[9]{
0, 0, 0, 
0, 0, 0, 
0, 0, 0
};
公共bool xTurn=真;
公营机构{
浮动宽度=75;
浮子高度=75;
对于(int y=0;y<3;y++){
Debug.Log(“y的值=”+y);
对于(int x=0;x<3;x++){
Debug.Log(“数组长度=”+board.Length);
指数=(y*3)+x;
矩形=新矩形(x*宽度,y*高度,宽度,高度);
Debug.Log(“boardIndex的值=“+boardIndex+”x的值=“+x”);
字符串所有者=板[boardIndex]==1?“X”:
板[boardIndex]==-1?“O”:“;
if(GUI按钮(方形,所有者))
设置控件(boardIndex);
}
}
}
但问题是
board
数组的长度始终为0,在尝试访问
board
数组中的任何值时,会出现ArrayIndexOutOfBounds异常。
我甚至尝试了创建阵列的不同方法。还是一样的结果。谁能告诉我数组长度为0的原因。

我以前在公共字段中遇到过Unity。我推测这是由于编辑器界面如何与公共字段集成(编辑器正在清除您的初始值),但我还没有找到支持这一点的文档。但是,通过将初始化代码移动到
Start
函数中,我已经能够解决这个问题

但是,如果您仍然希望在编辑器中公开这一点,则可能必须添加额外的逻辑

void Start ()
{
    board = board ?? new int[9] {
      0, 0, 0, 
      0, 0, 0, 
      0, 0, 0
    };
}

或者,我认为如果您只需将变量更改为
private
protected
,那么应该将其从编辑器中删除,并且它也应该可以工作。

p填充数组的代码是否没有运行?确保代码在运行的方法中(用断点验证),一旦确定代码被命中,就应该是好的;也许可以尝试初始化它differently@RyPope:初始化在我看来是正常的。否则他会得到一个编译错误。@Rype两个语法都应该工作。有些东西你没有显示出来。照目前的情况,
board
不可能是
0
长度。我记得Unity要求您将几乎所有初始化都放在MonoBehavior的Start方法中,因为构造函数不用于实例化行为。@如果您不需要将
board
公开给编辑器,你应该把它设为私人的