/// <summary> /// 根据ModelPart结构体生成模型 /// </summary> public void GenerateByModelPart(ModelPart parts) { _parts = parts; // 角色主体骨骼上的所有挂载点 Transform[] jointList = GetComponentsInChildren <Transform>(); int[] partIDList = _parts.GetValues(); // 部件ID数组 int partCount = partIDList.Length; // 部件数量 SkinnedMeshRenderer[] meshList = new SkinnedMeshRenderer[partCount]; // 部件Mesh GameObject[] partGOList = new GameObject[partCount]; // 部件GameObject // 收集Mesh for (int i = 0; i < partCount; i++) { int partID = partIDList[i]; if (partID == 0) { continue; } GameObject tempRes = Resources.Load <GameObject>(idToPath[partID]); partGOList[i] = Instantiate(tempRes); meshList[i] = partGOList[i].GetComponentInChildren <SkinnedMeshRenderer>(); // 处理装备上的粒子特效 Dictionary <GameObject, string> particleMap = FindParticles(partGOList[i]); foreach (var particlePair in particleMap) { Transform particleRoot = particlePair.Key.transform; string jointName = particlePair.Value; foreach (var joint in jointList) { if (joint.name == jointName) { particleRoot.SetParent(joint, false); } } } } // 合并Mesh CombineSkinnedMgr.Instance.CombineObject(gameObject, meshList, true); // 删除老部件 foreach (GameObject partGO in partGOList) { if (partGO != null) { DestroyImmediate(partGO); } } }