public override void OnInspectorGUI()
    {
        MVVoxModelMesh m = this.target as MVVoxModelMesh;

        if (m.voxels != null && m.voxels.Length > 1)
        {
            if (GUILayout.Button("Convert to Voxels"))
            {
                CreateVoxels(m.voxels, m.parentVoxModel);

                GameObject.DestroyImmediate(m.gameObject);
            }
        }
    }
示例#2
0
    public static void CombineVoxels(MVVoxModelVoxel[] voxels)
    {
        if (voxels != null && voxels.Length > 0)
        {
            MVVoxelChunk chunk     = new MVVoxelChunk();
            MVVoxModel   model     = voxels [0].parentVoxModel;
            MVVoxelChunk origChunk = model.vox.voxelChunk;

            chunk.voxels = new byte[origChunk.sizeX, origChunk.sizeY, origChunk.sizeZ];
            foreach (MVVoxModelVoxel v in voxels)
            {
                chunk.voxels [v.voxel.x, v.voxel.y, v.voxel.z] = v.voxel.colorIndex;
            }

            MVImporter.GenerateFaces(chunk);
            Mesh[] meshes = MVImporter.CreateMeshesFromChunk(chunk, model.vox.palatte, model.sizePerVox);

            if (meshes.Length > 1)
            {
                Debug.LogError("[MVCombine] Currently does not support combining voxels into multiple meshes, please reduce the number of voxels you are trying to combine");
                return;
            }

            Material mat = (model.voxMaterial != null) ? model.voxMaterial : MVImporter.DefaultMaterial;

            int index = 0;
            foreach (Mesh mesh in meshes)
            {
                GameObject go = MVImporter.CreateGameObject(model.gameObject.transform, Vector3.zero, string.Format("VoxMesh ({0})", index), mesh, mat);

                MVVoxModelMesh voxMesh = go.AddComponent <MVVoxModelMesh> ();
                voxMesh.voxels = voxels.Select(o => o.voxel).ToArray();

                Selection.activeGameObject = go;

                index++;
            }

            foreach (MVVoxModelVoxel v in voxels)
            {
                GameObject.DestroyImmediate(v.gameObject);
            }
        }
        else
        {
            Debug.LogError("[MVCombine] Invalid voxels");
        }
    }