以 Vector3 为键,GameObject 为值的字典

问题描述 投票:0回答:2

我得到“对象实例未设置为实例对象”

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 不为空。

unity3d
2个回答
1
投票

您正在 Start 方法中重新声明 wallPositions 变量。在 Start 方法中初始化 wallPositions 变量时删除类型声明 Dictionary

替换这一行:

Dictionary<Vector3, GameObject> wallPositions = new Dictionary<Vector3, GameObject>();

这个:

wallPositions = new Dictionary<Vector3, GameObject>();

看看有没有用


0
投票

您需要先初始化您的变量,然后才能使用它们,包括字典。

private Dictionary<Vector3, GameObject> wallPositions = new();
© www.soinside.com 2019 - 2024. All rights reserved.