Пример #1
0
        public GameObject Generate(GameObject root)
        {
            float startTime = Time.realtimeSinceStartup;

            List <CombineInstance> combineInstances = new List <CombineInstance>();
            List <Material>        materials        = new List <Material>();
            List <Transform>       bones            = new List <Transform>();

            Transform[] transforms = root.GetComponentsInChildren <Transform>();

            foreach (KeyValuePair <string, CharacterElement> kvp in curConfiguration)
            {
                CharacterElement    element = kvp.Value;
                SkinnedMeshRenderer smr     = element.GetSkinnedMeshRenderer();
                materials.AddRange(smr.materials);
                for (int sub = 0; sub < smr.sharedMesh.subMeshCount; sub++)
                {
                    CombineInstance ci = new CombineInstance();
                    ci.mesh         = smr.sharedMesh;
                    ci.subMeshIndex = sub;
                    //Debug.LogWarning(smr.sharedMesh.bindposes.Length);
                    combineInstances.Add(ci);
                }

                int boneCount = element.GetBoneNames().Length;
                foreach (string bone in element.GetBoneNames())
                {
                    foreach (Transform transform in transforms)
                    {
                        if (transform.name != bone)
                        {
                            continue;
                        }
                        bones.Add(transform);
                        break;
                    }
                }
                Object.Destroy(smr.gameObject);
            }

            SkinnedMeshRenderer r = root.GetComponent <SkinnedMeshRenderer>();

            r.sharedMesh = new Mesh();
            r.sharedMesh.CombineMeshes(combineInstances.ToArray(), false, false);
            r.bones = bones.ToArray();

            int bones_count     = r.bones.Length;
            int bindposes_count = r.sharedMesh.bindposes.Length;

            //Debug.LogWarning("bones.Count = "+bones_count + " bindposes.Count = "+ bindposes_count + " totalCount ="+totalCount );

            r.materials = materials.ToArray();
            Debug.Log("Generating character took: " + (Time.realtimeSinceStartup - startTime) * 1000 + " ms");
            return(root);
        }