private void CreateMesh() { Vector2[] points2D = new Vector2[MarkerList.Count - 1]; for (int i = 0; i < MarkerList.Count - 1; i++) { points2D[i] = new Vector2(MarkerList[i].Position.x, MarkerList[i].Position.z); } Triangulator.Instance.SetPoints(points2D); int[] triangles = Triangulator.Instance.Triangulate(); Vector3[] vertices3D = new Vector3[points2D.Length]; for (int i = 0; i < vertices3D.Length; i++) { vertices3D[i] = new Vector3(points2D[i].x, MarkerList[i].Position.y + 0.005f, points2D[i].y); } Mesh msh = new Mesh(); msh.vertices = vertices3D; msh.triangles = triangles; msh.RecalculateNormals(); msh.RecalculateBounds(); GameObject emptyGo = new GameObject(); emptyGo.name = "Area"; emptyGo.transform.parent = groundPlane.transform; MeshRenderer meshRenderer = emptyGo.AddComponent(typeof(MeshRenderer)) as MeshRenderer; meshRenderer.enabled = true; meshRenderer.material = surfaceAreaMaterial; meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; meshRenderer.receiveShadows = false; RippleShaderBehaviour rippleBehaviour = emptyGo.AddComponent(typeof(RippleShaderBehaviour)) as RippleShaderBehaviour; MeshFilter filter = emptyGo.AddComponent(typeof(MeshFilter)) as MeshFilter; filter.mesh = msh; surfaceArea = CalculateSurfaceArea(msh); debugText.text += surfaceArea > 1 ? $"\n SURFACE: {Math.Round(surfaceArea, 2)} sq. mts." : $"\n SURFACE: {Math.Round(surfaceArea, 2) * 100} sq. cms."; }
void Awake() { rippleState = GetComponent <RippleShaderBehaviour>(); }