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*.mesh = CreateMesh();*

combines_.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;
}

1 Answer

1

If you attach this mesh to a renderer and view it in the inspector, what does the preview look like?