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 )); }
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); } }