浏览代码

拍照报错

zhaoyang 2 年之前
父节点
当前提交
378ba6aa3b

+ 26 - 17
GameClient/Assets/Game/HotUpdate/Data/PhotographSceneManager.cs

@@ -14,7 +14,7 @@ namespace GFGGame
             string resPath = ResPathUtil.GetDressUpPath(itemCfg.res, ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType));
             SetSpriteRendererToTransform(tf, resPath);
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
-            spr.sortingOrder = -200;
+            spr.sortingOrder = -400;
             SetBoxCollider2DToGameObject(tf.gameObject);
         }
 
@@ -83,28 +83,37 @@ namespace GFGGame
             string resPath = ResPathUtil.GetDressUpAnimationPath(res);
             if (VEngine.Versions.Contains(resPath))
             {
-                gameObject.GetComponent<SpriteRenderer>().enabled = false;
+                SpriteRenderer spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
+                // if (spriteRenderer == null)
+                // {
+                //     spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
+                //     Collider2D collider2D = gameObject.GetComponent<Collider2D>();
+                //     spriteRenderer.size = collider2D.bounds.size;
+                //     // spriteRenderer.
+                //     spriteRenderer.enabled = false;
+                // }
+                if (spriteRenderer != null) spriteRenderer.enabled = false;
                 DressUpUtil.AddItem(itemId, sceneObj, false, true, gameObject, resLayer);
                 gameObject.transform.localPosition = Vector3.zero;
             }
             PhotographUtil.Instance.SetGameObjectCenter(parentGameObj);
         }
 
-        private void AddOnlyEffItemToScene(GameObject sceneObj, GameObject parentGameObj, int itemId, int resLayer)
-        {
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
-            parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
-
-            GameObject gameObject = new GameObject(itemCfg.id.ToString());
-            gameObject.transform.SetParent(parentGameObj.transform);
-            string res = DressUpUtil.GetDressUpItemLayerRes(itemCfg, resLayer);
-            string resPath = ResPathUtil.GetDressUpPath(res);
-            SetSpriteRendererToTransform(gameObject.transform, resPath);
-            SetBoxCollider2DToGameObject(gameObject);
-            gameObject.GetComponent<SpriteRenderer>().enabled = false;
-            DressUpUtil.AddItem(itemId, sceneObj, false, true, parentGameObj, resLayer);
-            PhotographUtil.Instance.SetGameObjectCenter(parentGameObj);
-        }
+        // private void AddOnlyEffItemToScene(GameObject sceneObj, GameObject parentGameObj, int itemId, int resLayer)
+        // {
+        //     ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
+        //     parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
+
+        //     GameObject gameObject = new GameObject(itemCfg.id.ToString());
+        //     gameObject.transform.SetParent(parentGameObj.transform);
+        //     string res = DressUpUtil.GetDressUpItemLayerRes(itemCfg, resLayer);
+        //     string resPath = ResPathUtil.GetDressUpPath(res);
+        //     SetSpriteRendererToTransform(gameObject.transform, resPath);
+        //     SetBoxCollider2DToGameObject(gameObject);
+        //     gameObject.GetComponent<SpriteRenderer>().enabled = false;
+        //     DressUpUtil.AddItem(itemId, sceneObj, false, true, parentGameObj, resLayer);
+        //     PhotographUtil.Instance.SetGameObjectCenter(parentGameObj);
+        // }
 
         //拍照角色
         private void UpdatePhotographBody(GameObject sceneObj, GameObject parentObj)

+ 61 - 18
GameClient/Assets/Game/HotUpdate/Data/PhotographUtil.cs

@@ -23,7 +23,7 @@ namespace GFGGame
             for (int i = 0; i < boxColliders.Length; i++)
             {
                 Vector2 pos = boxColliders[i].transform.localPosition;
-                Vector2 size = boxColliders[i].size * boxColliders[i].transform.localScale;
+                Vector2 size = boxColliders[i].size * parentObj.transform.parent.localScale;
 
                 right = Math.Max(size.x / 2 + pos.x, right);
                 left = Math.Min(pos.x - size.x / 2, left);
@@ -116,10 +116,16 @@ namespace GFGGame
 
         public void SetLayer(GameObject hitGameObj, string state)
         {
+            if (hitGameObj == null) return;
             List<GameObject> itemGameObjs = PhotographDataManager.Instance.itemGameObjs;
             if (state != "refresh")
             {
                 int index = itemGameObjs.IndexOf(hitGameObj);
+                if (index < 0)
+                {
+                    index = itemGameObjs.IndexOf(hitGameObj.transform.parent.gameObject);
+                }
+
                 if (index == itemGameObjs.Count - 1 && state == "top") return;
                 if (state != "top")
                 {
@@ -164,7 +170,7 @@ namespace GFGGame
 
             for (int i = 0; i < itemGameObjs.Count; i++)
             {
-                ChangeLayer(itemGameObjs[i], i * 300, state);
+                ChangeLayer(itemGameObjs[i], i * 400, state);
             }
 
         }
@@ -205,6 +211,23 @@ namespace GFGGame
                     maxLayer = sortingOrder;
                 }
             }
+            Collider2D[] collider = parentObj.GetComponentsInChildren<Collider2D>();//选中道具可能含有静态图
+            for (int i = 0; i < collider.Length; i++)
+            {
+                ParticleSystem[] particles = collider[i].gameObject.GetComponentsInChildren<ParticleSystem>();
+                for (int j = 0; j < particles.Length; j++)//静态图可能是动画
+                {
+                    var renderer = particles[j].GetComponent<Renderer>();
+                    if (renderer != null)
+                    {
+                        renderer.sortingOrder = renderer.sortingOrder + changeLayer;
+                        if (maxLayer < renderer.sortingOrder)
+                        {
+                            maxLayer = renderer.sortingOrder;
+                        }
+                    }
+                }
+            }
 
 
             for (int i = 0; i < parentObj.transform.childCount; i++)//选中道具可能含有特效
@@ -223,6 +246,10 @@ namespace GFGGame
                 if (render != null && render.gameObject.activeSelf == true)
                 {
                     render.SortingOrder = render.SortingOrder + changeLayer;
+                    if (maxLayer < render.SortingOrder)
+                    {
+                        maxLayer = render.SortingOrder;
+                    }
                 }
             }
         }
@@ -237,15 +264,23 @@ namespace GFGGame
                 if (sp && layer < sp.sortingOrder)
                 {
                     layer = sp.sortingOrder;
-
-                    ParticleSystem[] particles = sp.gameObject.GetComponentsInChildren<ParticleSystem>();
-                    for (int j = 0; j < particles.Length; j++)
+                }
+                ParticleSystem[] particles = gameObject.GetComponentsInChildren<ParticleSystem>();
+                for (int j = 0; j < particles.Length; j++)
+                {
+                    var renderer = particles[j].GetComponent<Renderer>();
+                    if (renderer != null && layer < renderer.sortingOrder)
                     {
-                        var renderer = particles[j].GetComponent<Renderer>();
-                        if (renderer != null && layer < renderer.sortingOrder)
-                        {
-                            layer = renderer.sortingOrder;
-                        }
+                        layer = renderer.sortingOrder;
+                    }
+                }
+                CubismRenderController[] cubismRenders = parentObj.GetComponentsInChildren<CubismRenderController>();
+                for (int j = 0; j < cubismRenders.Length; j++)
+                {
+                    CubismRenderController render = cubismRenders[j];
+                    if (render != null && render.gameObject.activeSelf == true && layer < render.SortingOrder)
+                    {
+                        layer = render.SortingOrder;
                     }
                 }
             }
@@ -263,15 +298,23 @@ namespace GFGGame
                 if (sp && sp.sortingOrder < layer)
                 {
                     layer = sp.sortingOrder;
-
-                    ParticleSystem[] particles = sp.gameObject.GetComponentsInChildren<ParticleSystem>();
-                    for (int j = 0; j < particles.Length; j++)
+                }
+                ParticleSystem[] particles = gameObject.GetComponentsInChildren<ParticleSystem>();
+                for (int j = 0; j < particles.Length; j++)
+                {
+                    var renderer = particles[j].GetComponent<Renderer>();
+                    if (renderer != null && renderer.sortingOrder < layer)
                     {
-                        var renderer = particles[j].GetComponent<Renderer>();
-                        if (renderer != null && renderer.sortingOrder < layer)
-                        {
-                            layer = renderer.sortingOrder;
-                        }
+                        layer = renderer.sortingOrder;
+                    }
+                }
+                CubismRenderController[] cubismRenders = parentObj.GetComponentsInChildren<CubismRenderController>();
+                for (int j = 0; j < cubismRenders.Length; j++)
+                {
+                    CubismRenderController render = cubismRenders[j];
+                    if (render != null && render.gameObject.activeSelf == true && render.SortingOrder < layer)
+                    {
+                        layer = render.SortingOrder;
                     }
                 }
             }