Browse Source

拍照层级

zhaoyang 3 years ago
parent
commit
8f4ae1ce4d

+ 50 - 3
GameClient/Assets/Game/HotUpdate/Data/PhotographDataManager.cs

@@ -128,19 +128,66 @@ namespace GFGGame
         //传入父物体,设置子物体层级
         //传入父物体,设置子物体层级
         public void SetItemLayer(GameObject parentObj, int layer)
         public void SetItemLayer(GameObject parentObj, int layer)
         {
         {
+
             for (int i = 0; i < parentObj.transform.childCount; i++)
             for (int i = 0; i < parentObj.transform.childCount; i++)
             {
             {
                 Transform tf = parentObj.transform.GetChild(i);
                 Transform tf = parentObj.transform.GetChild(i);
                 string[] strs = tf.name.Split('_');
                 string[] strs = tf.name.Split('_');
                 if (strs.Length > 1 && strs[1] == "eff")//子物体是特效
                 if (strs.Length > 1 && strs[1] == "eff")//子物体是特效
                 {
                 {
-                    DressUpUtil.SetParticleSortingOrder(tf.gameObject, layer);
+                    DressUpUtil.SetParticleSortingOrder(tf.gameObject, layer, true);
                 }
                 }
-                else
+            }
+            SpriteRenderer[] sps = parentObj.GetComponentsInChildren<SpriteRenderer>();
+            List<SpriteRenderer> listSp = new List<SpriteRenderer>(sps);
+            listSp = SortItemList(listSp);
+
+            for (int i = 0; i < listSp.Count; i++)
+            {
+                int sortingOrder = listSp[i].sortingOrder;
+                listSp[i].sortingOrder = layer + i;
+            }
+        }
+        private static List<SpriteRenderer> SortItemList(List<SpriteRenderer> arrayList)
+        {
+
+            arrayList.Sort((SpriteRenderer a, SpriteRenderer b) =>
+            {
+
+                int rarityA = a.sortingOrder;
+                int rarityB = b.sortingOrder;
+                if (rarityA < rarityB)
+                {
+                    return -1;
+                }
+                else if (rarityA > rarityB)
+                {
+                    return 1;
+                }
+                return 0;
+            });
+            return arrayList;
+        }
+
+
+        public int GetMaxLayer(GameObject parentObj, int maxLayer)
+        {
+            int layer = GetLayer(parentObj);
+            return maxLayer < layer ? layer : maxLayer;
+        }
+        public int GetLayer(GameObject parentObj)
+        {
+            int layer = int.MinValue;
+            for (int i = 0; i < parentObj.transform.childCount; i++)
+            {
+                Transform tf = parentObj.transform.GetChild(i);
+                SpriteRenderer sp = tf.GetComponent<SpriteRenderer>();
+                if (sp && layer < sp.sortingOrder)
                 {
                 {
-                    tf.GetComponent<SpriteRenderer>().sortingOrder = layer;
+                    layer = sp.sortingOrder;
                 }
                 }
             }
             }
+            return layer;
         }
         }
 
 
         public void SetBgPos(GameObject hitGameObj, Vector2 uiSize)
         public void SetBgPos(GameObject hitGameObj, Vector2 uiSize)

+ 10 - 2
GameClient/Assets/Game/HotUpdate/DressUp/DressUpUtil.cs

@@ -307,7 +307,7 @@ namespace GFGGame
             ty = 0;
             ty = 0;
         }
         }
 
 
-        public static void SetParticleSortingOrder(GameObject gameObj, int sortingOrder)
+        public static void SetParticleSortingOrder(GameObject gameObj, int sortingOrder, bool isAdd = false)
         {
         {
             var count = gameObj.transform.childCount;
             var count = gameObj.transform.childCount;
             for (int i = 0; i < count; i++)
             for (int i = 0; i < count; i++)
@@ -319,7 +319,15 @@ namespace GFGGame
                     var renderer = ps.GetComponent<Renderer>();
                     var renderer = ps.GetComponent<Renderer>();
                     if (renderer != null)
                     if (renderer != null)
                     {
                     {
-                        renderer.sortingOrder = sortingOrder;
+                        if (isAdd)
+                        {
+                            renderer.sortingOrder = renderer.sortingOrder + sortingOrder;
+                        }
+                        else
+                        {
+
+                            renderer.sortingOrder = sortingOrder;
+                        }
                     }
                     }
                 }
                 }
             }
             }

+ 14 - 8
GameClient/Assets/Game/HotUpdate/DressUp/SceneController.cs

@@ -242,20 +242,26 @@ namespace GFGGame
             Vector3 center = Vector3.zero;
             Vector3 center = Vector3.zero;
             Renderer[] renders = parent.GetComponentsInChildren<Renderer>();
             Renderer[] renders = parent.GetComponentsInChildren<Renderer>();
             int index = 0;
             int index = 0;
-            foreach (Renderer child in renders)
+            foreach (Transform t in parent)
             {
             {
-                string[] strs = child.transform.parent.name.Split('_');
+                string[] strs = t.name.Split('_');
                 if (strs.Length > 1 && strs[1] == "eff") continue;//不计算特效大小
                 if (strs.Length > 1 && strs[1] == "eff") continue;//不计算特效大小
-                index++;
-                center += child.bounds.center;
+                Renderer render = t.GetComponent<Renderer>();
+                if (render)
+                {
+                    index++;
+                    center += render.bounds.center;
+                }
             }
             }
             center /= index;
             center /= index;
             Bounds bounds = new Bounds(center, Vector3.zero);
             Bounds bounds = new Bounds(center, Vector3.zero);
-            foreach (Renderer child in renders)
+            foreach (Transform t in parent)
             {
             {
-                string[] strs = child.transform.parent.name.Split('_');
+                string[] strs = t.name.Split('_');
                 if (strs.Length > 1 && strs[1] == "eff") continue;
                 if (strs.Length > 1 && strs[1] == "eff") continue;
-                bounds.Encapsulate(child.bounds);
+                Renderer render = t.GetComponent<Renderer>();
+                if (render) bounds.Encapsulate(render.bounds);
+                Debug.Log("zoya_111" + bounds);
             }
             }
 
 
             parent.position = postion;
             parent.position = postion;
@@ -268,8 +274,8 @@ namespace GFGGame
                 if (strs.Length > 1 && strs[1] == "eff") continue;
                 if (strs.Length > 1 && strs[1] == "eff") continue;
                 t.position = t.position - bounds.center;
                 t.position = t.position - bounds.center;
             }
             }
-            parent.position = bounds.center + parent.position;
 
 
+            parent.position = bounds.center + parent.position;
 
 
         }
         }
 
 

+ 24 - 12
GameClient/Assets/Game/HotUpdate/Views/DressUp/PhotographView.cs

@@ -195,7 +195,7 @@ namespace GFGGame
             RaycastHit2D[] hit2Ds = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
             RaycastHit2D[] hit2Ds = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
             if (hit2Ds.Length > 0)
             if (hit2Ds.Length > 0)
             {
             {
-                maxLayer++;
+                // maxLayer++;
                 lastPos = Vector2.zero;
                 lastPos = Vector2.zero;
 
 
                 hitGameObj = SceneController.GetFirstHitObj(hit2Ds);
                 hitGameObj = SceneController.GetFirstHitObj(hit2Ds);
@@ -211,10 +211,11 @@ namespace GFGGame
                     hitGameObj = hitGameObj.transform.parent.gameObject;
                     hitGameObj = hitGameObj.transform.parent.gameObject;
 
 
                     PhotographDataManager.Instance.SetItemLayer(hitGameObj, maxLayer);
                     PhotographDataManager.Instance.SetItemLayer(hitGameObj, maxLayer);
+                    maxLayer = PhotographDataManager.Instance.GetMaxLayer(hitGameObj, maxLayer) + 1;
                     _ui.m_comSelectBox.target.visible = true;
                     _ui.m_comSelectBox.target.visible = true;
 
 
+                    SceneController.SetGameObjectCenter(hitGameObj);
                 }
                 }
-                SceneController.SetGameObjectCenter(hitGameObj);
                 memoryHitGameObj = hitGameObj;
                 memoryHitGameObj = hitGameObj;
 
 
                 distance = Input.mousePosition - Camera.main.WorldToScreenPoint(hitGameObj.transform.position);
                 distance = Input.mousePosition - Camera.main.WorldToScreenPoint(hitGameObj.transform.position);
@@ -359,8 +360,9 @@ namespace GFGGame
         {
         {
             GameObject bodyParent = _sceneObject.transform.Find(RolePath).gameObject;
             GameObject bodyParent = _sceneObject.transform.Find(RolePath).gameObject;
             SceneController.UpdatePhotographBody(_equipRoleData.ToArray(), _sceneObject, bodyParent);
             SceneController.UpdatePhotographBody(_equipRoleData.ToArray(), _sceneObject, bodyParent);
-            int layer = bodyParent.transform.Find("Body").GetComponent<SpriteRenderer>().sortingOrder;
-            maxLayer = layer < maxLayer ? maxLayer : layer;
+            // int layer = bodyParent.transform.Find("Body").GetComponent<SpriteRenderer>().sortingOrder;
+            // maxLayer = layer < maxLayer ? maxLayer : layer;
+            maxLayer = PhotographDataManager.Instance.GetMaxLayer(bodyParent, maxLayer) + 1;
         }
         }
         //添加初始场景道具
         //添加初始场景道具
         private void UpdateScene()
         private void UpdateScene()
@@ -416,11 +418,12 @@ namespace GFGGame
                 parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 1));
                 parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 1));
                 SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer2);
                 SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer2);
                 SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
                 SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
+                maxLayer = PhotographDataManager.Instance.GetMaxLayer(parentGameObj, maxLayer) + 1;
 
 
-                ItemTypeCfg itemTypeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
-                int layer = isDefaultLayer ? itemTypeCfg.specialLayer : maxLayer + 1;
-                PhotographDataManager.Instance.SetItemLayer(parentGameObj, layer);
-                maxLayer = layer;
+                if (isDefaultLayer) return;
+                // maxLayer = maxLayer + 1;
+
+                PhotographDataManager.Instance.SetItemLayer(parentGameObj, maxLayer);
 
 
             }
             }
             if (itemCfg.resLayer1 > 0)
             if (itemCfg.resLayer1 > 0)
@@ -435,10 +438,19 @@ namespace GFGGame
                 SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer1);
                 SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer1);
                 SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
                 SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
 
 
-                ItemTypeCfg itemTypeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
-                int layer = isDefaultLayer ? itemTypeCfg.defaultLayer : maxLayer + 1;
-                PhotographDataManager.Instance.SetItemLayer(parentGameObj, layer);
-                maxLayer = layer;
+                // ItemTypeCfg itemTypeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
+                // maxLayer = isDefaultLayer && maxLayer < itemTypeCfg.defaultLayer ? itemTypeCfg.defaultLayer : maxLayer + 1;
+                // if (!isDefaultLayer)
+                // {
+                //     // maxLayer = maxLayer + 1;
+                //     PhotographDataManager.Instance.SetItemLayer(parentGameObj, maxLayer);
+                // }
+                maxLayer = PhotographDataManager.Instance.GetMaxLayer(parentGameObj, maxLayer) + 1;
+
+                if (isDefaultLayer) return;
+                // maxLayer = PhotographDataManager.Instance.GetLayer(parentGameObj) + maxLayer + 1;
+                // maxLayer = maxLayer + 1;
+                PhotographDataManager.Instance.SetItemLayer(parentGameObj, maxLayer);
 
 
             }
             }
         }
         }