private void InitializeNode(int i, int j, Vector3 nodeWorldPosition, Node.ENodeType nodeType, CellBehaviour cell)
        {
            Grid[i, j]                 = Instantiate(NodePrefab, nodeWorldPosition, Quaternion.identity, nodeContainer.transform);
            Grid[i, j].NodeType        = nodeType;
            Grid[i, j].WorldPosition   = nodeWorldPosition;
            Grid[i, j].cell            = cell;
            Grid[i, j].pathfindingGrid = this;

            if (nodeType == Node.ENodeType.NonWalkable)
            {
                Material mat = Grid[i, j].GetComponent <MeshRenderer>().material;
                mat.color = new Color(0.1f, 0, 0, 0.1f);
                Grid[i, j].GetComponent <MeshRenderer>().material = mat;
            }
            else
            {
                Material mat = Grid[i, j].GetComponent <MeshRenderer>().material;
                mat.color = new Color(0, 0.2f, 0, 0.1f);
                Grid[i, j].GetComponent <MeshRenderer>().material = mat;
            }

            Grid[i, j].transform.localScale *= ScaleFactor;

            Grid[i, j].GridX = i;
            Grid[i, j].GridZ = j;
        }
        private void CreateGrid()
        {
            if (nodeContainer != null)
            {
                Destroy(nodeContainer);
            }

            nodeContainer = new GameObject("Node Container");
            nodeContainer.transform.SetParent(this.transform);
            Grid = new Node[GridSizeX, GridSizeZ];
            Vector3 gridOrigin;

            //Collider[] results = new Collider[16];

            if (UseTransformAsGridOrigin)
            {
                gridOrigin = transform.position;
            }
            else
            {
                gridOrigin = transform.position - Vector3.right * GridWorldSize.x / 2 - Vector3.forward * GridWorldSize.y / 2;
            }

            Debug.DrawRay(Vector3.zero, gridOrigin);
            for (int i = 0; i < GridSizeX; i++)
            {
                for (int j = 0; j < GridSizeZ; j++)
                {
                    Node.ENodeType nodeType          = Node.ENodeType.Walkable;
                    CellBehaviour  cell              = null;
                    Vector3        nodeWorldPosition = gridOrigin + Vector3.right * (i * _nodeDiameter + NodePrefab.NodeRadius) +
                                                       Vector3.forward * (j * _nodeDiameter + NodePrefab.NodeRadius);

                    /*results = new Collider[16];
                     *                  Physics.OverlapBoxNonAlloc(nodeWorldPosition,
                     *                          new Vector3(NodeRadius, NodeRadius, NodeRadius), results,Quaternion.identity);*/

                    Collider[] colliders = Physics.OverlapBox(nodeWorldPosition, new Vector3(0f, NodePrefab.NodeRadius, 0f), Quaternion.identity);
                    //Collider[] colliders = Physics.OverlapBox(nodeWorldPosition, new Vector3(0, NodePrefab.NodeRadius * 2, 0), Quaternion.identity);

                    LevelController levelController = FindObjectOfType <LevelController>();

                    foreach (var collider in colliders)
                    {
                        if (collider.GetComponent <Entity>() == levelController.TryingToMove())
                        {
                            continue;
                        }

                        if (collider.GetComponent <Entity>())
                        {
                            nodeType = Node.ENodeType.NonWalkable;
                            break;
                        }
                    }

                    Collider[] cols = Physics.OverlapBox(nodeWorldPosition, new Vector3(0, NodePrefab.NodeRadius, 0), Quaternion.identity, _cellMask);
                    cell = cols[0].gameObject.GetComponent <CellBehaviour>();
                    InitializeNode(i, j, nodeWorldPosition, nodeType, cell);
                }
            }
        }