Selaa lähdekoodia

1.的撒范德萨

qianzhuqing 3 vuotta sitten
vanhempi
commit
a647ca768b

BIN
Assets/GameMain/DataTables/CustomBody.txt


+ 8 - 0
Assets/GameMain/Model.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b6dcc671de1083a49976dcc2678867e9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 33 - 0
Assets/GameMain/Scripts/Entity/EntityData/RoleCustomBoneData.cs

@@ -12,6 +12,11 @@ namespace MetaClient
         public Dictionary<string, Vector3> orginLocalPositionList;
         public Dictionary<string, Quaternion> orginLocalRotationList;
 
+        public Dictionary<int, float> changedValueList;
+        public Dictionary<string, Vector3> changedScaleList;
+        public Dictionary<string, Vector3> changedPositionList;
+        public Dictionary<string, Vector3> changedRotationList;
+
         public RoleCustomData ()
         {
             bodyList = new Dictionary<int, PartData>();
@@ -19,6 +24,11 @@ namespace MetaClient
             orginLocalScaleList = new Dictionary<string, Vector3>();
             orginLocalPositionList = new Dictionary<string, Vector3>();
             orginLocalRotationList = new Dictionary<string, Quaternion>();
+
+            changedValueList = new Dictionary<int, float>();
+            changedScaleList = new Dictionary<string, Vector3>();
+            changedPositionList = new Dictionary<string, Vector3>();
+            changedRotationList = new Dictionary<string, Vector3>();
         }
     }
 
@@ -36,6 +46,14 @@ namespace MetaClient
 
         public string pathValue;
 
+        public string[] bones;
+
+        public float minChangeValue;
+        public float maxChangeValue;
+        public Vector3 scaleChange;
+        public Vector3 positionChange;
+        public Vector3 rotationChange;
+
         public PartData(int _id,EditableBodyPart _part, ModifyType _modifyType)
         {
             id = _id;
@@ -45,5 +63,20 @@ namespace MetaClient
             vecValue = Vector3.zero;
             pathValue = "";
         }
+
+        public PartData(int _id,string[] _bones,float _min,float _max,Vector3 _scaleChange,Vector3 _posChange,Vector3 _rotChange)
+        {
+            id = _id;
+            floatValue = 1;
+            vecValue = Vector3.zero;
+            pathValue = "";
+
+            bones = _bones;
+            minChangeValue = _min;
+            maxChangeValue = _max;
+            scaleChange = _scaleChange;
+            positionChange = _posChange;
+            rotationChange = _rotChange;
+        }
     }
 }

+ 149 - 47
Assets/GameMain/Scripts/Game/CustomRole/CustomManager.cs

@@ -15,6 +15,7 @@ namespace MetaClient
         public RoleCustomData bodyData;
         public const float valueFloating = 1f;
         public CustomRoleController testPlayer = null;
+        public Dictionary<string, Transform> bones = new Dictionary<string, Transform>();
 
         private void Awake()
         {
@@ -25,6 +26,13 @@ namespace MetaClient
         {
             GameEntry.Event.Subscribe(CustomRoleBodyEventArgs.EventId, UpdateBody);
 
+            CreateCustomBodyData();
+        }
+        /// <summary>
+        /// 生成玩家自定义数据信息
+        /// </summary>
+        public void CreateCustomBodyData()
+        {
             testPlayer = GameObject.Find("标准女").GetComponent<CustomRoleController>();
 
             bodyData = new RoleCustomData();
@@ -33,22 +41,59 @@ namespace MetaClient
             DRCustomBody[] dtCB = drCB.GetAllDataRows();
             for (int i = 0; i < dtCB.Length; i++)
             {
-                bodyData.bodyList.Add(dtCB[i].Id, new PartData(dtCB[i].Id,(EditableBodyPart)dtCB[i].Part, (ModifyType)dtCB[i].ModifyType));
+                var partData = new PartData(
+                    dtCB[i].Id,
+                    dtCB[i].BoneName.Split(','),
+                    dtCB[i].ScaleRangeMin,
+                    dtCB[i].ScaleRangeMax,
+                    dtCB[i].ScaleChange,
+                    dtCB[i].PositionChange,
+                    dtCB[i].RotationChange
+                    );
+                bodyData.bodyList.Add(dtCB[i].Id, partData);
             }
 
-            //初始缩放
-            testPlayer.GetNormalAniBonesScale(ref bodyData.orginLocalScaleList);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.Chest);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperArmUp);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperArmDown);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperLegUp);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperLegDown);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.LowerLegUp);
-            testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.LowerLegDown);
-            //初始位置
-            testPlayer.GetExtraAniBonesPosition(ref bodyData.orginLocalPositionList, EditableBodyPart.Chest);
-            //初始旋转
-            testPlayer.GetExtraAniBonesRotate(ref bodyData.orginLocalRotationList, EditableBodyPart.Chest);
+            bones.Clear();
+            foreach (var item in bodyData.bodyList)
+            {
+                var key = item.Key;
+                var value = item.Value;
+                for (int i = 0; i < value.bones.Length; i++)
+                {
+                    var transform = CustomRoleUtility.GetChild(testPlayer.transform, value.bones[i]);
+                    if(!transform)
+                    {
+                        continue;
+                    }
+                    if(!bones.ContainsKey(value.bones[i]))
+                    {
+                        bones.Add(value.bones[i], transform);
+                    }
+                }
+            }
+            Debug.Log( "一共有"+ bones.Count + "部位的骨骼自定义修改");
+
+            //获取自定义骨骼的初始数据
+            foreach (var item in bones)
+            {
+                var key = item.Key;
+                var value = item.Value;
+                bodyData.orginLocalScaleList.Add(key, value.localScale);
+            }
+
+            ////初始缩放
+            //testPlayer.GetNormalAniBonesScale(ref bodyData.orginLocalScaleList);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.Chest);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperArmUp);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperArmDown);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperLegUp);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.UpperLegDown);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.LowerLegUp);
+            //testPlayer.GetExtraAniBonesScale(ref bodyData.orginLocalScaleList, EditableBodyPart.LowerLegDown);
+            ////初始位置
+            //testPlayer.GetExtraAniBonesPosition(ref bodyData.orginLocalPositionList, EditableBodyPart.Chest);
+            ////初始旋转
+            //testPlayer.GetExtraAniBonesRotate(ref bodyData.orginLocalRotationList, EditableBodyPart.Chest);
         }
 
         public void Clear()
@@ -61,51 +106,73 @@ namespace MetaClient
             CustomRoleBodyEventArgs crf = (CustomRoleBodyEventArgs)e;
             if (crf != null)
             {
+                
                 //更新数据
-                IDataTable<DRCustomBody> drCB = GameEntry.DataTable.GetDataTable<DRCustomBody>();
-                var formData = drCB.GetDataRow(crf.Part);
-                if(formData == null)
+                var partData = bodyData.bodyList[crf.Part];
+                if(partData == null)
                 {
-                    Debug.LogError(crf.Part + ":  表里不存在此行数据");
+                    Debug.LogError("ID :" + crf.Part + "   无数据");
                     return;
                 }
-                bodyData.bodyList[crf.Part].floatValue = 1 + (crf.ChangeValue.x - 0.5f) * valueFloating;
-
-                //通过更新的数据更新骨骼缩放
-                if (testPlayer != null)
+                if(crf.ChangeValue.x == 0.5f)
                 {
-                    switch ((ModifyType)formData.ModifyType)
+                    partData.floatValue = 1;
+                }
+                if(crf.ChangeValue.x < 0.5f)
+                {
+                    partData.floatValue = partData.minChangeValue + (1 - partData.minChangeValue) * (crf.ChangeValue.x/0.5f);
+                }
+                if(crf.ChangeValue.x > 0.5f)
+                {
+                    partData.floatValue = 1 + (partData.maxChangeValue - 1) * ((crf.ChangeValue.x - 0.5f)/0.5f);
+                }
+                Debug.Log(crf.Part + " : " + crf.ChangeValue + " 转换后 :" + partData.floatValue);
+                if (partData.scaleChange != Vector3.zero)
+                {
+                    for (int i = 0; i < partData.bones.Length; i++)
                     {
-                        case ModifyType.Length:
-                            testPlayer.UpdateBoneScale((EditableBodyPart)formData.Part, new Vector3(0, 0, 1), formData.IsKeepChildrenScale, bodyData.bodyList[crf.Part].floatValue);
-                            break;
-                        case ModifyType.Width:
-                            testPlayer.UpdateBoneScale((EditableBodyPart)formData.Part, new Vector3(0, 1, 0), formData.IsKeepChildrenScale, bodyData.bodyList[crf.Part].floatValue);
-                            break;
-                        case ModifyType.Thick:
-                            testPlayer.UpdateBoneScale((EditableBodyPart)formData.Part, new Vector3(1, 0, 0), formData.IsKeepChildrenScale, bodyData.bodyList[crf.Part].floatValue);
-                            break;
-                        case ModifyType.LengthWidthThick:
-                            testPlayer.UpdateBoneScale((EditableBodyPart)formData.Part, new Vector3(1, 1, 1), formData.IsKeepChildrenScale, bodyData.bodyList[crf.Part].floatValue);
-                            break;
-                        case ModifyType.Angle:
-                            break;
-                        case ModifyType.UpDown:
-                            break;
-                        case ModifyType.LeftRight:
-                            break;
-                        case ModifyType.ForwardBehind:
-                            break;
-                        default:
-                            break;
+                        var orginBoneScale = bodyData.orginLocalScaleList[partData.bones[i]];
+                        var bone = bones[partData.bones[i]];
+
+                        var nowBone = bones[partData.bones[i]];
+                        var nowScale = new Vector3(nowBone.localScale.x/orginBoneScale.x, nowBone.localScale.y / orginBoneScale.y, nowBone.localScale.z / orginBoneScale.z);
+                        //var newBoneScale = new Vector3(orginBoneScale.x * (partData.scaleChange.x == 1 ? partData.floatValue : 1) * nowScale.x, orginBoneScale.y * (partData.scaleChange.y == 1 ? partData.floatValue : 1) * nowScale.y, orginBoneScale.z * (partData.scaleChange.z == 1 ? partData.floatValue : 1) * nowScale.y);
+
+                        var newBoneScale = new Vector3(
+                            partData.scaleChange.x == 1 ? partData.floatValue * orginBoneScale.x : nowBone.localScale.x,
+                            partData.scaleChange.y == 1 ? partData.floatValue * orginBoneScale.y : nowBone.localScale.y,
+                            partData.scaleChange.z == 1 ? partData.floatValue * orginBoneScale.z : nowBone.localScale.z
+                            );
+
+                        Debug.Log("newBoneScale : " + newBoneScale);
+                        bodyData.changedScaleList[partData.bones[i]] = newBoneScale;
                     }
                 }
+
+                RefreshRole();
             }
         }
 
         public float GetBodyBoneValue(int id)
         {
-            return 0.5f + (bodyData.bodyList[id].floatValue - 1) / valueFloating;
+            Debug.Log(id +":  GetBodyBoneValue + " + bodyData.bodyList[id].scaleChange + "   " + bodyData.bodyList[id].floatValue);
+            if (bodyData.bodyList[id].scaleChange.x == 1 || bodyData.bodyList[id].scaleChange.y == 1 || bodyData.bodyList[id].scaleChange.z == 1)
+            {
+                if (bodyData.bodyList[id].floatValue == 1)
+                {
+                    return 0.5f;
+                }
+                if (bodyData.bodyList[id].floatValue < 1)
+                {
+                    return (bodyData.bodyList[id].floatValue - bodyData.bodyList[id].minChangeValue) / (1 - bodyData.bodyList[id].minChangeValue)/2;
+                }
+                if (bodyData.bodyList[id].floatValue > 1)
+                {
+                    return 0.5f + (bodyData.bodyList[id].floatValue - 1) / (bodyData.bodyList[id].maxChangeValue - 1)/2;
+                }
+            }
+            
+            return 0.5f;
         }
         /// <summary>
         /// 重置角色数据
@@ -131,7 +198,8 @@ namespace MetaClient
             {
                 var key = item.Key;
                 var value = item.Value;
-                testPlayer.SetBoneScale(key, value);
+                //testPlayer.SetBoneScale(key, value);
+                testPlayer.SetBoneWorldScale(key, value);
             }
 
             //重置旋转
@@ -150,5 +218,39 @@ namespace MetaClient
                 testPlayer.SetBonePos(key, value);
             }
         }
+
+        public void RefreshRole()
+        {
+            if (testPlayer == null)
+            {
+                Debug.LogError("没有模型存在");
+                return;
+            }
+            Debug.Log("刷新模型");
+
+            //刷新缩放
+            //foreach (var item in bodyData.orginLocalScaleList)
+            //{
+            //    var key = item.Key;
+            //    var value = item.Value;
+
+            //    if(bodyData.changedScaleList.ContainsKey(key))
+            //    {
+            //        testPlayer.SetBoneScale(key, bodyData.changedScaleList[key]);
+            //    }
+            //    else
+            //    {
+            //        testPlayer.SetBoneScale(key, value);
+            //    }
+            //}
+
+            foreach (var item in bodyData.changedScaleList)
+            {
+                var key = item.Key;
+                var value = item.Value;
+
+                testPlayer.SetBoneScale(key, value);
+            }
+        }
     }
 }

+ 13 - 1
Assets/GameMain/Scripts/Game/CustomRole/CustomRoleController.cs

@@ -2,6 +2,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using DG.Tweening;
 
 public class CustomRoleController : MonoBehaviour
 {
@@ -102,7 +103,7 @@ public class CustomRoleController : MonoBehaviour
         {
             for (int i = 0; i < targetTrans.Length; i++)
             {
-                boneDic.Add(targetTrans[i].name, targetTrans[i].localScale);
+                boneDic.Add(targetTrans[i].name, targetTrans[i].lossyScale);
             }
         }
     }
@@ -159,4 +160,15 @@ public class CustomRoleController : MonoBehaviour
             bone.transform.localScale = value;
         }
     }
+
+    public void SetBoneWorldScale(string name, Vector3 value)
+    {
+        var bone = CustomRoleUtility.GetChild(transform, name);
+        if(bone == null)
+        {
+            Debug.Log("不存在此骨骼 : " + name);
+            return;
+        }
+        bone.DOScale(value, 0);
+    }
 }

+ 8 - 6
Assets/GameMain/Scripts/UI/UICustom.cs

@@ -70,7 +70,7 @@ namespace MetaClient
         private float tween_saveBtnMax = 119;
         private float tween_saveBtnMin = -108;
 
-       
+        private float tweenTime = 0.5f;
         //private float tweenTime = 10;
         //private float tweenLeastTime = 0;
 
@@ -112,18 +112,18 @@ namespace MetaClient
                 return;
             }
             isTween = true;
-            leftView.transform.DOLocalMoveX(tween_leftMin, 2f).SetEase(Ease.InOutBack).OnComplete(()=> {
+            leftView.transform.DOLocalMoveX(tween_leftMin, tweenTime).SetEase(Ease.InOutBack).OnComplete(()=> {
                 //whitebg.SetActive(bg);
                
                  ClickBtnFun(eCustomStyple,id,ziDingYi);
-                leftView.transform.DOLocalMoveX(0, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
+                leftView.transform.DOLocalMoveX(0, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
                     isTween = false;
                     Debug.Log("222");
                 });
             });
             Debug.Log("333");
-            rightView.transform.DOLocalMoveX(tween_rightMax, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
-                rightView.transform.DOLocalMoveX(0, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
+            rightView.transform.DOLocalMoveX(tween_rightMax, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
+                rightView.transform.DOLocalMoveX(0, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
                 });
             });
 
@@ -151,7 +151,8 @@ namespace MetaClient
         /// </summary>
         public void ScrollValueChange()
         {
-            Debug.Log(scrollbar.value);
+            //Debug.Log(scrollbar.value);
+            GameEntry.Event.Fire(this, CustomRoleBodyEventArgs.Create(part, new Vector3(scrollbar.value, 0, 0)));
         }
 
         /// <summary>
@@ -163,6 +164,7 @@ namespace MetaClient
 
             //scrollbar.value = _value;
             part = _part;
+            scrollbar.value = CustomManager.Instance.GetBodyBoneValue(part);
         }
         /// <summary>
         /// 获得滑块值

+ 1 - 1
Assets/GameMain/Scripts/UI/UICustomBtn.cs

@@ -54,7 +54,7 @@ namespace MetaClient
                         uICustom.scrollbar.gameObject.SetActive(true);
                     }
                     // uICustom.scrollbar.value = GetValue();
-                    uICustom.SetValue(part, eCustomStyple);
+                    uICustom.SetValue(id, eCustomStyple);
                     
                     break;
                 case EButtonStyple.TiaoSe:

+ 6 - 4
Assets/GameMain/Scripts/UI/UICustomNor.cs

@@ -19,6 +19,8 @@ namespace MetaClient
         [Header("消失对象")]
         public List<GameObject> objDisAppear;
 
+        private float tweenTime = 0.5f;
+
         // Start is called before the first frame update
         void Start()
         {
@@ -32,19 +34,19 @@ namespace MetaClient
                 return;
             }
             uICustom.isTween = true;
-            uICustom.leftView.transform.DOLocalMoveX(uICustom.tween_leftMin, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
+            uICustom.leftView.transform.DOLocalMoveX(uICustom.tween_leftMin, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
                 //  ClickBtnFun(_objects);
                 objDisAppear.ForEach(i => i.SetActive(false));
                 objAppear.ForEach(i => i.SetActive(true));
-                uICustom.leftView.transform.DOLocalMoveX(0, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
+                uICustom.leftView.transform.DOLocalMoveX(0, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
                     uICustom.isTween = false;
                     uICustom.HistoryAdd("firstpush");
                     Debug.Log("222");
                 });
             });
             Debug.Log("333");
-            uICustom.rightView.transform.DOLocalMoveX(uICustom.tween_rightMax, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
-                uICustom.rightView.transform.DOLocalMoveX(0, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
+            uICustom.rightView.transform.DOLocalMoveX(uICustom.tween_rightMax, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
+                uICustom.rightView.transform.DOLocalMoveX(0, tweenTime).SetEase(Ease.InOutBack).OnComplete(() => {
                 });
             });
 

+ 1 - 1
Assets/GameMain/Scripts/Utility/CustomRoleUtility.cs

@@ -213,7 +213,7 @@ public static class CustomRoleUtility
             var trans = ani.GetBoneTransform((HumanBodyBones)i);
             if(trans)
             {
-                boneDic.Add(trans.name, trans.localScale);
+                boneDic.Add(trans.name, trans.lossyScale);
             }
         }
     }