需要先将美术制作好的人物进行分离。
先存储骨骼,再存储身体其他部分。
下面是制作的编辑器工具,自动分离部件然后保存到Resources文件夹下面
private static string dir = Application.dataPath + "/Resources";
[MenuItem("MyDress/Handle Person Resources")]
public static void Execute()
{
//创建存放asset的文件夹.
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
foreach (Object o in Selection.GetFiltered(typeof(GameObject), SelectionMode.Assets))
{
GameObject go = o as GameObject;
if (go.name.Contains("@")) continue;
//复制一个新的.
GameObject newGo = (GameObject)Object.Instantiate(go);
newGo.name = go.name;
GameObject bone = SaveBone(newGo);
//保存部件.
foreach (SkinnedMeshRenderer smr in go.GetComponentsInChildren<SkinnedMeshRenderer>(true))
{
PrefabUtility.CreatePrefab("Assets/Resources/" +go.name+"_"+ smr.name + ".prefab", smr.gameObject);
}
Debug.Log("Handle Person Resources Completed!");
}
}
private static GameObject SaveBone(GameObject go)
{
foreach (SkinnedMeshRenderer smr in go.GetComponentsInChildren<SkinnedMeshRenderer>())
{
Object.DestroyImmediate(smr.gameObject);
}
go.AddComponent<SkinnedMeshRenderer>();
GameObject prefabGo = PrefabUtility.CreatePrefab( "Assets/Resources/"+go.name+"_bone.prefab",go);
Object.DestroyImmediate(go);
return prefabGo;
}