Quantcast
Channel: Latest Questions on Unity Answers
Viewing all articles
Browse latest Browse all 171066

Does CombineMeshes concatenate vertices, or concatenate references to vertices?

$
0
0
Hi guys, I am proceduraly building a spherized cube based on a number of edges on a corner. However after all of the building/moving of vertices, my submeshes are flat. I know my function to modify a cube works, however when it is applied to the combined mesh of my generated sides it is invisible. The vertices via the log that they are spherized for World, and the triangle count is correct. Even when I delete the submeshes they appear to be correctly positioned... I am attaching some code. It's pretty sloppy so far, but it seems fairly simple to understand. using UnityEngine; using System.Collections; using System.Collections.Generic; public class Spherizer : MonoBehaviour { public Transform[] CubeSides; public Transform Side; public Transform World; public float radius = 5f; //IDE public float units = 5; //IDE public int smooth = 50; // 0-100 bigger = smoother Vector3 cubeOrigin; List vertices; Transform newSide; List uvs; //public Transform newSide = new Transform(); Mesh mesh; // Use this for initialization void Start () { cubeOrigin = transform.position; //vertices = new Vector3[mesh.vertexCount]; MakeCube(); MakeSphere(); Debug.Log("Loaded"); } // Update is called once per frame void Update () { if (Input.GetKeyDown ("space")) Debug.Log(mesh.vertexCount); } public void MakeCube(){ //instantiate global variables World = GameObject.FindGameObjectWithTag("World").transform; CubeSides = new Transform[6]; vertices = new List(); uvs = new List(); //instantiate local variables List meshFilters = new List(); List sideVertices = new List(); List triangles = new List(); //Create Sides of Cube for (int thisSide = 0; thisSide < CubeSides.Length; thisSide++) { newSide = (Transform)Instantiate(Side,cubeOrigin,Quaternion.identity); newSide.parent = World; newSide.name = ("Side "+(thisSide+1)); //Create Vertices of Side for (int x = 0;x<=units;x++){ for (int z = 0;z<=units;z++){ sideVertices.Add(new Vector3(x-(units/2),units/2,z-(units/2))); } } //Create Triangles for Side for(int i = 0;i<(sideVertices.Count-(units+1));i++){ if ((i+1)%(units+1)!=0) { triangles.Add(i); triangles.Add(i+1); triangles.Add(i+(int)(units+1f)); triangles.Add(i+1); triangles.Add(i+(int)(units+1f)+1); triangles.Add(i+(int)(units+1f)); } } //Create UVs for Side for (int i = 0; i < sideVertices.Count; i++) { uvs.Add (new Vector2(sideVertices[i].x,sideVertices[i].z)); } CubeSides[thisSide] = newSide; //Assign collections to Side newSide.gameObject.GetComponent().sharedMesh = newSide.gameObject.GetComponent().mesh; mesh = newSide.gameObject.GetComponent().sharedMesh; mesh.vertices = sideVertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.uv = uvs.ToArray(); mesh.RecalculateNormals(); meshFilters.Insert(0,newSide.GetComponent()); //Clear variables sideVertices = new List(); triangles = new List(); uvs = new List(); } //Rotate Sides into Position (Is there a more eloquent way to do this?) CubeSides[1].Rotate(new Vector3(270,180,0)); CubeSides[2].Rotate(new Vector3(270,90,0)); CubeSides[3].Rotate(new Vector3(270,0,0)); CubeSides[4].Rotate(new Vector3(270,270,0)); CubeSides[5].Rotate(new Vector3(180,180,0)); //Concatenate Sides into Cube /*foreach(Transform side in CubeSides){ MeshFilter filter = side.gameObject.GetComponent(); for(int i = 0;i().mesh; //mesh.vertices = vertices.ToArray(); CombineInstance[] combine = new CombineInstance[meshFilters.Count]; Debug.Log(meshFilters.Count); for (int h = 0;h < meshFilters.Count;h++) { combine[h].mesh = meshFilters[h].mesh; combine[h].transform = meshFilters[h].transform.localToWorldMatrix; meshFilters[h].gameObject.SetActive(false); } mesh = new Mesh(); mesh.CombineMeshes(combine,true,true); Debug.Log("Loaded Cube"); } public void MakeSphere(){ // done for (int i = 0; i(vertices.Count); for (int i = 0; i < vertices.Count ; i++) { uvs.Add(new Vector2(vertices[i].x, vertices[i].z)); //Debug.Log(vertices[i].x+","+ vertices[i].z); } mesh.uv = uvs.ToArray(); mesh.RecalculateBounds(); mesh.RecalculateNormals(); mesh.Optimize(); World.gameObject.SetActive(true); Debug.Log("uv count "+mesh.uv.Length); Debug.Log("triangle count "+mesh.triangles.Length/3); } }

Viewing all articles
Browse latest Browse all 171066

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>