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