Browse Source

Merge branch 'master' of http://10.108.64.190:3000/gfg/client

zhaoyang 2 years ago
parent
commit
b4b131513d

+ 59 - 54
GameClient/Assets/Game/HotUpdate/DressUp/DressUpUtil.cs

@@ -2,6 +2,7 @@ using UnityEngine;
 using Live2D.Cubism.Rendering;
 using System.IO;
 using FairyGUI;
+using UnityEngine.Rendering;
 
 namespace GFGGame
 {
@@ -16,7 +17,7 @@ namespace GFGGame
         private const string BODY_EFFECT_OBJ_NAME = "Body_eff";
         public const string FORMAT_SPRITE_NAME = "T{0}_s{1}";
         private const string FORMAT_ANIMATION_NAME = "T{0}_a{1}";
-        private const string FORMAT_EFFECT_OBJ_NAME = "T{0}_eff";
+        private const string FORMAT_EFFECT_OBJ_NAME = "T{0}_e{1}";
 
         public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
         {
@@ -79,18 +80,6 @@ namespace GFGGame
                     }
                 }
 
-                //特效
-                if (itemCfg.effLayer > 0)
-                {
-                    var objName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType);
-                    ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
-                    int sortingOrder = typeCfg.defaultLayer;
-                    if (itemCfg.effLayer == 2)
-                    {
-                        sortingOrder = typeCfg.specialLayer;
-                    }
-                    AddEffectObj(itemCfg.res, objName, parentObj, sortingOrder);
-                }
             }
         }
 
@@ -120,7 +109,9 @@ namespace GFGGame
                     spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, 1);
                     TryClearSpriteObj(parentObj, spritObjName);
                     aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, 1);
-                    TryRemoveAnimationObj(parentObj, aniObjName);
+                    TryRemoveObj(parentObj, aniObjName);
+                    aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, 1);
+                    TryRemoveObj(parentObj, aniObjName);
                 }
                 //特殊层
                 if (!string.IsNullOrEmpty(itemCfg.resLayer2))
@@ -128,7 +119,9 @@ namespace GFGGame
                     spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, 2);
                     TryClearSpriteObj(parentObj, spritObjName);
                     aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, 2);
-                    TryRemoveAnimationObj(parentObj, aniObjName);
+                    TryRemoveObj(parentObj, aniObjName);
+                    aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, 2);
+                    TryRemoveObj(parentObj, aniObjName);
                 }
                 //第三层
                 if (!string.IsNullOrEmpty(itemCfg.resLayer3))
@@ -136,18 +129,9 @@ namespace GFGGame
                     spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, 3);
                     TryClearSpriteObj(parentObj, spritObjName);
                     aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, 3);
-                    TryRemoveAnimationObj(parentObj, aniObjName);
-                }
-
-                //特效
-                if (itemCfg.effLayer > 0)
-                {
-                    string effObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType);
-                    var effTf = parentObj.transform.Find(effObjName);
-                    if (effTf != null)
-                    {
-                        GameObject.DestroyImmediate(effTf.gameObject);
-                    }
+                    TryRemoveObj(parentObj, aniObjName);
+                    aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, 3);
+                    TryRemoveObj(parentObj, aniObjName);
                 }
             }
         }
@@ -183,7 +167,8 @@ namespace GFGGame
 
             //清理旧的
             TryClearSpriteObj(parentObj, BODY_SPRITE_NAME);
-            TryRemoveAnimationObj(parentObj, BODY_ANIMATION_NAME);
+            TryRemoveObj(parentObj, BODY_ANIMATION_NAME);
+            TryRemoveObj(parentObj, BODY_EFFECT_OBJ_NAME);
 
             if (isAni)
             {
@@ -194,14 +179,9 @@ namespace GFGGame
                 AddSpriteObj(res, "png", BODY_SPRITE_NAME, parentObj, 0, needSetMask);
             }
             //特效
-            var tf = parentObj.transform.Find(BODY_EFFECT_OBJ_NAME);
-            if (tf != null)
-            {
-                GameObject.DestroyImmediate(tf.gameObject);
-            }
             if (!string.IsNullOrEmpty(effRes))
             {
-                AddEffectObj(effRes, BODY_EFFECT_OBJ_NAME, parentObj, 0);
+                TryAddEffectObj(effRes, BODY_EFFECT_OBJ_NAME, parentObj, 0);
             }
         }
 
@@ -247,42 +227,53 @@ namespace GFGGame
             var spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, layerId);
             TryClearSpriteObj(parentObj, spritObjName);
             var aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, layerId);
-            TryRemoveAnimationObj(parentObj, aniObjName);
+            TryRemoveObj(parentObj, aniObjName);
             string ext = ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType);
             //这里需要先添加静态图,防止加载动画有延迟,出现光头
-            GameObject gameObject = AddSpriteObj(res, ext, spritObjName, parentObj, sortingOrder, needSetMask);
+            GameObject spriteObj = AddSpriteObj(res, ext, spritObjName, parentObj, sortingOrder, needSetMask);
 
-            if (itemCfg.isAni > 0 && showAni)
+            if (showAni)
             {
-                AddAnimationObj(res, aniObjName, parentObj, sortingOrder);
-                Timers.inst.Add(0.03f, 1, (obj) =>
+                var aniObj = AddAnimationObj(res, aniObjName, parentObj, sortingOrder);
+                if(aniObj != null && spriteObj != null)
                 {
-                    if (parentObj != null && parentObj.transform != null)
+                    Timers.inst.Add(0.03f, 1, (obj) =>
                     {
-                        Transform tf = parentObj.transform.Find(spritObjName);
-                        if (tf != null && tf.gameObject != null && tf.gameObject.activeInHierarchy)
+                        if (parentObj != null && parentObj.transform != null)
                         {
-                            var assetDisposer = tf.gameObject.GetComponent<AssetReleaser>();
-                            if (assetDisposer != null)
+                            Transform tf = parentObj.transform.Find(spritObjName);
+                            if (tf != null && tf.gameObject != null && tf.gameObject.activeInHierarchy)
                             {
-                                if (!string.IsNullOrEmpty(assetDisposer.resPath))
+                                var assetDisposer = tf.gameObject.GetComponent<AssetReleaser>();
+                                if (assetDisposer != null)
                                 {
-                                    string resPath = ResPathUtil.GetDressUpPath(res, ext);
-                                    if (assetDisposer.resPath == resPath)
+                                    if (!string.IsNullOrEmpty(assetDisposer.resPath))
                                     {
-                                        TryClearSpriteObj(parentObj, spritObjName);
+                                        string resPath = ResPathUtil.GetDressUpPath(res, ext);
+                                        if (assetDisposer.resPath == resPath)
+                                        {
+                                            TryClearSpriteObj(parentObj, spritObjName);
+                                        }
                                     }
                                 }
                             }
                         }
-                    }
-                });
+                    });
+                }
             }
+
+            aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, layerId);
+            TryRemoveObj(parentObj, aniObjName);
+            TryAddEffectObj(itemCfg.res, aniObjName, parentObj, sortingOrder);
         }
 
         private static GameObject AddSpriteObj(string res, string ext, string objName, GameObject parentObj, int sortingOrder, bool needSetMask)
         {
             string resPath = ResPathUtil.GetDressUpPath(res, ext);
+            if(!VEngine.Versions.Contains(resPath))
+            {
+                return null;
+            }
             SpriteRenderer spr = null;
             var gameObj = parentObj.transform.Find(objName)?.gameObject;
             if (gameObj == null)
@@ -355,6 +346,10 @@ namespace GFGGame
         private static GameObject AddAnimationObj(string res, string objName, GameObject parentObj, int sortingOrder)
         {
             string resPath = ResPathUtil.GetDressUpAnimationPath(res);
+            if (!VEngine.Versions.Contains(resPath))
+            {
+                return null;
+            }
             var prefab = GFGAsset.Load<GameObject>(resPath);
             var gameObj = GameObject.Instantiate(prefab);
             AddAssetReleaser(gameObj, resPath);
@@ -377,7 +372,7 @@ namespace GFGGame
             return gameObj;
         }
 
-        private static void TryRemoveAnimationObj(GameObject parentObj, string aniObjName)
+        private static void TryRemoveObj(GameObject parentObj, string aniObjName)
         {
             if (parentObj == null)
             {
@@ -407,16 +402,25 @@ namespace GFGGame
             return gameObj;
         }
 
-        private static GameObject AddEffectObj(string res, string objName, GameObject parentObj, int sortingOrder)
+        private static void TryAddEffectObj(string res, string objName, GameObject parentObj, int sortingOrder)
         {
             var resPath = ResPathUtil.GetDressUpEffectPath(res);
+            if (!VEngine.Versions.Contains(resPath))
+            {
+                return;
+            }
             GameObject effPre = GFGAsset.Load<GameObject>(resPath);
             var gameObj = GameObject.Instantiate(effPre);
             AddAssetReleaser(gameObj, resPath);
             gameObj.transform.SetParent(parentObj.transform);
             gameObj.name = objName;
-            SetParticleSortingOrder(gameObj, sortingOrder);
-            return gameObj;
+            var sortingGroup = gameObj.transform.GetComponent<SortingGroup>();
+            if (sortingGroup == null)
+            {
+                sortingGroup = gameObj.AddComponent<SortingGroup>();
+            }
+            sortingGroup.sortingOrder = sortingOrder + 1;//特效层默认高一个层级
+            //SetParticleSortingOrder(gameObj, sortingOrder + 1);//特效层默认高一个层级
         }
 
         public static void LoadSpritePos(string res, out float tx, out float ty)
@@ -441,6 +445,7 @@ namespace GFGGame
 
         public static void SetParticleSortingOrder(GameObject gameObj, int sortingOrder, bool isAdd = false)
         {
+            
             ParticleSystem[] particles = gameObj.transform.GetComponentsInChildren<ParticleSystem>();
             for (int i = 0; i < particles.Length; i++)
             {

BIN
GameClient/Assets/ResIn/Config/excelConfig.sqlite.bytes