博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity 分尸换装实现
阅读量:6041 次
发布时间:2019-06-20

本文共 2424 字,大约阅读时间需要 8 分钟。

hot3.png

        //换装
        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

转载于:https://my.oschina.net/u/1431106/blog/355592

你可能感兴趣的文章
浏览器的回流和重绘及其优化方式
查看>>
2.4 salt grains与pillar jinja的模板
查看>>
VDI序曲二十 桌面虚拟化和RemoteApp集成到SharePoint 2010里
查看>>
移动互联网,入口生死战
查看>>
JAVA多线程深度解析
查看>>
Kafka High Level Consumer 会丢失消息
查看>>
时间轴
查看>>
java 获取系统当前时间的方法
查看>>
Ubuntu 10.04升级git 到1.7.2或更高的可行方法
查看>>
Spring Security4实战与原理分析视频课程( 扩展+自定义)
查看>>
第一周博客作业
查看>>
thinkpython2
查看>>
oracle recyclebin与flashback drop
查看>>
svmlight使用说明
查看>>
Swing 和AWT之间的关系
查看>>
Mysql设置自增长主键的初始值
查看>>
Android计时器正确应用方式解析
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>