Пример #1
0
    void GenerateGeometry()
    {
        //Debug.Log("Generate geometry " + gameObject.name + ".");

        MeshData meshData = new MeshData();

        meshData.Init(_hexTerrain.Types.Count * 2);

        for (int yi = 0; yi < _height; yi++)
        {
            for (int xi = 0; xi < _width; xi++)
            {
                if (_hexTerrain.HexData.Contains(xi + _chunkGridOffset.x, yi + _chunkGridOffset.y))
                {
                    if (_hexTerrain.HexData[yi + _chunkGridOffset.y, xi + _chunkGridOffset.x] != null)
                    {
                        Vector2i coordinate = new Vector2i(xi, yi);
                        Hexagon  hexa       = _hexTerrain.HexData[yi + _chunkGridOffset.y, xi + _chunkGridOffset.x];
                        hexa.AddToChunk(ref meshData, Vector3.zero, coordinate,
                                        HexagonUtils.GetNeighbours(coordinate + _chunkGridOffset, _hexTerrain.HexData),
                                        _hexTerrain.Types);
                    }
                }
            }
        }

        // Setup meshFilter.
        _mesh.Clear();
        _mesh.subMeshCount = meshData.triangles.Length;
        _mesh.vertices     = meshData.vertices.ToArray();
        //_mesh.normals = _meshData.normals.ToArray();
        _mesh.uv = meshData.uvs.ToArray();
        for (int i = 0; i < meshData.triangles.Length; i++)
        {
            _mesh.SetTriangles(meshData.triangles[i].ToArray(), i);
        }
        _mesh.colors32 = meshData.colors.ToArray();
        _mesh.RecalculateNormals();
        IsDirty = false;
    }