Exemplo n.º 1
0
        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.";
        }
Exemplo n.º 2
0
 void Awake()
 {
     rippleState = GetComponent <RippleShaderBehaviour>();
 }