我得到“对象实例未设置为实例对象”
private Dictionary<Vector3, GameObject> wallPositions;
void Start()
{
size = 6;
HalfMaze = new GameObject("Half Maze");
traversed = new bool[size, size, size];
Dictionary<Vector3, GameObject> wallPositions = new Dictionary<Vector3, GameObject>();
GenerateGrid();
}
//in some function
foreach (Transform child in HalfMaze.transform) {
//Debug.Log("hi2");
foreach (Transform grandchild in child) {
//Debug.Log(grandchild.gameObject.name);
if (!(grandchild.position.x == -0.5f || grandchild.position.x == -0.5f + size || grandchild.position.y == -0.5f || grandchild.position.y == -0.5f + size || grandchild.position.z == 0 || grandchild.position.z == -0.5f + size)) {
wallPositions[grandchild.position] = grandchild.gameObject; //issue is here
//Debug.Log("hi");
}
}
}
第二个代码块中的 if 语句内部导致运行时出现问题。我不确定为什么会遇到这个问题,因为 grandchild.gameObject 不为空。
您正在 Start 方法中重新声明 wallPositions 变量。在 Start 方法中初始化 wallPositions 变量时删除类型声明 Dictionary
替换这一行:
Dictionary<Vector3, GameObject> wallPositions = new Dictionary<Vector3, GameObject>();
这个:
wallPositions = new Dictionary<Vector3, GameObject>();
看看有没有用
您需要先初始化您的变量,然后才能使用它们,包括字典。
private Dictionary<Vector3, GameObject> wallPositions = new();