Unity 分屍換裝實現

        //換裝         public static void BuildClothSuit(GameObject modelGo, XClothSuitBean suit)         {             if (suit != null)             {                 if (suit.Helmet != null && suit.Helmet.TemplateID != 0)                 {                     XClothSuitBean tempSuit = XTemplate.GetTemplateClothSuit(suit.Helmet.TemplateID);                     GameObject suitGo = UnityObjectBuilder.LoadPrefab(tempSuit.Prefab) as GameObject;                     BuildClothing(modelGo, suitGo, XClothType.Helmet);                 }                 if (suit.Body != null && suit.Body.TemplateID != 0)                 {                     XClothSuitBean tempSuit = XTemplate.GetTemplateClothSuit(suit.Body.TemplateID);                     GameObject suitGo = UnityObjectBuilder.LoadPrefab(tempSuit.Prefab) as GameObject;                     BuildClothing(modelGo, suitGo, XClothType.Body);                 }                 if (suit.Arm != null && suit.Arm.TemplateID != 0)                 {                     XClothSuitBean tempSuit = XTemplate.GetTemplateClothSuit(suit.Arm.TemplateID);                     GameObject suitGo = UnityObjectBuilder.LoadPrefab(tempSuit.Prefab) as GameObject;                     BuildClothing(modelGo, suitGo, XClothType.Arm);                 }                 if (suit.Leg != null && suit.Leg.TemplateID != 0)                 {                     XClothSuitBean tempSuit = XTemplate.GetTemplateClothSuit(suit.Leg.TemplateID);                     GameObject suitGo = UnityObjectBuilder.LoadPrefab(tempSuit.Prefab) as GameObject;                     BuildClothing(modelGo, suitGo, XClothType.Leg);                 }             }         }         #region 更換裝備部件         private static void BuildClothing(GameObject charGo, GameObject setGo, XClothType type)         {             string partName = null;             switch (type)             {                 case XClothType.Helmet:                     partName = "Head";                     break;                 case XClothType.Body:                     partName = "Body";                     break;                 case XClothType.Arm:                     partName = "Arms";                     break;                 case XClothType.Leg:                     partName = "Legs";                     break;             }             if (partName == null)             {                 Debug.Log("wrong type:" + type);                 return;             }             SkinnedMeshRenderer newSetSkinnedMeshRenderer = setGo.transform.Find("Meshes").Find(partName).GetComponent<SkinnedMeshRenderer>();             SkinnedMeshRenderer baseSkinnedMeshRenderer = charGo.transform.Find("Meshes").Find(partName).GetComponent<SkinnedMeshRenderer>();             baseSkinnedMeshRenderer.material = newSetSkinnedMeshRenderer.sharedMaterial;             baseSkinnedMeshRenderer.sharedMesh = newSetSkinnedMeshRenderer.sharedMesh;             //目標物件的骨架             Transform[] hips = charGo.GetComponentsInChildren<Transform>();             List<Transform> bones = new List<Transform>();             //從資料中取得各部位指定編號的 SkinnedMeshRenderer             foreach (Transform bone in newSetSkinnedMeshRenderer.bones)             {                 foreach (Transform hip in hips)                 {                     //                     if (hip.name != bone.name) continue;                     bones.Add(hip);                     break;                 }             }             baseSkinnedMeshRenderer.bones = bones.ToArray();         }         #endregion
相關文章
相關標籤/搜索