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;
}
先存储骨骼,再存储身体其他部分。
下面是制作的编辑器工具,自动分离部件然后保存到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;
}
相关文章推荐
- Unity换装之合并网格
- Unity3D换装详解
- 联想Thinkpad x100e 换装xp要点
- 51cto博客模板升级了,期待博友们换装!!!
- cocos2dx-lua的spine局部换装之进阶篇
- cocos2dx-lua的spine局部换装
- 基于Spine3.3的换装(纸娃娃,avatar)功能
- Cocos2d-x 3.x 图形学渲染系列十一
- [Mesh]角色换装与表情动画
- Unity3D手游开发日记(11) - 基于共享骨骼简单高效的换装方案
- 【Unity3d基础】Unity换装系统(1)
- 暗黑战神换装系统的实现
- Unity笔记 2D Best Practices (2D IK 骨骼动画 event 换装 蒙皮 排序)
- Unity3D角色换装实现原理及步骤
- unity中 拖拽任意的对象
- Unity模拟考题之Unity Certified Professional(专业能力认证)
- Unity模拟考题之Unity Certified User(应用能力认证)
- 【Unity 3D 性能优化 之 一】ParticleSyetem 的alive
- Unity3d_Unity3d"Library\UnityAssemblies\UnityEngine.xml"is denied错误解决方法