Beispiel #1
0
    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之后这样子操作
    }