using System.Collections; using System.Collections.Generic; using UnityEngine; public class Customized : MonoBehaviour { Mesh mesh; Calculator2D calculator2D; public string formula; public int minX; public int maxX; // Start is called before the first frame update void Start() { mesh = new Mesh { name = "Customized" }; calculator2D = new Calculator2D(); } // Update is called once per frame void Update() { } public void DrawCustomized() { mesh.Clear(); bool isContinue = false; Vector3[] vectors = new Vector3[100 * (maxX - minX) + 1]; int[] triangle = new int[100 * (maxX - minX) * 2]; int k = 0; float step = 0.01f; for (float i = minX; i <= maxX; i += step) { float y = 0; if(calculator2D.calculate2D(formula, i ,out y)) { vectors[k] = new Vector3(i, y, 0); if (k != 0) { if (isContinue) { triangle[2 * (k - 1)] = k - 1; triangle[2 * (k - 1) + 1] = k; } else { triangle[2 * (k - 1)] = k; triangle[2 * (k - 1) + 1] = k; } } isContinue = true; } else { if (k != 0) vectors[k] = vectors[k - 1]; else vectors[k] = new Vector3(0, 0, -1000); isContinue = false; } k++; } mesh.vertices = vectors; mesh.SetIndices(triangle, MeshTopology.Lines, 0); GetComponent().mesh = mesh; } public void DrawCustomized3D() { mesh.Clear(); bool isContinue = false; Vector3[] vectors = new Vector3[200 * (maxX - minX) + 2]; int[] triangle = new int[100 * (maxX - minX) * 6]; int k = 0; float step = 0.01f; for (float i = minX; i <= maxX; i += step) { float y = 0; if (calculator2D.calculate2D(formula, i, out y)) { vectors[k] = new Vector3(i, y, -5); vectors[k + 1] = new Vector3(i, y, 5); if (k != 0) { if (isContinue) { triangle[3 * (k - 2)] = k - 2; triangle[3 * (k - 2) + 1] = k - 1; triangle[3 * (k - 2) + 2] = k; triangle[3 * (k - 2) + 3] = k - 1; triangle[3 * (k - 2) + 4] = k + 1; triangle[3 * (k - 2) + 5] = k; } else { triangle[3 * (k - 2)] = k - 2; triangle[3 * (k - 2) + 1] = k - 1; triangle[3 * (k - 2) + 2] = k - 1; triangle[3 * (k - 2) + 3] = k; triangle[3 * (k - 2) + 4] = k + 1; triangle[3 * (k - 2) + 5] = k; } } isContinue = true; } else { if (k != 0) { vectors[k] = vectors[k - 2]; vectors[k + 1] = vectors[k - 1]; } else { vectors[k] = new Vector3(0, 0, -1000); vectors[k + 1] = new Vector3(0, 0, -1000); } isContinue = false; } k += 2; } mesh.vertices = vectors; Vector2[] uvs = new Vector2[vectors.Length]; for (int i = 0; i < uvs.Length; i++) { uvs[i] = new Vector2(0, vectors[i].y / 100); } mesh.uv = uvs; mesh.SetIndices(triangle, MeshTopology.Triangles, 0); GetComponent().mesh = mesh; } public void MeshClear() { mesh.Clear(); GetComponent().mesh = mesh; } }