Пример #1
0
        // ====================================================================================================================
        // Bakes the mesh with the current contents of the data lists.
        // The "retriangulate" parameter controls whether or not the triangle list is remade.
        // It needs to be remade after Add(), but not after Shift(), since the data is the same size.

        public void BakeMesh(WormCursor cursor, bool retriangulate)
        {
            if (retriangulate)
            {
                triangles.Clear();

                int vertsPerSeg = cursor.points.Count;
                for (int v = 0; v < vertsPerSeg - 1; v++)
                {
                    for (int s = 0; s < vertices.Count - vertsPerSeg; s += vertsPerSeg)
                    {
                        triangles.Add(s + v);
                        triangles.Add(s + v + vertsPerSeg);
                        triangles.Add(s + v + 1);
                        triangles.Add(s + v + vertsPerSeg + 1);
                        triangles.Add(s + v + 1);
                        triangles.Add(s + v + vertsPerSeg);
                    }
                }
            }

            mesh.Clear();
            mesh.SetVertices(vertices);
            mesh.SetUVs(0, uvs);
            mesh.SetTriangles(triangles, 0);

            // Unity is dumb and won't update the collision unless you do this here

            meshCollider.sharedMesh = mesh;
        }
Пример #2
0
        // ====================================================================================================================
        // "Shifts" on a new segment - making room in the vertex / uv data by removing one segment from the back.

        public void ShiftSegment(WormCursor cursor)
        {
            int vertsPerSeg = cursor.points.Count;

            vertices.RemoveRange(0, vertsPerSeg);
            uvs.RemoveRange(0, vertsPerSeg);

            AddSegment(cursor);
        }
Пример #3
0
        // ====================================================================================================================
        // Adds one new segment of vertex / uv data using the given cursor.

        public void AddSegment(WormCursor cursor)
        {
            float vCoord = cursor.distanceTraveled / textureLength;

            foreach (var point in cursor.points)
            {
                vertices.Add(point.transform.position);
                uvs.Add(new Vector2(point.uCoord, vCoord));
            }
        }