private void CreateCell(int x, int z, int index) { Vector3 pos; pos.x = x * (HexMetrics.innerRadius * 2f) + (z % 2) * HexMetrics.innerRadius; pos.y = 0f; pos.z = z * (HexMetrics.outerRadius * 1.5f); HexCell cell = Instantiate <HexCell>(cellPrefab, transform); cell.Index = index; cell.transform.localPosition = pos; cell.coordinates = HexCoordinates.ConvertOffsetCoordinates(x, z); cell.color = defaultColor; cell.ShaderData = cellShaderData; if (x > 0) { cell.SetNeighbor(HexDirection.W, cells[index - 1]); //除了每一行的第一个格子没有W方向的相邻格子,其余都有 } if (z > 0) { if ((z & 1) == 0) //如果是偶数,偶数的最小的一位上一定是0,和1进行按位与操作后,一定是0 { cell.SetNeighbor(HexDirection.SE, cells[index - colNum]); if (x > 0) { cell.SetNeighbor(HexDirection.SW, cells[index - colNum - 1]); //偶数行的第一个的格子的左下角没有相邻格子 } } else { cell.SetNeighbor(HexDirection.SW, cells[index - colNum]); if (x < colNum - 1) { cell.SetNeighbor(HexDirection.SE, cells[index - colNum + 1]); //奇数行的最后一个格子的右下角没有相邻格子 } } } cells[index] = cell; Text label = Instantiate <Text>(cellLabelPrefab, gridCanvas.transform); label.rectTransform.anchoredPosition = new Vector2(pos.x, pos.z); // label.text = x+"\n"+z; //注意需要将Canvas Scaler上的Dynamic Pixels Per Unit调整为10,否则文字很模糊 label.text = cell.coordinates.ToStringOnSeparateLines(); //添加了HexCoordinates之后这样子操作 }