C# 无法在unity中引用游戏对象的2D数组

C# 无法在unity中引用游戏对象的2D数组,c#,arrays,unity3d,C#,Arrays,Unity3d,我正在unity中创建国际象棋,我想使用2D单元格数组创建国际象棋板。我能够创建一系列的作品,并可以将它们与各自的预制作品统一起来。但是我没有选择引用2D数组 using System.Collections; using System.Collections.Generic; using UnityEngine; public class gameManager : MonoBehaviour { public GameObject[,] cell = new GameObject[

我正在unity中创建国际象棋,我想使用2D单元格数组创建国际象棋板。我能够创建一系列的作品,并可以将它们与各自的预制作品统一起来。但是我没有选择引用2D数组

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class gameManager : MonoBehaviour
{
    public GameObject[,] cell = new GameObject[7,7];
    public GameObject[] Wpawn = new GameObject[7];
    public GameObject[] Bpawn  = new GameObject[7];
    public GameObject[] Wrook = new GameObject[1];
    public GameObject[] Brook = new GameObject[1];
    public GameObject[] Wknight = new GameObject[1];
    public GameObject[] Bknight = new GameObject[1];
    public GameObject[] Wbishop = new GameObject[1];
    public GameObject[] Bbishop = new GameObject[1];
    public GameObject Wking;
    public GameObject Bking;
    public GameObject Wqueen;
    public GameObject Bqueen;

    bool[] Bpawn2 = new bool[7];
    bool[] Wpawn2 = new bool[7];

    short turn = 0;

    // Start is called before the first frame update
    void Start()
    {
        #region Board
        for (float y = 0F; y <= 7; y+= 1)
        {
            for (float x = 0F; x <= 7F; x+= 1)
            {
                if (y % 2 == 0)
                {
                    if (x % 2 == 0)
                    {
                       cell[(int)x,(int)y].GetComponent<SpriteRenderer>().color = Color.gray; 
                    } else if (x % 2 == 1)
                    {
                        cell[(int)x,(int)y].GetComponent<SpriteRenderer>().color = Color.white; 
                    }
                
                } else if (y % 2 == 1)
                {
                    if (x % 2 == 0)
                    {
                       cell[(int)x,(int)y].GetComponent<SpriteRenderer>().color = Color.white; 
                    } else if (x % 2 == 1)
                    {
                        cell[(int)x,(int)y].GetComponent<SpriteRenderer>().color = Color.gray; 
                    }
                }
                Instantiate(cell[(int)x,(int)y], new Vector3(x - 3.5F, y -3.5F), transform.rotation);
                
            }
        }
        #endregion
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类gameManager:MonoBehavior
{
公共游戏对象[,]单元=新游戏对象[7,7];
公共游戏对象[]Wpawn=新游戏对象[7];
公共游戏对象[]Bpawn=新游戏对象[7];
公共游戏对象[]Wrook=新游戏对象[1];
公共游戏对象[]布鲁克=新游戏对象[1];
公共游戏对象[]Wknight=新游戏对象[1];
公共游戏对象[]Bknight=新游戏对象[1];
公共游戏对象[]Wbishop=新游戏对象[1];
公共游戏对象[]Bbishop=新游戏对象[1];
公开游戏对象工作;
公开游戏对象Bking;
公开游戏对象;
公共游戏对象Bqueen;
bool[]Bpawn2=新bool[7];
bool[]Wpawn2=新bool[7];
短转弯=0;
//在第一帧更新之前调用Start
void Start()
{
#地区委员会
太长了,读不下去了(浮动y=0f;y tl;dR;
默认检查器只能显示Unity的序列化程序可序列化的变量,即Unity可以写入和读取文件以进行保存/加载的文件。2D数组不可序列化,因此它们在检查器中不可见

请熟悉Unity中的规则。以下是关于

可供替代的 即使是List或T[][]类型的2D数组也不可序列化。这与Unity中有关泛型序列化的限制有关。定义具体类的简单替代方法如下:

[Serializable]
public class GameObjectList //not a monobehavior
{
    public List<GameObject> gameObjects;
}
这应该会在Inspector中显示一个列表列表,让你引用你的游戏对象。当然,这个方法有点麻烦,每次都要定义一个新类,但它是有效的

笔记:
Unity 2020.2更新中取消了许多关于泛型序列化的限制,但您仍然无法直接序列化2D数组/列表。

因未显示适当的研究成果而被否决。回答时,这是一个有效的问题,而且经常出现。@HarshdeepSingh我无法研究它,因为我不知道使用什么关键字。E每次我搜索它时,它都会显示一些不是我问题的东西。我不知道序列化。谢谢你的解释。可序列化是的,但正如正确所说的,Unity不会序列化;)你的替代方案是否允许我引用我的游戏对象?是的,它将允许你引用你的游戏对象。@ALK003
public GameObjectList[] pieces;