/// <summary> /// Update all cell's visibility and CUBE's alpha. /// </summary> private void UpdateGrid() { if (!enabled) return; Vector3 cursorLayer = cursor.Multipy(viewAxis).Round(); // update cells for (int y = 0; y < grid.Length; y++) { for (int z = 0; z < grid.Length; z++) { for (int x = 0; x < grid.Length; x++) { var index = new Vector3(x, y, z); Vector3 currentLayer = index.Multipy(viewAxis).Round(); if (currentLayer == cursorLayer && (grid[y][z][x] == null || cursor == index)) { cells[y][z][x].SetActive(true); } else { cells[y][z][x].SetActive(false); } } } } // get direction of camera float direction = (viewAxis == Vector3.right || viewAxis == Vector3.up || viewAxis == Vector3.forward ? 1f : -1f); // update CUBEs foreach (var cube in currentBuild) { Vector3 depth = (CUBE.AllCUBES[cube.Key.ID].size - Vector3.one).Multipy(viewAxis).Round() * direction; Vector3 cubePosition = cube.Value.position.Multipy(viewAxis).Round(); Vector3 difference = (cubePosition - depth) - cursorLayer; // if difference vector is facing down camera forward foreach (Material mat in cube.Key.renderer.materials) mat.SetFloat(AlphaName, difference.normalized * direction == viewAxis ? nearAlpha : 1f); } }