public static void RebuildPrefab(MB3_MeshBakerCommon mom){ if (MB3_MeshCombiner.EVAL_VERSION) return; if (mom is MB3_MeshBaker){ MB3_MeshBaker mb = (MB3_MeshBaker) mom; MB3_MeshCombinerSingle mbs = (MB3_MeshCombinerSingle) mb.meshCombiner; GameObject prefabRoot = mom.resultPrefab; GameObject rootGO = (GameObject) PrefabUtility.InstantiatePrefab(prefabRoot); MB3_MeshCombinerSingle.BuildSceneHierarch(mbs, rootGO, mbs.GetMesh()); string prefabPth = AssetDatabase.GetAssetPath(prefabRoot); PrefabUtility.ReplacePrefab(rootGO,AssetDatabase.LoadAssetAtPath(prefabPth,typeof(GameObject)),ReplacePrefabOptions.ConnectToPrefab); Editor.DestroyImmediate(rootGO); } else if (mom is MB3_MultiMeshBaker){ MB3_MultiMeshBaker mmb = (MB3_MultiMeshBaker) mom; MB3_MultiMeshCombiner mbs = (MB3_MultiMeshCombiner) mmb.meshCombiner; GameObject prefabRoot = mom.resultPrefab; GameObject rootGO = (GameObject) PrefabUtility.InstantiatePrefab(prefabRoot); for (int i = 0; i < mbs.meshCombiners.Count; i++){ MB3_MeshCombinerSingle.BuildSceneHierarch(mbs.meshCombiners[i].combinedMesh, rootGO, mbs.meshCombiners[i].combinedMesh.GetMesh(),true); } string prefabPth = AssetDatabase.GetAssetPath(prefabRoot); PrefabUtility.ReplacePrefab(rootGO,AssetDatabase.LoadAssetAtPath(prefabPth,typeof(GameObject)),ReplacePrefabOptions.ConnectToPrefab); Editor.DestroyImmediate(rootGO); } else { Debug.LogError("Argument was not a MB3_MeshBaker or an MB3_MultiMeshBaker."); } }
static public Mesh BakeOneMesh(MB3_MeshCombinerSingle mom, string newMeshFilePath, GameObject objToBake){ Mesh outMesh = null; if (objToBake == null){ Debug.LogError("An object on the list of objects to combine is 'None'. Use Command-Delete on Mac OS X; Delete or Shift-Delete on Windows to remove this one element."); return null; } MB3_EditorMethods editorMethods = new MB3_EditorMethods(); GameObject[] objs = new GameObject[] {objToBake}; Renderer r = MB_Utility.GetRenderer(objToBake); if (r is SkinnedMeshRenderer){ mom.renderType = MB_RenderType.skinnedMeshRenderer; } else if (r is MeshRenderer) { mom.renderType = MB_RenderType.meshRenderer; } else { Debug.LogError("Unsupported Renderer type on object. Must be SkinnedMesh or MeshFilter."); return null; } if (newMeshFilePath == null && newMeshFilePath.Length != 0){ //todo check directory exists Debug.LogError("File path was not in assets folder."); return null; } if (mom.AddDeleteGameObjects(objs,null,false)){ mom.Apply(); Mesh mf = MB_Utility.GetMesh(objToBake); if (mf != null){ Debug.Log("Creating mesh for " + objToBake.name + " with adjusted UVs at: " + newMeshFilePath); AssetDatabase.CreateAsset(mom.GetMesh(), newMeshFilePath); outMesh = (Mesh) AssetDatabase.LoadAssetAtPath(newMeshFilePath, typeof(Mesh)); } } mom.DestroyMeshEditor(editorMethods); return outMesh; }
// The serialized object reference is necessary to work around a nasty unity bug. public static void RebuildPrefab(MB3_MeshBakerCommon mom, ref SerializedObject so) { if (MB3_MeshCombiner.EVAL_VERSION) { return; } if (mom.meshCombiner.LOG_LEVEL >= MB2_LogLevel.debug) { Debug.Log("Rebuilding Prefab: " + mom.resultPrefab); } GameObject prefabRoot = mom.resultPrefab; GameObject rootGO = (GameObject)PrefabUtility.InstantiatePrefab(prefabRoot); //remove all renderer childeren of rootGO MBVersionEditor.UnpackPrefabInstance(rootGO, ref so); Renderer[] rs = rootGO.GetComponentsInChildren <Renderer>(); for (int i = 0; i < rs.Length; i++) { if (rs[i] != null && rs[i].transform.parent == rootGO.transform) { MB_Utility.Destroy(rs[i].gameObject); } } if (mom is MB3_MeshBaker) { MB3_MeshBaker mb = (MB3_MeshBaker)mom; MB3_MeshCombinerSingle mbs = (MB3_MeshCombinerSingle)mb.meshCombiner; MB3_MeshCombinerSingle.BuildPrefabHierarchy(mbs, rootGO, mbs.GetMesh()); } else if (mom is MB3_MultiMeshBaker) { MB3_MultiMeshBaker mmb = (MB3_MultiMeshBaker)mom; MB3_MultiMeshCombiner mbs = (MB3_MultiMeshCombiner)mmb.meshCombiner; for (int i = 0; i < mbs.meshCombiners.Count; i++) { MB3_MeshCombinerSingle.BuildPrefabHierarchy(mbs.meshCombiners[i].combinedMesh, rootGO, mbs.meshCombiners[i].combinedMesh.GetMesh(), true); } } else { Debug.LogError("Argument was not a MB3_MeshBaker or an MB3_MultiMeshBaker."); } string prefabPth = AssetDatabase.GetAssetPath(prefabRoot); MBVersionEditor.ReplacePrefab(rootGO, prefabPth, MB_ReplacePrefabOption.connectToPrefab); if (mom.meshCombiner.renderType != MB_RenderType.skinnedMeshRenderer) { // For Skinned meshes, leave the prefab instance in the scene so source game objects can moved into the prefab. Editor.DestroyImmediate(rootGO); } }
public static void RebuildPrefab(MB3_MeshBakerCommon mom) { if (MB3_MeshCombiner.EVAL_VERSION) { return; } GameObject prefabRoot = mom.resultPrefab; GameObject rootGO = (GameObject)PrefabUtility.InstantiatePrefab(prefabRoot); //remove all renderer childeren of rootGO Renderer[] rs = rootGO.GetComponentsInChildren <Renderer>(); for (int i = 0; i < rs.Length; i++) { if (rs[i] != null && rs[i].transform.parent == rootGO.transform) { MB_Utility.Destroy(rs[i].gameObject); } } if (mom is MB3_MeshBaker) { MB3_MeshBaker mb = (MB3_MeshBaker)mom; MB3_MeshCombinerSingle mbs = (MB3_MeshCombinerSingle)mb.meshCombiner; MB3_MeshCombinerSingle.BuildPrefabHierarchy(mbs, rootGO, mbs.GetMesh()); } else if (mom is MB3_MultiMeshBaker) { MB3_MultiMeshBaker mmb = (MB3_MultiMeshBaker)mom; MB3_MultiMeshCombiner mbs = (MB3_MultiMeshCombiner)mmb.meshCombiner; for (int i = 0; i < mbs.meshCombiners.Count; i++) { MB3_MeshCombinerSingle.BuildPrefabHierarchy(mbs.meshCombiners[i].combinedMesh, rootGO, mbs.meshCombiners[i].combinedMesh.GetMesh(), true); } } else { Debug.LogError("Argument was not a MB3_MeshBaker or an MB3_MultiMeshBaker."); } string prefabPth = AssetDatabase.GetAssetPath(prefabRoot); PrefabUtility.ReplacePrefab(rootGO, AssetDatabase.LoadAssetAtPath(prefabPth, typeof(GameObject)), ReplacePrefabOptions.ConnectToPrefab); if (mom.meshCombiner.renderType != MB_RenderType.skinnedMeshRenderer) { Editor.DestroyImmediate(rootGO); } }