using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(SkinnedMeshRenderer))] public class CombinePlayer : MonoBehaviour { public GameObject[] bodys; // Start is called before the first frame update void Start() { Replace(bodys,gameObject); } public void Replace(GameObject[] bodys, GameObject avatar) { Mesh mesh = new Mesh(); List<CombineInstance> combines = new List<CombineInstance>(); for (int i = 0; i < bodys.Length; i++) { CombineInstance combine = new CombineInstance(); combine.mesh = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMesh; combines.Add(combine); } mesh.CombineMeshes(combines.ToArray(), false, false); avatar.GetComponent<SkinnedMeshRenderer>().sharedMesh = mesh; List<Material> materials = new List<Material>(); for (int i = 0; i < bodys.Length; i++) { materials.Add(bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial); } avatar.GetComponent<SkinnedMeshRenderer>().materials = materials.ToArray(); Transform[] allbones = avatar.GetComponentsInChildren<Transform>(); Dictionary<string, Transform> dicbones = new Dictionary<string, Transform>(); foreach (var item in allbones) { dicbones.Add(item.name, item); } List<Transform> mybones = new List<Transform>(); for (int i = 0; i < bodys.Length; i++) { Transform[] bodybones = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().bones; for (int j = 0; j < bodybones.Length; j++) { if (dicbones.ContainsKey(bodybones[j].name)) { mybones.Add(dicbones[bodybones[j].name]); } } } avatar.GetComponent<SkinnedMeshRenderer>().bones = mybones.ToArray(); }
public void Huan(string[] id) { GameObject[] bodys = new GameObject[3]; bodys[0] = Resources.Load<GameObject>("Prefab/Tou_" + id[0]); bodys[1] = Resources.Load<GameObject>("Prefab/YiFu_" + id[1]); bodys[2] = Resources.Load<GameObject>("Prefab/Tui_" + id[2]); Transform[] allbones = gameObject.GetComponentsInChildren<Transform>(); Dictionary<string, Transform> dic_bone = new Dictionary<string, Transform>(); foreach (var item in allbones) { dic_bone.Add(item.name, item); } List<Transform> bones = new List<Transform>(); List<CombineInstance> combines = new List<CombineInstance>(); List<Material> materials = new List<Material>(); for (int i = 0; i < bodys.Length; i++) { SkinnedMeshRenderer sk = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>(); CombineInstance combine = new CombineInstance(); combine.mesh = sk.sharedMesh; combines.Add(combine); materials.Add(sk.sharedMaterial); for (int j = 0; j < sk.bones.Length; j++) { if (dic_bone.ContainsKey(sk.bones[j].name)) { bones.Add(dic_bone[sk.bones[j].name]); } } } Mesh mesh = new Mesh(); mesh.CombineMeshes(combines.ToArray(), false, false); skinned.sharedMesh = mesh; skinned.materials = materials.ToArray(); skinned.bones = bones.ToArray(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!