public void DrawGUI(MB2_MeshBakerCommon target, System.Type editorWindowType) { if (meshBaker == null) { _init(target); } meshBaker.Update(); showInstructions = EditorGUILayout.Foldout(showInstructions, "Instructions:"); if (showInstructions) { EditorGUILayout.HelpBox("1. Bake combined material(s).\n\n" + "2. If necessary set the 'Material Bake Results' field.\n\n" + "3. Add scene objects or prefabs to combine or check 'Same As Texture Baker'. For best results these should use the same shader as result material.\n\n" + "4. Select options and 'Bake'.\n\n" + "6. Look at warnings/errors in console. Decide if action needs to be taken.\n\n" + "7. (optional) Disable renderers in source objects.", UnityEditor.MessageType.None); EditorGUILayout.Separator(); } MB2_MeshBakerCommon mom = (MB2_MeshBakerCommon)target; EditorGUILayout.PropertyField(textureBakeResults, textureBakeResultsGUIContent); if (textureBakeResults.objectReferenceValue != null) { showContainsReport = EditorGUILayout.Foldout(showContainsReport, "Shaders & Materials Contained"); if (showContainsReport) { EditorGUILayout.HelpBox(((MB2_TextureBakeResults)textureBakeResults.objectReferenceValue).GetDescription(), MessageType.Info); } } EditorGUILayout.LabelField("Objects To Be Combined", EditorStyles.boldLabel); if (mom.GetComponent <MB2_TextureBaker>() != null) { EditorGUILayout.PropertyField(useObjsToMeshFromTexBaker, useTextureBakerObjsGUIContent); } else { useObjsToMeshFromTexBaker.boolValue = false; } if (!mom.useObjsToMeshFromTexBaker) { if (GUILayout.Button(openToolsWindowLabelContent)) { MB2_MeshBakerEditorWindowInterface mmWin = (MB2_MeshBakerEditorWindowInterface)EditorWindow.GetWindow(editorWindowType); mmWin.target = (MB2_MeshBakerRoot)target; } EditorGUILayout.PropertyField(objsToMesh, objectsToCombineGUIContent, true); } EditorGUILayout.LabelField("Output", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(doNorm, doNormGUIContent); EditorGUILayout.PropertyField(doTan, doTanGUIContent); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(doUV, doUVGUIContent); EditorGUILayout.PropertyField(doUV1, doUV1GUIContent); EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(doCol, doColGUIContent); if (mom.lightmapOption == MB2_LightmapOptions.generate_new_UV2_layout) { EditorGUILayout.HelpBox("Generating new lightmap UVs can split vertices which can push the number of vertices over the 64k limit.", MessageType.Warning); } EditorGUILayout.PropertyField(lightmappingOption, lightmappingOptionGUIContent); EditorGUILayout.PropertyField(outputOptions, outputOptoinsGUIContent); EditorGUILayout.PropertyField(renderType, renderTypeGUIContent); if (mom.outputOption == MB2_OutputOptions.bakeIntoSceneObject) { mom.resultSceneObject = (GameObject)EditorGUILayout.ObjectField("Combined Mesh Object", mom.resultSceneObject, typeof(GameObject), true); } else if (mom.outputOption == MB2_OutputOptions.bakeIntoPrefab) { mom.resultPrefab = (GameObject)EditorGUILayout.ObjectField("Combined Mesh Prefab", mom.resultPrefab, typeof(GameObject), true); } else if (mom.outputOption == MB2_OutputOptions.bakeMeshAssetsInPlace) { if (GUILayout.Button("Choose Folder For Bake In Place Meshes")) { string newFolder = EditorUtility.SaveFolderPanel("Folder For Bake In Place Meshes", Application.dataPath, ""); if (!newFolder.Contains(Application.dataPath)) { Debug.LogWarning("The chosen folder must be in your assets folder."); } mom.bakeAssetsInPlaceFolderPath = "Assets" + newFolder.Replace(Application.dataPath, ""); } EditorGUILayout.LabelField("Folder For Meshes: " + mom.bakeAssetsInPlaceFolderPath); } if (GUILayout.Button("Bake")) { bake(mom); } string enableRenderersLabel; bool disableRendererInSource = false; if (mom.objsToMesh.Count > 0) { Renderer r = MB_Utility.GetRenderer(mom.objsToMesh[0]); if (r != null && r.enabled) { disableRendererInSource = true; } } if (disableRendererInSource) { enableRenderersLabel = "Disable Renderers On Source Objects"; } else { enableRenderersLabel = "Enable Renderers On Source Objects"; } if (GUILayout.Button(enableRenderersLabel)) { mom.EnableDisableSourceObjectRenderers(!disableRendererInSource); } meshBaker.ApplyModifiedProperties(); meshBaker.SetIsDifferentCacheDirty(); }
public void DrawGUI(MB2_TextureBaker mom, System.Type editorWindow) { if (textureBaker == null) { _init(mom); } textureBaker.Update(); showInstructions = EditorGUILayout.Foldout(showInstructions, "Instructions:"); if (showInstructions) { EditorGUILayout.HelpBox("1. Add scene objects or prefabs to combine. For best results these should use the same shader as result material.\n\n" + "2. Create Empty Assets For Combined Material(s)\n\n" + "3. Check that shader on result material(s) are correct.\n\n" + "4. Bake materials into combined material(s).\n\n" + "5. Look at warnings/errors in console. Decide if action needs to be taken.\n\n" + "6. You are now ready to build combined meshs or adjust meshes to use the combined material(s).", UnityEditor.MessageType.None); } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Objects To Be Combined", EditorStyles.boldLabel); if (GUILayout.Button(openToolsWindowLabelContent)) { MB2_MeshBakerEditorWindowInterface mmWin = (MB2_MeshBakerEditorWindowInterface)EditorWindow.GetWindow(editorWindow); mmWin.target = (MB2_MeshBakerRoot)mom; } EditorGUILayout.PropertyField(objsToMesh, objectsToCombineGUIContent, true); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Output", EditorStyles.boldLabel); if (GUILayout.Button(createPrefabAndMaterialLabelContent)) { string newPrefabPath = EditorUtility.SaveFilePanelInProject("Asset name", "", "asset", "Enter a name for the baked texture results"); if (newPrefabPath != null) { CreateCombinedMaterialAssets(mom, newPrefabPath); } } EditorGUILayout.PropertyField(textureBakeResults, textureBakeResultsGUIContent); if (textureBakeResults.objectReferenceValue != null) { showContainsReport = EditorGUILayout.Foldout(showContainsReport, "Shaders & Materials Contained"); if (showContainsReport) { EditorGUILayout.HelpBox(((MB2_TextureBakeResults)textureBakeResults.objectReferenceValue).GetDescription(), MessageType.Info); } } EditorGUILayout.PropertyField(doMultiMaterial, new GUIContent("Multiple Combined Materials")); if (mom.doMultiMaterial) { EditorGUILayout.LabelField("Source Material To Combined Mapping", EditorStyles.boldLabel); if (GUILayout.Button(configMultiMatFromObjsContent)) { ConfigureMutiMaterialsFromObjsToCombine(mom); } EditorGUILayout.BeginHorizontal(); resultMaterialsFoldout = EditorGUILayout.Foldout(resultMaterialsFoldout, combinedMaterialsGUIContent); if (GUILayout.Button(insertContent, EditorStyles.miniButtonLeft, buttonWidth)) { if (resultMaterials.arraySize == 0) { mom.resultMaterials = new MB_MultiMaterial[1]; } else { resultMaterials.InsertArrayElementAtIndex(resultMaterials.arraySize - 1); } } if (GUILayout.Button(deleteContent, EditorStyles.miniButtonRight, buttonWidth)) { resultMaterials.DeleteArrayElementAtIndex(resultMaterials.arraySize - 1); } EditorGUILayout.EndHorizontal(); if (resultMaterialsFoldout) { for (int i = 0; i < resultMaterials.arraySize; i++) { EditorGUILayout.Separator(); string s = ""; if (i < mom.resultMaterials.Length && mom.resultMaterials[i] != null && mom.resultMaterials[i].combinedMaterial != null) { s = mom.resultMaterials[i].combinedMaterial.shader.ToString(); } EditorGUILayout.LabelField("---------- submesh:" + i + " " + s, EditorStyles.boldLabel); EditorGUILayout.Separator(); SerializedProperty resMat = resultMaterials.GetArrayElementAtIndex(i); EditorGUILayout.PropertyField(resMat.FindPropertyRelative("combinedMaterial")); SerializedProperty sourceMats = resMat.FindPropertyRelative("sourceMaterials"); EditorGUILayout.PropertyField(sourceMats, true); } } } else { EditorGUILayout.PropertyField(resultMaterial, new GUIContent("Combined Mesh Material")); } EditorGUILayout.Separator(); EditorGUILayout.LabelField("Material Bake Options", EditorStyles.boldLabel); EditorGUILayout.PropertyField(atlasPadding, new GUIContent("Atlas Padding")); EditorGUILayout.PropertyField(resizePowerOfTwoTextures, resizePowerOfTwoGUIContent); EditorGUILayout.PropertyField(customShaderPropNames, customShaderPropertyNamesGUIContent, true); EditorGUILayout.PropertyField(maxTilingBakeSize, maxTilingBakeSizeGUIContent); EditorGUILayout.PropertyField(fixOutOfBoundsUVs, fixOutOfBoundsGUIContent); if (texturePackingAlgorithm.intValue == (int)MB2_PackingAlgorithmEnum.UnitysPackTextures) { EditorGUILayout.HelpBox("Unity's texture packer has memory problems and frequently crashes the editor.", MessageType.Warning); } EditorGUILayout.PropertyField(texturePackingAlgorithm, texturePackingAgorithmGUIContent); EditorGUILayout.Separator(); if (GUILayout.Button("Bake Materials Into Combined Material")) { mom.CreateAtlases(updateProgressBar, true, new MB2_EditorMethods()); EditorUtility.ClearProgressBar(); if (mom.textureBakeResults != null) { EditorUtility.SetDirty(mom.textureBakeResults); } } textureBaker.ApplyModifiedProperties(); textureBaker.SetIsDifferentCacheDirty(); }