public override ActionResult DoAction() { if (MeshSelection.selectedObjectCount < 2) { return(new ActionResult(ActionResult.Status.Canceled, "Must Select 2+ Objects")); } var selected = MeshSelection.top.ToArray(); List <ProBuilderMesh> res = InternalMeshUtility.CombineObjects(MeshSelection.topInternal); if (res != null) { foreach (var mesh in res) { mesh.Optimize(); mesh.gameObject.name = "pb-MergedObject" + mesh.id; UndoUtility.RegisterCreatedObjectUndo(mesh.gameObject, "Merge Objects"); Selection.objects = res.Select(x => x.gameObject).ToArray(); } // Delete donor objects for (int i = 0; i < selected.Length; i++) { if (selected[i] != null) { UndoUtility.DestroyImmediate(selected[i].gameObject); } } } ProBuilderEditor.Refresh(); return(new ActionResult(ActionResult.Status.Success, "Merged Objects")); }
public override ActionResult DoAction() { if (MeshSelection.selectedObjectCount < 2) { return(new ActionResult(ActionResult.Status.Canceled, "Must Select 2+ Objects")); } var selected = MeshSelection.top.ToArray(); ProBuilderMesh currentMesh = MeshSelection.activeMesh; UndoUtility.RecordObject(currentMesh, "Merge Objects"); List <ProBuilderMesh> res = CombineMeshes.Combine(MeshSelection.topInternal, currentMesh); if (res != null) { foreach (var mesh in res) { mesh.Optimize(); if (mesh != currentMesh) { mesh.gameObject.name = Selection.activeGameObject.name + "-Merged"; UndoUtility.RegisterCreatedObjectUndo(mesh.gameObject, "Merge Objects"); Selection.objects = res.Select(x => x.gameObject).ToArray(); } } // Delete donor objects if they are not part of the result for (int i = 0; i < selected.Length; i++) { if (selected[i] != null && res.Contains(selected[i]) == false) { UndoUtility.DestroyImmediate(selected[i].gameObject); } } } ProBuilderEditor.Refresh(); return(new ActionResult(ActionResult.Status.Success, "Merged Objects")); }