public static void BakeMeshesInPlace(MB2_MeshCombiner mom, List <UnityEngine.GameObject> objsToMesh, ProgressUpdateDelegate updateProgressBar)
        {
#if UNITY_EDITOR
            Mesh mesh;

//		if (!MB_Utility.doCombinedValidate(mom, MB_ObjsToCombineTypes.prefabOnly)) return;

//		List<UnityEngine.GameObject> objsToMesh = mom.objsToMesh;
//		if (mom.useObjsToMeshFromTexBaker && mom.GetComponent<MB2_TextureBaker>() != null){
//			objsToMesh = mom.GetComponent<MB2_TextureBaker>().objsToMesh;
//		}

            mom.DestroyMesh();

            UnityEngine.GameObject[] objs               = new UnityEngine.GameObject[1];
            List <string>            usedNames          = new List <string>();
            MB_RenderType            originalRenderType = mom.renderType;
            for (int i = 0; i < objsToMesh.Count; i++)
            {
                if (objsToMesh[i] == null)
                {
                    Debug.LogError("The " + i + "th 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;
                }
                objs[0] = objsToMesh[i];
                UnityEngine.Renderer r = MB_Utility.GetRenderer(objsToMesh[i]);
                if (r is SkinnedMeshRenderer)
                {
                    mom.renderType = MB_RenderType.skinnedMeshRenderer;
                }
                else
                {
                    mom.renderType = MB_RenderType.meshRenderer;
                }
                mesh = mom.AddDeleteGameObjects(objs, null, false);
                if (mesh != null)
                {
                    //mom.ApplyAll();
                    mom.Apply();
                    Mesh mf = MB_Utility.GetMesh(objs[0]);
                    if (mf != null)
                    {
                        string baseName, folderPath, newFilename;
                        string pth = AssetDatabase.GetAssetPath(mf);
                        if (pth != null && pth.Length != 0)
                        {
                            baseName   = Path.GetFileNameWithoutExtension(pth) + "_" + objs[0].name + "_MB";
                            folderPath = Path.GetDirectoryName(pth);
                        }
                        else                                           //try to get the name from prefab
                        {
                            pth = AssetDatabase.GetAssetPath(objs[0]); //get prefab name
                            if (pth != null && pth.Length != 0)
                            {
                                baseName   = Path.GetFileNameWithoutExtension(pth) + "_" + objs[0].name + "_MB";
                                folderPath = Path.GetDirectoryName(pth);
                            }
                            else                         //save in root
                            {
                                baseName   = objs[0].name + "mesh_MB";
                                folderPath = "Assets";
                            }
                        }
                        //make name unique
                        newFilename = Path.Combine(folderPath, baseName + ".asset");
                        int j = 0;
                        while (usedNames.Contains(newFilename))
                        {
                            newFilename = Path.Combine(folderPath, baseName + j + ".asset");
                            j++;
                        }
                        usedNames.Add(newFilename);
                        updateProgressBar("Created mesh saving mesh on " + objs[0].name + " to asset " + newFilename, .6f);
                        if (newFilename != null && newFilename.Length != 0)
                        {
                            Debug.Log("Creating mesh for " + objs[0].name + " with adjusted UVs at: " + newFilename);
                            AssetDatabase.CreateAsset(mesh, newFilename);
                        }
                        else
                        {
                            Debug.LogWarning("Could not save mesh for " + objs[0].name);
                        }
                    }
                }
                mom.DestroyMesh();
            }
            mom.renderType = originalRenderType;
#endif
        }
Exemple #2
0
 public override void DestroyMesh()
 {
     _update_MB2_MeshCombiner();
     meshCombiner.DestroyMesh();
 }