Ejemplo n.º 1
0
        public void AddDash(Vector3 drawPoint, Vector3 drawSizes, Color pointColor)
        {
            var localPoint = transform.localScale.PiecewiseMultiply(
                transform.localToWorldMatrix.MultiplyPoint(drawPoint));

            //var localPoint = drawPoint;
            DashPoints.Add(new DashDefinition(
                               localPoint, drawSizes, pointColor
                               ));
        }
Ejemplo n.º 2
0
        public void ApplyPoints()
        {
            Renderers          = new List <Renderer>();
            MeshFilters        = new List <MeshFilter>();
            RendererTransforms = new List <Transform>();

            int counter = 0;

            List <DashDefinition> .Enumerator pointEnumerator = DashPoints.GetEnumerator();
            bool morePoints = pointEnumerator.MoveNext();

            while (morePoints)
            {
                var rendererObject = new GameObject("Renderer Object " + (counter++));

                rendererObject.transform.parent = transform;

                RendererTransforms.Add(rendererObject.transform);

                var mesh = new Mesh();

                var vertList = new List <DashDefinition>();

                while (morePoints && vertList.Count < MaxPointsPerMesh)
                {
                    var thisVert = pointEnumerator.Current;

                    vertList.Add(thisVert);
                    morePoints = pointEnumerator.MoveNext();
                }

                mesh.vertices = vertList.Select(vertex => vertex.Position).ToArray();
                mesh.normals  = vertList.Select(vertex => transform.PiecewiseMultiply(vertex.Sizes)).ToArray();
                mesh.colors   = vertList.Select(vertex => vertex.Color).ToArray();

                var indices = new List <int>();
                for (var i = 0; i < vertList.Count; i++)
                {
                    indices.Add(i);
                }

                mesh.SetIndices(indices.ToArray(), MeshTopology.Points, 0);

                mesh.UploadMeshData(false);

                var meshFilter = rendererObject.AddComponent <MeshFilter>();
                MeshFilters.Add(meshFilter);
                meshFilter.mesh = mesh;

                var localMaterial = Instantiate(DashMaterial);

                localMaterial.SetVector("_DepthAxis", transform.forward);
                localMaterial.SetVector("_ElevationAxis", transform.up);
                localMaterial.SetVector("_WidthAxis", transform.right);

                var myRenderer = rendererObject.AddComponent <MeshRenderer>();
                Renderers.Add(myRenderer);
                myRenderer.material = localMaterial;
            }

            foreach (Renderer rend in Renderers)
            {
                rend.transform.SetWorldScale(Vector3.one);
            }
        }