一、效果图
二、美术资源设定
三、具体实现
//第二参数是所有mesh上组件SkinnedMeshRenderer集合
private GameObject CreatPerson (GameObject root , List<SkinnedMeshRenderer> skinneds) {
List<CombineInstance> combineInstances = new List<CombineInstance> ();
List<Material> materials = new List<Material> ();
List<Transform> bones = new List<Transform> ();
Transform[] transforms = root.GetComponents<Transform> ();
foreach(SkinnedMeshRenderer smr in skinneds) {
materials.AddRange (smr.sharedMaterials);
bones.AddRange(smr.bones);
for(int sub = 0; sub < smr.sharedMesh.subMeshCount; sub++) {
CombineInstance ci = new CombineInstance ();
Mesh mesh1 = new Mesh();
smr.BakeMesh(mesh1);
mesh1.uv = smr.sharedMesh.uv;
ci.mesh = mesh1;
ci.subMeshIndex = sub;
combineInstances.Add (ci);
}
}
SkinnedMeshRenderer r = root.AddComponent<SkinnedMeshRenderer> ();
Mesh mesh = new Mesh ();
mesh.CombineMeshes(combineInstances.ToArray(), false, false);
r.sharedMesh = mesh;
r.bones = bones.ToArray ();
r.materials = materials.ToArray ();
r.rootBone = root.transform;
return root;