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); } } }