您的位置:首页 > 移动开发 > Unity3D

Unity换装之分离元素

2015-08-24 08:46 411 查看
需要先将美术制作好的人物进行分离。

先存储骨骼,再存储身体其他部分。

下面是制作的编辑器工具,自动分离部件然后保存到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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  换装