public void UpdateMesh()
    {
        var sw = Stopwatch.StartNew();

        var mesh = MeshFilter.mesh = FlatMeshGenerator.GenerateFlatMesh(Size, scale);

        mesh.RecalculateNormals();

        sw.Stop();
        var elapsedMs = (double)sw.ElapsedTicks / Stopwatch.Frequency * 1000D;

        UnityEngine.Debug.Log("UpdateMesh: " + elapsedMs + "ms");
    }
Beispiel #2
0
    private void SpawnChunk(int size, int xPos, int yPos)
    {
        var chunk = new GameObject
        {
            name = string.Format("Terrain chunk [{0}, {1}]", xPos, yPos)
        };

        chunk.transform.parent = transform;

        var meshFilter = chunk.AddComponent <MeshFilter>();

        meshFilter.mesh = FlatMeshGenerator.GenerateFlatMesh(size, scale);

        var renderer = chunk.AddComponent <MeshRenderer>();

        renderer.material = terrainMaterial;
    }
Beispiel #3
0
    //////////////////////////////////////////////////////////////////////////////
    //                                                                          //
    //Unity Functions                                                           //
    //                                                                          //
    //////////////////////////////////////////////////////////////////////////////
    void Start()
    {
        Mesh origianlMesh = null;

        //Get original mesh from MeshFilter or SkinnedMeshRenderer
        MeshFilter          meshFilter          = GetComponent <MeshFilter>();
        SkinnedMeshRenderer skinnedMeshRenderer = GetComponent <SkinnedMeshRenderer>();

        if (meshFilter != null)
        {
            origianlMesh = meshFilter.sharedMesh;
        }

        if (origianlMesh == null && skinnedMeshRenderer != null)
        {
            origianlMesh = skinnedMeshRenderer.sharedMesh;
        }


        //Oops, no mesh found
        if (origianlMesh == null)
        {
            return;
        }



        //Will contain bake results
        Mesh newMesh = null;

        //Will contain baking reports, will help if something goes wrong
        FlatMeshGenerator.CONVERTION_INFO[] convertionInfo;

        //Same as above but with more detail info
        string[] convertionInfoString;



        //Generating flat mesh
        newMesh = FlatMeshGenerator.GenerateFlatMesh(GetComponent <Renderer>(), out convertionInfo, out convertionInfoString, flatOptions);


        //Check reports
        if (convertionInfoString != null)
        {
            for (int i = 0; i < convertionInfoString.Length; i++)
            {
                Debug.Log(convertionInfoString[i]);
            }
        }


        //Successful conversation
        if (newMesh != null)
        {
            //Replace old mesh with new one
            if (meshFilter != null)
            {
                meshFilter.sharedMesh = newMesh;
            }
            else if (skinnedMeshRenderer != null)
            {
                skinnedMeshRenderer.sharedMesh = newMesh;
            }


            //Replace material to make baked data visible
            GetComponent <Renderer>().sharedMaterials = new Material[] { vertexColorMaterial };
        }
    }