- Home /
CombineMeshes result invisible.
I am fairly new to Unity, and testing CombineMeshes. In my previous projects in other engines, I made a similar system of my own, which was critical to most of the games I made!
I can create a single mesh via the CreateMesh, plug it straight into the filter's mesh property, and it works great. But if I use CombineMeshes, nothing is visible. Stranger yet, if I print the index buffer (triangles in Unity) or vertex buffer, everything looks dandy. What am I missing?
Entire sample below!
private GameObject test;
// Use this for initialization
void Start ()
{
test = new GameObject();
MeshFilter filter = test.AddComponent<MeshFilter>();
Renderer renderer = test.AddComponent<MeshRenderer>();
renderer.material.color = Color.white;
int count = 1;
CombineInstance[] combines = new CombineInstance[count];
for (int i = 0; i < count; ++i)
{
combines[i].mesh = CreateMesh();
combines[i].transform = Matrix4x4.identity; //Matrix4x4.TRS(Vector3.up * i, Quaternion.identity, Vector3.one);
}
filter.mesh = new Mesh(); //CreateMesh();
filter.mesh.CombineMeshes(combines);
Debug.Log(filter.mesh.triangles.Length);
Debug.Log(filter.mesh.vertices);
}
// Update is called once per frame
void Update ()
{
test.transform.Rotate(gameObject.transform.rotation.eulerAngles + new Vector3(0f, 1f, 0f));
}
private Mesh CreateMesh()
{
Vector3[] vertices = new Vector3[4];
Vector3[] normals = new Vector3[4];
Vector2[] uvs = new Vector2[4];
Vector4[] tangents = new Vector4[4];
vertices[0] = new Vector3(-0.5f, -0.5f, 0.5f);
normals[0] = Vector3.forward;
vertices[1] = new Vector3(0.5f, -0.5f, 0.5f);
normals[1] = Vector3.forward;
vertices[2] = new Vector3(-0.5f, 0.5f, 0.5f);
normals[2] = Vector3.forward;
vertices[3] = new Vector3(0.5f, 0.5f, 0.5f);
normals[3] = Vector3.forward;
int[] indices = new int[6];
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
indices[3] = 2;
indices[4] = 1;
indices[5] = 3;
BuildTangentSpaceDataForTriangleList(indices, vertices, uvs, tangents);
Mesh mesh = new Mesh();
mesh.Clear();
mesh.vertices = vertices;
mesh.uv = uvs;
mesh.triangles = indices;
mesh.normals = normals;
mesh.tangents = tangents;
return mesh;
}
I've found that by optimizing the mesh via $$anonymous$$esh.Optimize after combining meshes fixes it. But why? The sample doesn't need that.
Answer by landogimps · Jan 10, 2012 at 10:14 PM
If you attach this mesh to a renderer and view it in the inspector, what does the preview look like?
Your answer
Follow this Question
Related Questions
Combine meshes? 1 Answer
Merging meshes 0 Answers
Gather all the Meshes into 1 1 Answer
Mesh filters missing their meshes when project cloned from bitbucket 2 Answers