private void GenerateMesh(PCTrail trail) { trail.Mesh.Clear(false); Vector3 camForward = Camera.main != null ? Camera.main.transform.forward : Vector3.forward; if (TrailData.UseForwardOverride) { camForward = TrailData.ForwardOverride.normalized; } trail.activePointCount = NumberOfActivePoints(trail); if (trail.activePointCount < 2) { return; } int vertIndex = 0; for (int i = 0; i < trail.Points.Count; i++) { PCTrailPoint p = trail.Points[i]; float timeAlong = p.TimeActive() / TrailData.Lifetime; if (p.TimeActive() > TrailData.Lifetime) { continue; } if (TrailData.UseForwardOverride && TrailData.ForwardOverrideRelative) { camForward = p.Forward; } Vector3 cross = Vector3.zero; if (i < trail.Points.Count - 1) { cross = Vector3.Cross((trail.Points[i + 1].Position - p.Position).normalized, camForward). normalized; } else { cross = Vector3.Cross((p.Position - trail.Points[i - 1].Position).normalized, camForward). normalized; } //yuck! lets move these into their own functions some time Color c = TrailData.StretchColorToFit ? (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.ColorOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) : (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, timeAlong) : TrailData.ColorOverLife.Evaluate(timeAlong)); float s = TrailData.StretchSizeToFit ? (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.SizeOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) : (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, timeAlong) : TrailData.SizeOverLife.Evaluate(timeAlong)); trail.verticies[vertIndex] = p.Position + cross * s; if (TrailData.MaterialTileLength <= 0) { trail.uvs[vertIndex] = new Vector2((float)vertIndex / (float)trail.activePointCount / 2f, 0); } else { trail.uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 0); } trail.normals[vertIndex] = camForward; trail.colors[vertIndex] = c; vertIndex++; trail.verticies[vertIndex] = p.Position - cross * s; if (TrailData.MaterialTileLength <= 0) { trail.uvs[vertIndex] = new Vector2((float)vertIndex / (float)trail.activePointCount / 2f, 1); } else { trail.uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 1); } trail.normals[vertIndex] = camForward; trail.colors[vertIndex] = c; vertIndex++; } Vector2 finalPosition = trail.verticies[vertIndex - 1]; for (int i = vertIndex; i < trail.verticies.Length; i++) { trail.verticies[i] = finalPosition; } int indIndex = 0; for (int pointIndex = 0; pointIndex < 2 * (trail.activePointCount - 1); pointIndex++) { if (pointIndex % 2 == 0) { trail.indicies[indIndex] = pointIndex; indIndex++; trail.indicies[indIndex] = pointIndex + 1; indIndex++; trail.indicies[indIndex] = pointIndex + 2; } else { trail.indicies[indIndex] = pointIndex + 2; indIndex++; trail.indicies[indIndex] = pointIndex + 1; indIndex++; trail.indicies[indIndex] = pointIndex; } indIndex++; } int finalIndex = trail.indicies[indIndex - 1]; for (int i = indIndex; i < trail.indicies.Length; i++) { trail.indicies[i] = finalIndex; } trail.Mesh.vertices = trail.verticies; trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0); trail.Mesh.uv = trail.uvs; trail.Mesh.normals = trail.normals; trail.Mesh.colors = trail.colors; }
private Mesh GenerateMesh(CircularBuffer <PCTrailPoint> trail) { Vector3 camForward = Camera.main != null ? Camera.main.transform.forward : Vector3.forward; if (TrailData.UseForwardOverride) { camForward = TrailData.ForwardOverride.normalized; } Mesh generatedMesh = new Mesh(); int activePointCount = NumberOfActivePoints(trail); if (activePointCount < 2) { return(null); } Vector3[] verticies = new Vector3[2 * activePointCount]; Vector3[] normals = new Vector3[2 * activePointCount]; Vector2[] uvs = new Vector2[2 * activePointCount]; Color[] colors = new Color[2 * activePointCount]; int[] indicies = new int[2 * (activePointCount) * 3]; int vertIndex = 0; for (int i = 0; i < trail.Count; i++) { PCTrailPoint p = trail[i]; float timeAlong = p.TimeActive() / TrailData.Lifetime; if (p.TimeActive() > TrailData.Lifetime) { continue; } if (TrailData.UseForwardOverride && TrailData.ForwardOverideRelative) { camForward = p.Forward; } Vector3 cross = Vector3.zero; if (i < trail.Count - 1) { cross = Vector3.Cross((trail[i + 1].Position - p.Position).normalized, camForward). normalized; } else { cross = Vector3.Cross((p.Position - trail[i - 1].Position).normalized, camForward). normalized; } Color c = TrailData.StretchToFit ? TrailData.ColorOverLife.Evaluate(1 - ((float)vertIndex / (float)activePointCount / 2f)) : TrailData.ColorOverLife.Evaluate(timeAlong); float s = TrailData.StretchToFit ? TrailData.SizeOverLife.Evaluate(1 - ((float)vertIndex / (float)activePointCount / 2f)) : TrailData.SizeOverLife.Evaluate(timeAlong); verticies[vertIndex] = p.Position + cross * s; if (TrailData.MaterialTileLength <= 0) { uvs[vertIndex] = new Vector2((float)vertIndex / (float)activePointCount / 2f, 0); } else { uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 0); } normals[vertIndex] = camForward; colors[vertIndex] = c; vertIndex++; verticies[vertIndex] = p.Position - cross * s; if (TrailData.MaterialTileLength <= 0) { uvs[vertIndex] = new Vector2((float)vertIndex / (float)activePointCount / 2f, 1); } else { uvs[vertIndex] = new Vector2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 1); } normals[vertIndex] = camForward; colors[vertIndex] = c; vertIndex++; } int indIndex = 0; for (int pointIndex = 0; pointIndex < 2 * (activePointCount - 1); pointIndex++) { if (pointIndex % 2 == 0) { indicies[indIndex] = pointIndex; indIndex++; indicies[indIndex] = pointIndex + 1; indIndex++; indicies[indIndex] = pointIndex + 2; } else { indicies[indIndex] = pointIndex + 2; indIndex++; indicies[indIndex] = pointIndex + 1; indIndex++; indicies[indIndex] = pointIndex; } indIndex++; } generatedMesh.vertices = verticies; generatedMesh.SetIndices(indicies, MeshTopology.Triangles, 0); generatedMesh.uv = uvs; generatedMesh.normals = normals; generatedMesh.colors = colors; return(generatedMesh); }
private void GenerateMesh(PCTrail trail) { trail.Mesh.Clear(false); float3 camForward = Camera.main != null ?(float3)Camera.main.transform.forward : float3(0, 0, 1); if (TrailData.UseForwardOverride) { camForward = normalize(TrailData.ForwardOverride); } trail.activePointCount = NumberOfActivePoints(trail); if (trail.activePointCount < 2) { return; } Profiler.BeginSample("generameshTest"); int vertIndex = 0; for (int i = 0; i < trail.Points.Count; i++) { PCTrailPoint p = trail.Points[i]; float timeAlong = p.TimeActive() / TrailData.Lifetime; if (p.TimeActive() > TrailData.Lifetime) { continue; } if (TrailData.UseForwardOverride && TrailData.ForwardOverrideRelative) { camForward = p.Forward; } float3 Cross = float3.zero; if (i < trail.Points.Count - 1) { Cross = cross(normalize(trail.Points[i + 1].Position - p.Position), camForward); } else { Cross = cross(normalize(p.Position - trail.Points[i - 1].Position), camForward); } Cross = normalize(Cross); //yuck! lets move these into their own functions some time Color c = TrailData.StretchColorToFit ? (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.ColorOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) : (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, timeAlong) : TrailData.ColorOverLife.Evaluate(timeAlong)); float s = TrailData.StretchSizeToFit ? (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, 1 - ((float)vertIndex / (float)trail.activePointCount / 2f)) : TrailData.SizeOverLife.Evaluate(1 - ((float)vertIndex / (float)trail.activePointCount / 2f))) : (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, timeAlong) : TrailData.SizeOverLife.Evaluate(timeAlong)); trail.vertexDatas[vertIndex].verticies = p.Position + Cross * s; trail.vertexDatas[vertIndex].normals = camForward; if (TrailData.MaterialTileLength <= 0) { trail.vertexDatas[vertIndex].uvs = new float2((float)vertIndex / (float)trail.activePointCount / 2f, 0); } else { trail.vertexDatas[vertIndex].uvs = new float2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 0); } trail.vertexDatas[vertIndex].colors = c; vertIndex++; trail.vertexDatas[vertIndex].verticies = p.Position - Cross * s; trail.vertexDatas[vertIndex].normals = camForward; if (TrailData.MaterialTileLength <= 0) { trail.vertexDatas[vertIndex].uvs = new float2((float)vertIndex / (float)trail.activePointCount / 2f, 1); } else { trail.vertexDatas[vertIndex].uvs = new float2(p.GetDistanceFromStart() / TrailData.MaterialTileLength, 1); } trail.vertexDatas[vertIndex].colors = c; vertIndex++; } float3 finalPosition = trail.vertexDatas[vertIndex - 1].verticies; for (int i = vertIndex; i < trail.vertexDatas.Length; i++) { trail.vertexDatas[i].verticies = finalPosition; } int indIndex = 0; for (int pointIndex = 0; pointIndex < 2 * (trail.activePointCount - 1); pointIndex++) { if (pointIndex % 2 == 0) { trail.indicies[indIndex] = pointIndex; indIndex++; trail.indicies[indIndex] = pointIndex + 1; indIndex++; trail.indicies[indIndex] = pointIndex + 2; } else { trail.indicies[indIndex] = pointIndex + 2; indIndex++; trail.indicies[indIndex] = pointIndex + 1; indIndex++; trail.indicies[indIndex] = pointIndex; } indIndex++; } Profiler.EndSample(); Profiler.BeginSample("SetMeshVertexTest"); trail.Mesh.SetVertexBufferParams(trail.vertexDatas.Length, new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.UNorm8, 4), new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2)); trail.Mesh.SetVertexBufferData(trail.vertexDatas, 0, 0, trail.vertexDatas.Length); trail.Mesh.SetIndexBufferParams(trail.indicies.Length, IndexFormat.UInt32); trail.Mesh.SetIndexBufferData(trail.indicies, 0, 0, trail.indicies.Length); trail.Mesh.subMeshCount = 1; var subMeshDescriptor = new SubMeshDescriptor(0, trail.indicies.Length, MeshTopology.Triangles); trail.Mesh.SetSubMesh(0, subMeshDescriptor); Profiler.EndSample(); }
private void GenerateMesh(PCTrail trail) { trail.Mesh.Clear(false); Vector3 rhs = (Camera.main == null) ? Vector3.forward : Camera.main.transform.forward; if (base.TrailData.UseForwardOverride) { rhs = base.TrailData.ForwardOverride.normalized; } trail.activePointCount = trail.Points.Count; if (trail.activePointCount >= 2) { int index = 0; for (int i = 0; i < trail.Points.Count; i++) { PCTrailPoint point = trail.Points[i]; if (point.TimeActive() <= base.TrailData.Lifetime) { if (base.TrailData.UseForwardOverride && base.TrailData.ForwardOverrideRelative) { rhs = point.Forward; } Vector3 zero = Vector3.zero; if (i < (trail.Points.Count - 1)) { if (base.TrailData.UseForwardOverride && base.TrailData.ForwardOverrideRelative) { Vector3 vector5 = trail.Points[i + 1].Position - point.Position; zero = Vector3.Cross(vector5.normalized, rhs).normalized; } else { Vector3 vector7 = trail.Points[i + 1].Position - point.Position; zero = vector7.normalized; } } else if (base.TrailData.UseForwardOverride && base.TrailData.ForwardOverrideRelative) { Vector3 vector8 = point.Position - trail.Points[i - 1].Position; zero = Vector3.Cross(vector8.normalized, rhs).normalized; } else { Vector3 vector10 = point.Position - trail.Points[i - 1].Position; zero = vector10.normalized; } trail.verticies[index] = point.Position; trail.normals[index] = (Vector3)(zero * base.StretchUpRatio); if (base.clockSize) { trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 1f); } else { trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 0f); } trail.colors[index] = Color.white; index++; trail.verticies[index] = point.Position; trail.normals[index] = (Vector3)(-zero * base.StretchDownRatio); if (base.clockSize) { trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 0f); } else { trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / trail.Points[trail.Points.Count - 1].GetDistanceFromStart(), 1f); } trail.colors[index] = Color.white; index++; } } Vector2 vector3 = trail.verticies[index - 1]; Vector3 vector4 = trail.normals[index - 1]; for (int j = index; j < trail.verticies.Length; j++) { trail.verticies[j] = (Vector3)vector3; trail.normals[j] = vector4; } int num4 = 0; for (int k = 0; k < (2 * (trail.activePointCount - 1)); k++) { if ((k % 2) == 0) { trail.indicies[num4] = k; num4++; trail.indicies[num4] = k + 1; num4++; trail.indicies[num4] = k + 2; } else { trail.indicies[num4] = k + 2; num4++; trail.indicies[num4] = k + 1; num4++; trail.indicies[num4] = k; } num4++; } int num6 = trail.indicies[num4 - 1]; for (int m = num4; m < trail.indicies.Length; m++) { trail.indicies[m] = num6; } trail.Mesh.vertices = trail.verticies; trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0); trail.Mesh.uv = trail.uvs; trail.Mesh.normals = trail.normals; trail.Mesh.colors = trail.colors; } }
private void GenerateMesh(PCTrail trail) { trail.Mesh.Clear(false); Vector3 vector = (!(Camera.main != null)) ? Vector3.forward : Camera.main.transform.forward; if (this.TrailData.UseForwardOverride) { vector = this.TrailData.ForwardOverride.normalized; } trail.activePointCount = this.NumberOfActivePoints(trail); if (trail.activePointCount < 2) { return; } int num = 0; for (int i = 0; i < trail.Points.Count; i++) { PCTrailPoint pCTrailPoint = trail.Points[i]; float num2 = pCTrailPoint.TimeActive() / this.TrailData.Lifetime; if (pCTrailPoint.TimeActive() <= this.TrailData.Lifetime) { if (this.TrailData.UseForwardOverride && this.TrailData.ForwardOverrideRelative) { vector = pCTrailPoint.Forward; } Vector3 a = Vector3.zero; if (i < trail.Points.Count - 1) { a = Vector3.Cross((trail.Points[i + 1].Position - pCTrailPoint.Position).normalized, vector).normalized; } else { a = Vector3.Cross((pCTrailPoint.Position - trail.Points[i - 1].Position).normalized, vector).normalized; } Color color = (!this.TrailData.StretchColorToFit) ? ((!this.TrailData.UsingSimpleColor) ? this.TrailData.ColorOverLife.Evaluate(num2) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, num2)) : ((!this.TrailData.UsingSimpleColor) ? this.TrailData.ColorOverLife.Evaluate(1f - (float)num / (float)trail.activePointCount / 2f) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, 1f - (float)num / (float)trail.activePointCount / 2f)); float d = (!this.TrailData.StretchSizeToFit) ? ((!this.TrailData.UsingSimpleSize) ? this.TrailData.SizeOverLife.Evaluate(num2) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, num2)) : ((!this.TrailData.UsingSimpleSize) ? this.TrailData.SizeOverLife.Evaluate(1f - (float)num / (float)trail.activePointCount / 2f) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, 1f - (float)num / (float)trail.activePointCount / 2f)); trail.verticies[num] = pCTrailPoint.Position + a * d; if (this.TrailData.MaterialTileLength <= 0f) { trail.uvs[num] = new Vector2((float)num / (float)trail.activePointCount / 2f, 0f); } else { trail.uvs[num] = new Vector2(pCTrailPoint.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 0f); } trail.normals[num] = vector; trail.colors[num] = color; num++; trail.verticies[num] = pCTrailPoint.Position - a * d; if (this.TrailData.MaterialTileLength <= 0f) { trail.uvs[num] = new Vector2((float)num / (float)trail.activePointCount / 2f, 1f); } else { trail.uvs[num] = new Vector2(pCTrailPoint.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 1f); } trail.normals[num] = vector; trail.colors[num] = color; num++; } } Vector2 v = trail.verticies[num - 1]; for (int j = num; j < trail.verticies.Length; j++) { trail.verticies[j] = v; } int num3 = 0; for (int k = 0; k < 2 * (trail.activePointCount - 1); k++) { if (k % 2 == 0) { trail.indicies[num3] = k; num3++; trail.indicies[num3] = k + 1; num3++; trail.indicies[num3] = k + 2; } else { trail.indicies[num3] = k + 2; num3++; trail.indicies[num3] = k + 1; num3++; trail.indicies[num3] = k; } num3++; } int num4 = trail.indicies[num3 - 1]; for (int l = num3; l < trail.indicies.Length; l++) { trail.indicies[l] = num4; } trail.Mesh.vertices = trail.verticies; trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0); trail.Mesh.uv = trail.uvs; trail.Mesh.normals = trail.normals; trail.Mesh.colors = trail.colors; }
private void GenerateMesh(PCTrail trail) { trail.Mesh.Clear(false); Vector3 rhs = (Camera.main == null) ? Vector3.forward : Camera.main.transform.forward; if (this.TrailData.UseForwardOverride) { rhs = this.TrailData.ForwardOverride.normalized; } trail.activePointCount = this.NumberOfActivePoints(trail); if (trail.activePointCount >= 2) { int index = 0; for (int i = 0; i < trail.Points.Count; i++) { PCTrailPoint point = trail.Points[i]; float time = point.TimeActive() / this.TrailData.Lifetime; if (point.TimeActive() <= this.TrailData.Lifetime) { if (this.TrailData.UseForwardOverride && this.TrailData.ForwardOverrideRelative) { rhs = point.Forward; } Vector3 zero = Vector3.zero; if (i < (trail.Points.Count - 1)) { Vector3 vector4 = trail.Points[i + 1].Position - point.Position; zero = Vector3.Cross(vector4.normalized, rhs).normalized; } else { Vector3 vector6 = point.Position - trail.Points[i - 1].Position; zero = Vector3.Cross(vector6.normalized, rhs).normalized; } Color color = !this.TrailData.StretchColorToFit ? (!this.TrailData.UsingSimpleColor ? this.TrailData.ColorOverLife.Evaluate(time) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, time)) : (!this.TrailData.UsingSimpleColor ? this.TrailData.ColorOverLife.Evaluate(1f - ((((float)index) / ((float)trail.activePointCount)) / 2f)) : Color.Lerp(this.TrailData.SimpleColorOverLifeStart, this.TrailData.SimpleColorOverLifeEnd, 1f - ((((float)index) / ((float)trail.activePointCount)) / 2f))); float num4 = !this.TrailData.StretchSizeToFit ? (!this.TrailData.UsingSimpleSize ? this.TrailData.SizeOverLife.Evaluate(time) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, time)) : (!this.TrailData.UsingSimpleSize ? this.TrailData.SizeOverLife.Evaluate(1f - ((((float)index) / ((float)trail.activePointCount)) / 2f)) : Mathf.Lerp(this.TrailData.SimpleSizeOverLifeStart, this.TrailData.SimpleSizeOverLifeEnd, 1f - ((((float)index) / ((float)trail.activePointCount)) / 2f))); trail.verticies[index] = point.Position + ((Vector3)(zero * num4)); if (this.TrailData.MaterialTileLength <= 0f) { trail.uvs[index] = new Vector2((((float)index) / ((float)trail.activePointCount)) / 2f, 0f); } else { trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 0f); } trail.normals[index] = rhs; trail.colors[index] = color; index++; trail.verticies[index] = point.Position - ((Vector3)(zero * num4)); if (this.TrailData.MaterialTileLength <= 0f) { trail.uvs[index] = new Vector2((((float)index) / ((float)trail.activePointCount)) / 2f, 1f); } else { trail.uvs[index] = new Vector2(point.GetDistanceFromStart() / this.TrailData.MaterialTileLength, 1f); } trail.normals[index] = rhs; trail.colors[index] = color; index++; } } Vector2 vector3 = trail.verticies[index - 1]; for (int j = index; j < trail.verticies.Length; j++) { trail.verticies[j] = (Vector3)vector3; } int num6 = 0; for (int k = 0; k < (2 * (trail.activePointCount - 1)); k++) { if ((k % 2) == 0) { trail.indicies[num6] = k; num6++; trail.indicies[num6] = k + 1; num6++; trail.indicies[num6] = k + 2; } else { trail.indicies[num6] = k + 2; num6++; trail.indicies[num6] = k + 1; num6++; trail.indicies[num6] = k; } num6++; } int num8 = trail.indicies[num6 - 1]; for (int m = num6; m < trail.indicies.Length; m++) { trail.indicies[m] = num8; } trail.Mesh.vertices = trail.verticies; trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0); trail.Mesh.uv = trail.uvs; trail.Mesh.normals = trail.normals; trail.Mesh.colors = trail.colors; } }