123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
- using System.IO;
- using System.Text.RegularExpressions;
- public class ExportTool : EditorWindow
- {
- //"ExpFbx"
- const string ExpFolderName = "/Res/Mesh";
- const string MaterialPath = "Assets/Res/Materials/";
- const string MeshPath = "Assets/Res/Mesh/";
- static List<string> fileList;
- [MenuItem("Model/导出Fbx")]
- public static void ExportUnique()
- {
- Transform[] selectedObjs = Selection.transforms;
- GetFileList();
- foreach (Transform trans in selectedObjs)
- {
- ExportFbx(trans);
- }
- }
- public static void GetFileList()
- {
- fileList = new List<string>();
- var path = Application.dataPath + ExpFolderName;
- if (!Directory.Exists(path))
- {
- Directory.CreateDirectory(path);
- }
- var fileArr = Directory.GetFiles(path, "*.fbx");
- foreach (var fpath in fileArr)
- {
- var name = Path.GetFileNameWithoutExtension(fpath);
- fileList.Add(name);
- }
- }
- public static string ParseName(string name)
- {
- return Regex.Replace(name, @"([\s\S]+)\s\(?\d+\)?", "$1").Trim();
- }
- public static void ExportFbx(Transform trans)
- {
- //FBXExporter导不出SkinnedMeshRenderer
- if (trans.GetComponent<MeshFilter>())
- {
- var mesh = trans.GetComponent<MeshFilter>();
- var name = mesh.sharedMesh.name;
- name = ParseName(name);
- if (!fileList.Contains(name))
- {
- fileList.Add(name);
- FBXExporter.ExportFBX(ExpFolderName, name, new GameObject[] { trans.gameObject }, true);
- }
- }
- for (int i = 0; i < trans.childCount; i++)
- {
- ExportFbx(trans.GetChild(i));
- }
- }
- [MenuItem("Model/创建Obj")]
- public static void CreateObj()
- {
- Transform[] selectedObjs = Selection.transforms;
- foreach (Transform trans in selectedObjs)
- {
- CreateObject(null, trans);
- }
- }
- static void CreateObject(Transform parent, Transform target)
- {
- GameObject obj = null;
- obj = new GameObject();
- if (target.GetComponent<MeshFilter>() && target.GetComponent<MeshRenderer>())
- {
- var targMesh = target.GetComponent<MeshFilter>();
- var targMat = target.GetComponent<MeshRenderer>().sharedMaterial;
- var targMeshName = ParseName(targMesh.sharedMesh.name);
- var targMatName = targMat.name;
- var mesh = AssetDatabase.LoadAssetAtPath(MeshPath + targMeshName + ".fbx", typeof(Mesh)) as Mesh;
- if (targMeshName != mesh.name)
- {
- Debug.Log("Warning!!!" + targMeshName + "!=" + mesh.name);
- }
- if (mesh != null)
- {
- var meshFilter = obj.AddComponent<MeshFilter>();
- meshFilter.sharedMesh = mesh;
- }
- else
- {
- Debug.Log("LoseMesh[" + targMeshName + "]");
- }
- var mat = AssetDatabase.LoadAssetAtPath(MaterialPath + targMatName + ".mat", typeof(Material)) as Material;
- if (mat != null)
- {
- var meshRender = obj.AddComponent<MeshRenderer>();
- meshRender.sharedMaterial = mat;
- }
- else
- {
- Debug.Log("LoseMaterial[" + targMatName + "]");
- }
- }
- else if (target.GetComponent<SkinnedMeshRenderer>())
- {
- Debug.Log("LoseSkinnedMeshRenderer[" + target.name + "]");
- }
- var objName = ParseName(target.gameObject.name);
- obj.name = objName;
- obj.transform.parent = parent;
- obj.transform.position = target.position;
- obj.transform.rotation = target.rotation;
- obj.transform.localScale = target.localScale;
- for (int i = 0; i < target.childCount; i++)
- {
- CreateObject(obj.transform, target.GetChild(i));
- }
- }
- }
|