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.");	
		}				
	}
Exemplo n.º 2
0
		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;
		}
Exemplo n.º 3
0
    // 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);
        }
    }