Ver código fonte

拍照特效

zhaoyang 3 anos atrás
pai
commit
a10007ee1f

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

@@ -54,7 +54,7 @@ namespace GFGGame
                 }
 
                 //特效
-                if (itemCfg.effLayer > 0 && showAni)
+                if (itemCfg.effLayer > 0)
                 {
                     var objName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType);
                     ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
@@ -307,7 +307,7 @@ namespace GFGGame
             ty = 0;
         }
 
-        private static void SetParticleSortingOrder(GameObject gameObj, int sortingOrder)
+        public static void SetParticleSortingOrder(GameObject gameObj, int sortingOrder)
         {
             var count = gameObj.transform.childCount;
             for (int i = 0; i < count; i++)

+ 13 - 19
GameClient/Assets/Game/HotUpdate/DressUp/SceneController.cs

@@ -205,25 +205,10 @@ namespace GFGGame
         public static void AddItemToScene(GameObject sceneObj, GameObject parentGameObj, int itemId, int layerId)
         {
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
-            // //普通层
-            // if (itemCfg.resLayer1 > 0)
-            // {
-            //     var parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemId, index, itemCfg.resLayer1));
+
             parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
             DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj, layerId);
             SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
-
-            // }
-            // //特殊层
-            // if (itemCfg.resLayer2 > 0)
-            // {
-            //     var parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemId, index, itemCfg.resLayer2));
-            //     parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
-            //     DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj, itemCfg.resLayer2);
-            //     SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
-
-            // }
-
         }
         //传入父物体,根据所有子物体大小计算父物体边框大小
         public static Vector2 GetGameObjectSize(GameObject parentObj)
@@ -243,7 +228,7 @@ namespace GFGGame
         //设置物体中心点
         public static void SetGameObjectCenter(GameObject parentObj)
         {
-            Transform parent = parentObj.transform;
+            Transform parent = parentObj.transform;  // 2.选中技算
             Vector3 postion = parent.position;
             Quaternion rotation = parent.rotation;
             Vector3 scale = parent.localScale;
@@ -252,14 +237,20 @@ namespace GFGGame
             parent.localScale = Vector3.one;
             Vector3 center = Vector3.zero;
             Renderer[] renders = parent.GetComponentsInChildren<Renderer>();
+            int index = 0;
             foreach (Renderer child in renders)
             {
+                string[] strs = child.transform.parent.name.Split('_');
+                if (strs.Length > 1 && strs[1] == "eff") continue;//不计算特效大小
+                index++;
                 center += child.bounds.center;
             }
-            center /= parent.GetComponentsInChildren<Transform>().Length;
+            center /= index;
             Bounds bounds = new Bounds(center, Vector3.zero);
             foreach (Renderer child in renders)
             {
+                string[] strs = child.transform.parent.name.Split('_');
+                if (strs.Length > 1 && strs[1] == "eff") continue;
                 bounds.Encapsulate(child.bounds);
             }
 
@@ -269,9 +260,12 @@ namespace GFGGame
 
             foreach (Transform t in parent)
             {
+                string[] strs = t.parent.name.Split('_');
+                if (strs.Length > 1 && strs[1] == "eff") continue;
                 t.position = t.position - bounds.center;
             }
-            parent.transform.position = bounds.center + parent.position;
+            parent.position = bounds.center + parent.position;
+
 
         }
 

+ 68 - 21
GameClient/Assets/Game/HotUpdate/Views/DressUp/PhotographView.cs

@@ -192,7 +192,7 @@ namespace GFGGame
 
                 case EnumPhotographType.SCENE:
 
-                    AddSceneItem(itemCfg, false, maxLayer);
+                    AddSceneItem(itemCfg, false);
                     break;
                 case EnumPhotographType.EFFECT:
 
@@ -223,11 +223,26 @@ namespace GFGGame
                 _ui.m_comSelectBox.target.visible = false;
                 if (hitGameObj.name != "BgRes")//背景不可改动层级
                 {
-                    hitGameObj.GetComponent<SpriteRenderer>().sortingOrder = maxLayer;
                     hitGameObj = hitGameObj.transform.parent.gameObject;
+
+                    for (int i = 0; i < hitGameObj.transform.childCount; i++)
+                    {
+                        Transform obj = hitGameObj.transform.GetChild(i);
+                        string[] strs = obj.name.Split('_');
+                        if (strs.Length > 1 && strs[1] == "eff")
+                        {
+                            DressUpUtil.SetParticleSortingOrder(obj.gameObject, maxLayer);
+                        }
+                        else
+                        {
+                            obj.GetComponent<SpriteRenderer>().sortingOrder = maxLayer;
+                        }
+                    }
+                    // maxLayer = layer;
                     _ui.m_comSelectBox.target.visible = true;
 
                 }
+                SceneController.SetGameObjectCenter(hitGameObj);
 
                 distance = Input.mousePosition - Camera.main.WorldToScreenPoint(hitGameObj.transform.position);
 
@@ -291,7 +306,6 @@ namespace GFGGame
         //选中框的位置
         private void ControllerSelectBoxPos()
         {
-
             Vector2 objScreenPos = Camera.main.WorldToScreenPoint(hitGameObj.transform.position);
             Vector2 localPos = this.viewCom.GlobalToLocal(new Vector2(objScreenPos.x, (Screen.height - objScreenPos.y)));
             _ui.m_comSelectBox.target.position = localPos;
@@ -334,6 +348,8 @@ namespace GFGGame
             float newValue = Mathf.Clamp(ss, 0.1f, 2);
             ControllerScale(newValue, memoryHitGameObj);
 
+            // Vector2 center = SceneController.SetGameObjectCenter(hitGameObj);
+            // memoryHitGameObj.transform.position = Camera.main.ScreenToWorldPoint(center); //center;
         }
         private void OnTouchBtnSizeEnd(EventContext context)
         {
@@ -411,7 +427,7 @@ namespace GFGGame
                 {
                     ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(key);
                     int defaultLayer = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType).defaultLayer;
-                    AddSceneItem(itemCfg, true, defaultLayer);
+                    AddSceneItem(itemCfg, true);
                 }
             }
         }
@@ -440,44 +456,75 @@ namespace GFGGame
         }
 
 
-        private void AddSceneItem(ItemCfg itemCfg, bool isDefaultLayer, int layer)
+        private void AddSceneItem(ItemCfg itemCfg, bool isDefaultLayer)
         {
-
-            maxLayer = layer < maxLayer ? maxLayer : layer;
-            if (!isDefaultLayer)
-            {
-                maxLayer = layer + 1;
-                layer = maxLayer;
-            }
             int index = 0;
 
             GameObject parentGameObj;
-            if (itemCfg.resLayer1 > 0)
+            if (itemCfg.resLayer2 > 0)
             {
                 if (!isDefaultLayer)
                 {
                     PhotographDataManager.Instance.AddEquipItem(_equipSceneData, itemCfg.id, out _equipSceneData);
                 }
                 index = _equipSceneData[itemCfg.id].Count - 1;
-
-                parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 0));
-                SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer1);
+                parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 1));
+                SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer2);
                 SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
-                spr.sortingOrder = layer;
+
+                ItemTypeCfg itemTypeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
+                // spr.sortingOrder = isDefaultLayer ? itemTypeCfg.specialLayer : maxLayer + 1;
+
+
+                int layer = isDefaultLayer ? itemTypeCfg.specialLayer : maxLayer + 1;
+                for (int i = 0; i < parentGameObj.transform.childCount; i++)
+                {
+                    Transform obj = parentGameObj.transform.GetChild(i);
+                    string[] strs = obj.name.Split('_');
+                    if (strs.Length > 1 && strs[1] == "eff")
+                    {
+                        DressUpUtil.SetParticleSortingOrder(obj.gameObject, layer);
+                    }
+                    else
+                    {
+                        obj.GetComponent<SpriteRenderer>().sortingOrder = layer;
+
+                    }
+                }
+                maxLayer = layer;
 
             }
-            if (itemCfg.resLayer2 > 0)
+            if (itemCfg.resLayer1 > 0)
             {
                 if (!isDefaultLayer)
                 {
                     PhotographDataManager.Instance.AddEquipItem(_equipSceneData, itemCfg.id, out _equipSceneData);
                 }
                 index = _equipSceneData[itemCfg.id].Count - 1;
-                parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 1));
-                SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer2);
+
+                parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 0));
+                SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer1);
                 SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
-                spr.sortingOrder = layer;
+                ItemTypeCfg itemTypeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
+
+                int layer = isDefaultLayer ? itemTypeCfg.specialLayer : maxLayer + 1;
+                for (int i = 0; i < parentGameObj.transform.childCount; i++)
+                {
+                    Transform obj = parentGameObj.transform.GetChild(i);
+                    string[] strs = obj.name.Split('_');
+                    if (strs.Length > 1 && strs[1] == "eff")
+                    {
+                        DressUpUtil.SetParticleSortingOrder(obj.gameObject, layer);
+                    }
+                    else
+                    {
+                        obj.GetComponent<SpriteRenderer>().sortingOrder = layer;
+                    }
+                }
+                maxLayer = layer;
+
             }
+
         }