Пример #1
0
        void BuildWireFrame()
        {
            int            chunkIndex   = 0;
            List <Vector3> vertexChunk  = CheckList <Vector3> (ref verticesWire [chunkIndex]);
            List <int>     indicesChunk = CheckList <int> (ref indicesWire [chunkIndex]);

            int pos;
            int verticesCount = -1;

            verticesIdx.Clear();
            int  cellCount   = cells.Length;
            bool useGridMask = _hexaGridUseMask && gridColors != null;

            for (int k = 0; k < cellCount; k++)
            {
                // Mask
                Cell cell = cells [k];
                if (useGridMask)
                {
                    // Convert cell center to texture coordinates
                    int colorIndex = Conversion.ConvertToTextureColorIndex(cell.sphereCenter, gridMaskWidthMinusOne, gridMaskHeightMinusOne);
                    cell.visible = (gridColors [colorIndex].b <= _hexaGridMaskThreshold);
                    if (!cell.visible)
                    {
                        continue;
                    }
                }
                else
                {
                    cell.visible = true;
                }
                if (verticesCount > MAX_VERTEX_COUNT_PER_CHUNK)
                {
                    chunkIndex++;
                    vertexChunk  = CheckList <Vector3> (ref verticesWire [chunkIndex]);
                    indicesChunk = CheckList <int> (ref indicesWire [chunkIndex]);
                    verticesIdx.Clear();
                    verticesCount = -1;
                }
                int     pos0              = 0;
                Point[] cellVertices      = cell.vertexPoints;
                int     cellVerticesCount = cellVertices.Length;
                for (int b = 0; b < cellVerticesCount; b++)
                {
                    Point point = cellVertices [b];
                    if (!verticesIdx.TryGetValue(point, out pos))
                    {
                        vertexChunk.Add(point.projectedVector3);
                        verticesCount++;
                        pos = verticesCount;
                        verticesIdx [point] = pos;
                    }
                    indicesChunk.Add(pos);
                    if (b == 0)
                    {
                        pos0 = pos;
                    }
                    else
                    {
                        indicesChunk.Add(pos);
                    }
                }
                indicesChunk.Add(pos0);
            }

            gridWireframeRoot = CreateGOandParent(gameObject.transform, HEXASPHERE_WIREFRAME).transform;
            for (int k = 0; k <= chunkIndex; k++)
            {
                GameObject go = CreateGOandParent(gridWireframeRoot, "Wire");
                MeshFilter mf = go.AddComponent <MeshFilter> ();
                wiredMeshes [k]           = new Mesh();
                wiredMeshes [k].hideFlags = HideFlags.DontSave;
                wiredMeshes [k].vertices  = verticesWire [k].ToArray();
                wiredMeshes [k].SetIndices(indicesWire [k].ToArray(), MeshTopology.Lines, 0);
                mf.sharedMesh = wiredMeshes [k];
                MeshRenderer mr = go.AddComponent <MeshRenderer> ();
                mr.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
                mr.shadowCastingMode    = UnityEngine.Rendering.ShadowCastingMode.Off;
                mr.receiveShadows       = false;
                mr.sharedMaterial       = gridMat;
            }
        }