using System.IO;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class GenerateMeshAsset
{
private static string prefabDirectory = "Prefabs";
private static string prefabExtension = ".prefab";
[MenuItem("YTools/GenerateMeshAsset")]
public static void GenerateMesh()
{
if (Selection.activeGameObject != null)
{
SkinnedMeshRenderer[] mfs = Selection.activeGameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
if (mfs.Length != 0)
{
for (int i = 0, count = mfs.Length; i < count; i++)
{
Mesh mesh = mfs[i].sharedMesh;
if (mesh == null)
{
return;
}
Mesh tempMesh = GameObject.Instantiate(mesh) as Mesh;
if (!Directory.Exists(Application.dataPath + "/Resources"))
{
Directory.CreateDirectory(Application.dataPath + "/Resources");
}
string meshName = mesh.name;
string path = string.Format("Assets/Resources/{0}.asset", meshName);
path = AssetDatabase.GenerateUniqueAssetPath(path);
AssetDatabase.CreateAsset(tempMesh, path);
AssetDatabase.SaveAssets();
}
EditorUtility.DisplayDialog("CopyMesh", "拷贝mesh成功!", "OK");
}
}
}
[MenuItem("YTools/GenerateBaseModel")]
public static void GenerateBaseModel()
{
GameObject selectedGameObject = Selection.activeGameObject;
string selectedAssetPath = AssetDatabase.GetAssetPath(selectedGameObject);
if (string.IsNullOrEmpty(selectedAssetPath))
{
return;
}
string modelAssetPath = string.Concat(Application.dataPath, "/Resources/", prefabDirectory);
string modelParentPath = string.Concat("Assets/Resources","/",prefabDirectory);
string temp = modelAssetPath.Replace("/", @"\");
if (!Directory.Exists(temp))
{
AssetDatabase.CreateFolder("Assets/Resources", prefabDirectory);
}
GameObject cloneObj = GameObject.Instantiate(selectedGameObject) as GameObject;
SkinnedMeshRenderer[] mfs = cloneObj.GetComponentsInChildren<SkinnedMeshRenderer>();
for (int i = 0, count = mfs.Length; i < count; i++)
{
UnityEngine.Object.DestroyImmediate(mfs[i].gameObject);
}
cloneObj.name = cloneObj.name.Replace("(Clone)", string.Empty);
string genPrefabFullName = string.Concat(modelParentPath, "/", cloneObj.name, prefabExtension);
Object prefabObj = PrefabUtility.CreateEmptyPrefab(genPrefabFullName);
GameObject prefab = PrefabUtility.ReplacePrefab(cloneObj, prefabObj);
GameObject.DestroyImmediate(cloneObj);
}
}
自动分离FBX中SkinnedMeshRenderer并生成prefab
最新推荐文章于 2023-06-05 23:39:46 发布