/** * 导出预制体 */ public static void ExportPrefabs() { var selectionObjs = Selection.gameObjects; foreach (var selectionObj in selectionObjs) { //防止egret 序列化报错 var saveParent = selectionObj.transform.parent; selectionObj.transform.parent = null; PathHelper.SetOutPutPath(ExportSetting.instance.exportDir, selectionObj.name); ExportPrefab.Export(selectionObj, PathHelper.OutPath); selectionObj.transform.parent = saveParent; } }
/** * 绘制窗口 */ void OnGUI() { this._scrollPosition = GUILayout.BeginScrollView(this._scrollPosition, GUILayout.Width(WIN_WIDTH), GUILayout.Height(WIN_HEIGHT)); GUILayout.Space(SMALL_SPACE); //------------------------路径选择------------------------ { GUILayout.BeginHorizontal(); GUILayout.Label("根目录"); var dir = GUILayout.TextField(ExportSetting.instance.rootName); if (dir != ExportSetting.instance.rootName) { ExportSetting.instance.rootName = dir; } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(); GUILayout.TextField(ExportSetting.instance.exportDir); if (GUILayout.Button("导出路径", GUILayout.Width(100))) { ExportSetting.instance.exportDir = EditorUtility.OpenFolderPanel("当前要导出的路径", Application.dataPath, ""); } GUILayout.EndHorizontal(); } GUILayout.Space(SPACE); //------------------------辅助选项------------------------ { GUILayout.BeginHorizontal(); var common = ExportSetting.instance.common; common.debugLog = GUILayout.Toggle(common.debugLog, new GUIContent("输出日志", "勾选后,方便查看输出信息")); common.jsonFormatting = GUILayout.Toggle(common.jsonFormatting, new GUIContent("Json格式化", "勾选后,格式化导出的Json文件")); common.posToZero = GUILayout.Toggle(common.posToZero, new GUIContent("坐标归零", "勾选后,将导出的预制体坐标归零")); GUILayout.EndHorizontal(); } GUILayout.Space(SMALL_SPACE); { this._lightSetting = EditorGUILayout.Foldout(this._lightSetting, "光照设置"); if (this._lightSetting) { GUILayout.BeginVertical(); var lightSetting = ExportSetting.instance.light; lightSetting.type = (ExportLightType)EditorGUILayout.EnumPopup(lightSetting.type, GUILayout.MaxWidth(100)); GUILayout.EndVertical(); } } GUILayout.Space(SMALL_SPACE); { this._sceneSetting = EditorGUILayout.Foldout(this._sceneSetting, "场景设置"); if (this._sceneSetting) { GUILayout.BeginHorizontal(); var sceneSetting = ExportSetting.instance.scene; sceneSetting.lightmap = GUILayout.Toggle(sceneSetting.lightmap, new GUIContent("光照贴图", "勾选后,如果场景有光照贴图,就会导出光照贴图")); sceneSetting.staticBatching = GUILayout.Toggle(sceneSetting.staticBatching, new GUIContent("静态合并", "勾选后,场景加载完毕后会尝试静态合并。")); sceneSetting.fog = GUILayout.Toggle(sceneSetting.fog, new GUIContent("雾", "勾选后,如果场景开启了雾,则会导出对应的参数。")); GUILayout.EndHorizontal(); } } GUILayout.Space(SMALL_SPACE); { this._textureSetting = EditorGUILayout.Foldout(this._textureSetting, "图片设置"); if (this._textureSetting) { GUILayout.BeginVertical(); var textureSetting = ExportSetting.instance.texture; textureSetting.useOriginalTexture = GUILayout.Toggle(textureSetting.useOriginalTexture, new GUIContent("导出原始图片", "勾选后,jpg和png会直接使用原始图片导出")); textureSetting.useNormalTexture = GUILayout.Toggle(textureSetting.useNormalTexture, new GUIContent("使用Unity法线贴图", "勾选后,使用Unity转换后的法线贴图导出")); GUILayout.BeginHorizontal(); GUILayout.Label("JPG导出质量:"); textureSetting.jpgQuality = (int)GUILayout.HorizontalSlider(textureSetting.jpgQuality, 0.0f, 100.0f, GUILayout.Width(250)); GUILayout.Label(textureSetting.jpgQuality.ToString()); GUILayout.EndHorizontal(); GUILayout.EndVertical(); } } GUILayout.Space(SMALL_SPACE); { this._meshSetting = EditorGUILayout.Foldout(this._meshSetting, "网格设置"); if (this._meshSetting) { GUILayout.BeginHorizontal(); var meshSetting = ExportSetting.instance.mesh; meshSetting.uv2 = GUILayout.Toggle(meshSetting.uv2, new GUIContent("UV2", "取消后,不导出UV2")); meshSetting.normal = GUILayout.Toggle(meshSetting.normal, new GUIContent("Normals", "取消后,不导出Normals")); meshSetting.color = GUILayout.Toggle(meshSetting.color, new GUIContent("Colors", "取消后,不导出Colors")); meshSetting.bone = GUILayout.Toggle(meshSetting.bone, new GUIContent("Bones", "取消后,不导出Bones")); meshSetting.tangent = GUILayout.Toggle(meshSetting.tangent, new GUIContent("Tangents", "取消后,不导出Tangents")); GUILayout.EndHorizontal(); } } GUILayout.Space(SPACE); //------------------------主功能------------------------ { //资源导出 _resourceToolOpen = GUILayout.Toggle(_resourceToolOpen, "--------资源导出工具--------"); if (_resourceToolOpen) { GUILayout.Space(SPACE); GUILayout.BeginHorizontal(); if (Selection.activeGameObject) { if (GUILayout.Button("预制体导出")) { _frameCount = 0; _isBuzy = true; _info = "导出中..."; _curExportType = ExportType.PREFAB; } } else { GUILayout.Label("请选中场景中要导出的对象"); } GUILayout.EndHorizontal(); GUILayout.Space(SPACE); } //场景导出 _sceneToolOpen = GUILayout.Toggle(_sceneToolOpen, "--------场景导出工具--------"); if (_sceneToolOpen) { GUILayout.Space(SPACE); GUILayout.BeginHorizontal(); if (GUILayout.Button("场景导出")) { PathHelper.SetOutPutPath(ExportSetting.instance.exportDir, PathHelper.CurSceneName); _frameCount = 0; _info = "导出中..."; _isBuzy = true; _curExportType = ExportType.SCENE; } GUILayout.EndHorizontal(); GUILayout.Space(SPACE); } } GUILayout.EndScrollView(); GUI.Label(new Rect(0, WIN_HEIGHT - 15, WIN_WIDTH, 15), "状态:" + _info); if (GUI.Button(new Rect(WIN_WIDTH - 65, WIN_HEIGHT - 20, 60, 20), "保存配置")) { ExportSetting.instance.Save(PathHelper.ConfigPath); AssetDatabase.Refresh(); } }
/** * 绘制窗口 */ void OnGUI() { var setting = ExportToolsSetting.instance; this._scrollPosition = GUILayout.BeginScrollView(this._scrollPosition, GUILayout.Width(WIN_WIDTH), GUILayout.Height(400)); GUILayout.Space(SMALL_SPACE); //------------------------目录选择------------------------ { GUILayout.Label("当前导出路径"); GUILayout.BeginHorizontal(); GUILayout.TextField(ExportConfig.instance.exportPath); if (GUILayout.Button("选择目录", GUILayout.Width(100))) { ExportConfig.instance.exportPath = EditorUtility.OpenFolderPanel("当前要导出的路径", Application.dataPath, ""); ExportConfig.instance.Save(PathHelper.ConfigPath); AssetDatabase.Refresh(); } GUILayout.EndHorizontal(); } GUILayout.Space(SPACE); //------------------------辅助选项------------------------ { GUILayout.BeginHorizontal(); setting.debugLog = GUILayout.Toggle(setting.debugLog, new GUIContent("输出日志", "勾选后,方便查看输出信息")); setting.prefabResetPos = GUILayout.Toggle(setting.prefabResetPos, new GUIContent("坐标归零", "勾选后,将导出的预制体坐标归零")); setting.exportOriginalImage = GUILayout.Toggle(setting.exportOriginalImage, new GUIContent("导出原始图片", "勾选后,jpg和png会直接使用原始图片导出")); // ExportToolsSetting.unityNormalTexture = GUILayout.Toggle(ExportToolsSetting.unityNormalTexture, new GUIContent("使用Unity法线贴图", "勾选后,时使用Unity转换后的法线贴图导出")); GUILayout.EndHorizontal(); } GUILayout.Space(SPACE); this._lightSetting = EditorGUILayout.Foldout(this._lightSetting, "光照设置"); if (this._lightSetting) { GUILayout.BeginVertical(); setting.lightType = (ExportLightType)EditorGUILayout.EnumPopup(setting.lightType, GUILayout.MaxWidth(100)); GUILayout.EndVertical(); } GUILayout.Space(SMALL_SPACE); this._meshSetting = EditorGUILayout.Foldout(this._meshSetting, "网格设置"); if (this._meshSetting) { GUILayout.BeginHorizontal(); setting.enableNormals = GUILayout.Toggle(setting.enableNormals, new GUIContent("Normals", "取消后,不导出Normals")); setting.enableColors = GUILayout.Toggle(setting.enableColors, new GUIContent("Colors", "取消后,不导出Colors")); setting.enableBones = GUILayout.Toggle(setting.enableBones, new GUIContent("Bones", "取消后,不导出Bones")); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); this._serializeObject.Update(); if (this._meshIgnoresProperty != null) { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(this._meshIgnoresProperty, new GUIContent("忽略对象:", "在忽略列表中的对象网格属性全部导出"), true); if (EditorGUI.EndChangeCheck()) { _serializeObject.ApplyModifiedProperties(); } } GUILayout.EndHorizontal(); } GUILayout.Space(SPACE); //------------------------主功能------------------------ { //资源导出 _resourceToolOpen = GUILayout.Toggle(_resourceToolOpen, "--------资源导出工具--------"); if (_resourceToolOpen) { GUILayout.Space(SPACE); GUILayout.BeginHorizontal(); if (Selection.activeGameObject) { if (GUILayout.Button("导出当前选中对象")) { _frameCount = 0; _isBuzy = true; _info = "导出中..."; _curExportType = ExportType.PREFAB; } } else { GUILayout.Label("请选中场景中要导出的对象", _showStyle); } GUILayout.EndHorizontal(); GUILayout.Space(SPACE); } //场景导出 _sceneToolOpen = GUILayout.Toggle(_sceneToolOpen, "--------场景导出工具--------"); if (_sceneToolOpen) { GUILayout.Space(SPACE); GUILayout.BeginHorizontal(); if (GUILayout.Button("导出当前场景")) { PathHelper.SetOutPutPath(ExportConfig.instance.exportPath, PathHelper.CurSceneName); _frameCount = 0; _info = "导出中..."; _isBuzy = true; _curExportType = ExportType.SCENE; } GUILayout.EndHorizontal(); GUILayout.Space(SPACE); } } GUILayout.EndScrollView(); GUI.Label(new Rect(0, WIN_HEIGHT - 15, WIN_WIDTH, 15), "状态:" + _info); }