guodong 1 жил өмнө
parent
commit
5d87166adb
41 өөрчлөгдсөн 1030 нэмэгдсэн , 248 устгасан
  1. 2 0
      .gitignore
  2. 14 1
      GameClient/Assets/AssetBundleCollectorSetting.asset
  3. 6 0
      GameClient/Assets/Editor/ToolsMenu.cs
  4. 29 0
      GameClient/Assets/Game/HotUpdate/Assets/AssetReleaserHelper.cs
  5. 11 0
      GameClient/Assets/Game/HotUpdate/Assets/AssetReleaserHelper.cs.meta
  6. 16 8
      GameClient/Assets/Game/HotUpdate/Assets/PrefabManager.cs
  7. 33 0
      GameClient/Assets/Game/HotUpdate/Assets/SpriteHelper.cs
  8. 11 0
      GameClient/Assets/Game/HotUpdate/Assets/SpriteHelper.cs.meta
  9. 2 1
      GameClient/Assets/Game/HotUpdate/Controller/GameController.cs
  10. 2 7
      GameClient/Assets/Game/HotUpdate/Data/PhotographSceneManager.cs
  11. 56 0
      GameClient/Assets/Game/HotUpdate/DressUp/DressUpLayerHandler.cs
  12. 11 0
      GameClient/Assets/Game/HotUpdate/DressUp/DressUpLayerHandler.cs.meta
  13. 83 93
      GameClient/Assets/Game/HotUpdate/DressUp/DressUpObj.cs
  14. 50 68
      GameClient/Assets/Game/HotUpdate/DressUp/DressUpUtil.cs
  15. 24 45
      GameClient/Assets/Game/HotUpdate/DressUp/SceneController.cs
  16. 4 4
      GameClient/Assets/Game/HotUpdate/FairyGUI/GFGUIPackage.cs
  17. 14 4
      GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs
  18. 0 0
      GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs.meta
  19. 8 0
      GameClient/Assets/Game/HotUpdate/Live2d.meta
  20. 7 0
      GameClient/Assets/Game/HotUpdate/Live2d/Live2dAnimationManager.cs
  21. 11 0
      GameClient/Assets/Game/HotUpdate/Live2d/Live2dAnimationManager.cs.meta
  22. 8 0
      GameClient/Assets/Game/HotUpdate/OperationSystem.meta
  23. 105 0
      GameClient/Assets/Game/HotUpdate/OperationSystem/AsyncOperationBase.cs
  24. 11 0
      GameClient/Assets/Game/HotUpdate/OperationSystem/AsyncOperationBase.cs.meta
  25. 10 0
      GameClient/Assets/Game/HotUpdate/OperationSystem/EOperationStatus.cs
  26. 11 0
      GameClient/Assets/Game/HotUpdate/OperationSystem/EOperationStatus.cs.meta
  27. 107 0
      GameClient/Assets/Game/HotUpdate/OperationSystem/OperationSystem.cs
  28. 11 0
      GameClient/Assets/Game/HotUpdate/OperationSystem/OperationSystem.cs.meta
  29. 1 1
      GameClient/Assets/Game/HotUpdate/Utils/ResPathUtil.cs
  30. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Card/CardFosterView.cs
  31. 1 1
      GameClient/Assets/Game/Launcher/FairyGUI/GFGGLoader.cs
  32. 9 0
      GameClient/Assets/Game/Launcher/GameLauncher.cs
  33. 10 4
      GameClient/Assets/Game/Launcher/HotUpdateProxy/HotUpdateCodeLoader.cs
  34. 45 0
      GameClient/Assets/ResIn/Prefab/HotUpdateDriver.prefab
  35. 7 0
      GameClient/Assets/ResIn/Prefab/HotUpdateDriver.prefab.meta
  36. 8 0
      GameClient/Assets/ResIn/Scene.meta
  37. 273 0
      GameClient/Assets/ResIn/Scene/HotUpdate.unity
  38. 7 0
      GameClient/Assets/ResIn/Scene/HotUpdate.unity.meta
  39. 1 0
      GameClient/Assets/YooAsset/Editor/GFGAsset/Collect/AssetBundleHelper.cs
  40. 1 1
      GameClient/Assets/YooAsset/Runtime/GFG/YooAssetsExtensionGFG.cs
  41. 9 9
      GameClient/UserSettings/EditorUserSettings.asset

+ 2 - 0
.gitignore

@@ -36,3 +36,5 @@
 /GameClient/Assets/StreamingAssets/build_info.meta
 /GameClient/Assets/StreamingAssets/build_info.meta
 /FGUIProject
 /FGUIProject
 /GameClient/yoo
 /GameClient/yoo
+/GameClient/Assets/StreamingAssets/yoo.meta
+/GameClient/Assets/StreamingAssets/yoo

+ 14 - 1
GameClient/Assets/AssetBundleCollectorSetting.asset

@@ -168,4 +168,17 @@ MonoBehaviour:
         PackRuleName: PackTopDirectory
         PackRuleName: PackTopDirectory
         FilterRuleName: CollectAll
         FilterRuleName: CollectAll
         AssetTags: 
         AssetTags: 
-        UserData: 
+        UserData: 
+    - GroupName: scene
+      GroupDesc: 
+      AssetTags: 
+      ActiveRuleName: EnableGroup
+      Collectors:
+      - CollectPath: Assets/ResIn/Scene
+        CollectorGUID: 95e5901e274f74f419ed53268ff767ba
+        CollectorType: 0
+        AddressRuleName: AddressByFileName
+        PackRuleName: PackSeparately
+        FilterRuleName: CollectAll
+        AssetTags: 
+        UserData: 

+ 6 - 0
GameClient/Assets/Editor/ToolsMenu.cs

@@ -359,5 +359,11 @@ namespace GFGEditor
         {
         {
             PlayerPrefs.DeleteAll();
             PlayerPrefs.DeleteAll();
         }
         }
+
+        [MenuItem("Tools/Build/BuildHotUpdateDll")]
+        public static void BuildHotUpdateDll()
+        {
+            BuildDllHelper.BuildHotUpdateDll();
+        }
     }
     }
 }
 }

+ 29 - 0
GameClient/Assets/Game/HotUpdate/Assets/AssetReleaserHelper.cs

@@ -0,0 +1,29 @@
+using UniFramework.Pooling;
+using UnityEngine;
+using YooAsset;
+
+namespace GFGGame
+{
+    public static class AssetReleaserHelper
+    {
+        public static void AddReleaserToSpawnObj(GameObject gameObject, string resPath, SpawnHandle handle)
+        {
+            var assetReleaser = gameObject.GetComponent<AssetReleaser>();
+            if (assetReleaser == null)
+            {
+                assetReleaser = gameObject.AddComponent<AssetReleaser>();
+            }
+            assetReleaser.SetSpawn(resPath, handle);
+        }
+
+        public static void AddReleaserToInstantiateObj(GameObject gameObject, string resPath, AssetOperationHandle handle)
+        {
+            AssetReleaser assetReleaser = gameObject.GetComponent<AssetReleaser>();
+            if (assetReleaser == null)
+            {
+                assetReleaser = gameObject.AddComponent<AssetReleaser>();
+            }
+            assetReleaser.SetRes(resPath, handle);
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Assets/AssetReleaserHelper.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3a49f7ce424b901468b27c0395bcf908
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 8
GameClient/Assets/Game/HotUpdate/Assets/PrefabManager.cs

@@ -1,7 +1,7 @@
 using UniFramework.Pooling;
 using UniFramework.Pooling;
 using UnityEngine;
 using UnityEngine;
-using System.Collections.Generic;
 using YooAsset;
 using YooAsset;
+using System.Threading.Tasks;
 
 
 namespace GFGGame
 namespace GFGGame
 {
 {
@@ -20,16 +20,25 @@ namespace GFGGame
             if (!_entitySpawner.IsGameObjectPoolExisted(resPath))
             if (!_entitySpawner.IsGameObjectPoolExisted(resPath))
             {
             {
                 // 创建游戏对象池,销毁时间单位为秒
                 // 创建游戏对象池,销毁时间单位为秒
-                _entitySpawner.CreateGameObjectPoolAsync(resPath, false, 0, 1, 60);
+                _entitySpawner.CreateGameObjectPoolSync(resPath, false, 0, 1, 60);
             }
             }
 
 
             var handle = _entitySpawner.SpawnSync(resPath);
             var handle = _entitySpawner.SpawnSync(resPath);
-            var assetReleaser = handle.GameObj.GetComponent<AssetReleaser>();
-            if (assetReleaser == null)
+            AssetReleaserHelper.AddReleaserToSpawnObj(handle.GameObj, resPath, handle);
+            return handle.GameObj;
+        }
+
+        public async Task<GameObject> SpawnASync(string resPath)
+        {
+            if (!_entitySpawner.IsGameObjectPoolExisted(resPath))
             {
             {
-                assetReleaser = handle.GameObj.AddComponent<AssetReleaser>();
+                // 创建游戏对象池,销毁时间单位为秒
+                _entitySpawner.CreateGameObjectPoolSync(resPath, false, 0, 1, 60);
             }
             }
-            assetReleaser.SetSpawn(resPath, handle);
+
+            var handle = _entitySpawner.SpawnAsync(resPath);
+            await handle.Task;
+            AssetReleaserHelper.AddReleaserToSpawnObj(handle.GameObj, resPath, handle);
             return handle.GameObj;
             return handle.GameObj;
         }
         }
 
 
@@ -37,8 +46,7 @@ namespace GFGGame
         {
         {
              AssetOperationHandle handle = YooAssets.LoadAssetSync<GameObject>(resPath);
              AssetOperationHandle handle = YooAssets.LoadAssetSync<GameObject>(resPath);
             GameObject gameObject = handle.InstantiateSync();
             GameObject gameObject = handle.InstantiateSync();
-            AssetReleaser assetReleaser = gameObject.AddComponent<AssetReleaser>();
-            assetReleaser.SetRes(resPath, handle);
+            AssetReleaserHelper.AddReleaserToInstantiateObj(gameObject, resPath, handle);
             return gameObject;
             return gameObject;
         }
         }
 
 

+ 33 - 0
GameClient/Assets/Game/HotUpdate/Assets/SpriteHelper.cs

@@ -0,0 +1,33 @@
+using UnityEngine;
+using YooAsset;
+
+namespace GFGGame
+{
+    public static class SpriteHelper
+    {
+        /// <summary>
+        /// 移除的时候请用RemoveSpriteFrom,否则不会释放资源
+        /// </summary>
+        /// <param name="spr"></param>
+        /// <param name="resPath"></param>
+        public static void AddSpriteTo(SpriteRenderer spr, string resPath)
+        {
+            RemoveSpriteFrom(spr);
+            var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
+            Sprite sp = handle.AssetObject as Sprite;
+            GameObject gameObject = spr.gameObject;
+            AssetReleaserHelper.AddReleaserToInstantiateObj(gameObject, resPath, handle);
+            spr.sprite = sp;
+        }
+
+        public static void RemoveSpriteFrom(SpriteRenderer spr)
+        {
+            spr.sprite = null;
+            AssetReleaser assetReleaser =  spr.gameObject.GetComponent<AssetReleaser>();
+            if(assetReleaser != null)
+            {
+                GameObject.Destroy(assetReleaser);
+            }
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Assets/SpriteHelper.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: afd3d1ebb268b184abe8eab3a64c043d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 1
GameClient/Assets/Game/HotUpdate/Controller/GameController.cs

@@ -50,7 +50,8 @@ namespace GFGGame
                 GameConfig.InitData(data);
                 GameConfig.InitData(data);
                 //显示登录
                 //显示登录
                 LoginController.ShowLogin();
                 LoginController.ShowLogin();
-                //ItemCfgArray.Instance.GetAllDataAsync();
+                //_ = ItemCfgArray.Instance.GetAllDataAsync();
+                InitAllCfgsCache.Instance.InitAll();
             });
             });
         }
         }
 
 

+ 2 - 7
GameClient/Assets/Game/HotUpdate/Data/PhotographSceneManager.cs

@@ -71,7 +71,7 @@ namespace GFGGame
             string res = value == "n" ? itemCfg.res : string.Format("{0}_{1}", itemCfg.res, value);
             string res = value == "n" ? itemCfg.res : string.Format("{0}_{1}", itemCfg.res, value);
 
 
             string resPath = ResPathUtil.GetDressUpAnimationPath(res);
             string resPath = ResPathUtil.GetDressUpAnimationPath(res);
-            if (YooAssets.CheckDressUpResExist(resPath))
+            if (YooAssets.CheckResExist(resPath))
             {
             {
                 DressUpUtil.AddItem(itemId, sceneObj, false, true, parentGameObj, resLayer);
                 DressUpUtil.AddItem(itemId, sceneObj, false, true, parentGameObj, resLayer);
                 parentGameObj.transform.localPosition = Vector3.zero;
                 parentGameObj.transform.localPosition = Vector3.zero;
@@ -114,12 +114,7 @@ namespace GFGGame
                 tf.gameObject.AddComponent<SpriteRenderer>();
                 tf.gameObject.AddComponent<SpriteRenderer>();
                 spr = tf.GetComponent<SpriteRenderer>();
                 spr = tf.GetComponent<SpriteRenderer>();
             }
             }
-            //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-            var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-            Sprite sp = handle.AssetObject as Sprite;
-            DressUpUtil.AddAssetReleaser(tf.gameObject, resPath, handle);
-            if (sp == null) return;
-            spr.sprite = sp;
+            SpriteHelper.AddSpriteTo(spr, resPath);
             spr.size = spr.sprite.bounds.size;//将节点设置为原图大小
             spr.size = spr.sprite.bounds.size;//将节点设置为原图大小
 
 
         }
         }

+ 56 - 0
GameClient/Assets/Game/HotUpdate/DressUp/DressUpLayerHandler.cs

@@ -0,0 +1,56 @@
+using FairyGUI;
+using UnityEngine;
+
+namespace GFGGame
+{
+    public class DressUpLayerHandler : AsyncOperationBase
+    {
+        private ItemCfg itemCfg;
+        private bool showAni;
+        private int layerId;
+
+        public DressUpLayerHandler(ItemCfg itemCfg, GameObject parentObj, int layerId, bool needSetMask, bool showAni = true)
+        {
+            this.itemCfg = itemCfg;
+            this.showAni = showAni;
+            this.layerId = layerId;
+        }
+
+
+        public void UpdateView()
+        {
+
+        }
+
+        internal override void Start()
+        {
+            
+        }
+
+        internal override void Update()
+        {
+            
+        }
+
+
+        private void CheckRes()
+        {
+
+            ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
+
+            string res = ResPathUtil.GetDressUpItemLayerRes(itemCfg, layerId);
+            int sortingOrder = typeCfg.defaultLayer;
+            if (layerId == 2)
+            {
+                sortingOrder = typeCfg.specialLayer;
+            }
+            else if (layerId == 3)
+            {
+                sortingOrder = typeCfg.thirdlLayer;
+            }
+
+
+        }
+
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/DressUp/DressUpLayerHandler.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 993299cc05854eb4d92a800afd44bd0b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 83 - 93
GameClient/Assets/Game/HotUpdate/DressUp/DressUpObj.cs

@@ -3,6 +3,7 @@ using UnityEngine;
 using System;
 using System;
 using System.Linq;
 using System.Linq;
 using ET;
 using ET;
+using FairyGUI;
 
 
 namespace GFGGame
 namespace GFGGame
 {
 {
@@ -15,12 +16,6 @@ namespace GFGGame
 
 
     public class DressUpObj
     public class DressUpObj
     {
     {
-        private GameObject _sceneObj;
-        private GameObject _roleObj;
-        private bool _needSetMask;
-        private bool _showSceneType = true;
-        private bool _showBg = true;
-        private DressUpData _dressUpData = new DressUpData();
 
 
         public int bgId
         public int bgId
         {
         {
@@ -62,6 +57,7 @@ namespace GFGGame
             }
             }
         }
         }
 
 
+
         /// <summary>
         /// <summary>
         /// 
         /// 
         /// </summary>
         /// </summary>
@@ -92,6 +88,7 @@ namespace GFGGame
                 TakeOffAll();
                 TakeOffAll();
                 PutOnDressUpData(tempData);
                 PutOnDressUpData(tempData);
             }
             }
+            Timers.inst.AddUpdate(OnUpdate);
         }
         }
 
 
         public DressUpData DressUpDataClone()
         public DressUpData DressUpDataClone()
@@ -183,7 +180,7 @@ namespace GFGGame
                         {
                         {
                             TryCancelActionWhenPutOn(itemId);
                             TryCancelActionWhenPutOn(itemId);
                         }
                         }
-                        checkRemoveSameType(subType);
+                        CheckRemoveSameType(subType);
                         Add(itemId);
                         Add(itemId);
                     }
                     }
                 }
                 }
@@ -201,39 +198,6 @@ namespace GFGGame
             }
             }
         }
         }
 
 
-        public void checkRemoveSameType(int type)
-        {
-            int count = 0;
-            int firstTeshuId = 0;
-            for (int i = 0; i < _dressUpData.itemList.Count; i++)
-            {
-                int itemID = (int)_dressUpData.itemList[i];
-                int subType = ItemUtilCS.GetItemSubType(itemID);
-                if (subType == type
-                    || (type == ConstDressUpItemType.LIAN_YI_QUN && (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA))
-                    || (type == ConstDressUpItemType.SHANG_YI && subType == ConstDressUpItemType.LIAN_YI_QUN)
-                    || (type == ConstDressUpItemType.XIA_ZHUANG && subType == ConstDressUpItemType.LIAN_YI_QUN)
-                    || (type == ConstDressUpItemType.NEI_DA && subType == ConstDressUpItemType.LIAN_YI_QUN))
-                {
-                    Remove(itemID);
-                    i--;
-                }
-                if (subType > ConstDressUpItemType.TE_SHU)
-                {
-                    if (count == 0)
-                    {
-                        firstTeshuId = itemID;
-                    }
-                    count++;
-                }
-            }
-            if (type > ConstDressUpItemType.TE_SHU && count >= 3)
-            {
-                //特殊饰品最多穿三件,第四件会自动顶掉第一件
-                Remove(firstTeshuId);
-            }
-        }
-
         //脱掉所有换装,换成默认装(不处理背景)
         //脱掉所有换装,换成默认装(不处理背景)
         public void TakeOffAll(bool checkDefault = true)
         public void TakeOffAll(bool checkDefault = true)
         {
         {
@@ -268,20 +232,6 @@ namespace GFGGame
             }
             }
         }
         }
 
 
-        //当穿一件部件时检查是否需要取消动作,如果需要则取消该动作
-        public void TryCancelActionWhenPutOn(int itemId)
-        {
-            if (_dressUpData.actionId > 0)
-            {
-                bool replaceableByAction = SuitCfgArray.Instance.CheckItemReaplaceableOnAction(itemId, _dressUpData.actionId);
-                if (!replaceableByAction)
-                {
-                    CancelAction();
-                    _dressUpData.actionId = 0;
-                }
-            }
-        }
-
         /// <summary>
         /// <summary>
         /// 尝试穿戴配置套装
         /// 尝试穿戴配置套装
         /// </summary>
         /// </summary>
@@ -332,35 +282,6 @@ namespace GFGGame
             checkDefaultItem();
             checkDefaultItem();
         }
         }
 
 
-        //穿上一个动作
-        private void PutOnAction(int actionId)
-        {
-            bool hasSuitActionRes = DressUpMenuSuitDataManager.CheckSuitHasActionRes(actionId);
-            _dressUpData.actionId = actionId;
-            if(hasSuitActionRes)
-            {
-                foreach (int itemId in itemList)
-                {
-                    if(!DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemId))
-                    {
-                        //场景类型不受动作影响并且本来就有动画,对非场景类型处理
-                        AddOrRemove(itemId, false, DressUpOption.Remove);
-                        bool notInAction = SuitCfgArray.Instance.CheckItemNotInAction(itemId);
-                        if (notInAction)
-                        {
-                            //更新成动画模式
-                            AddOrRemove(itemId, false, DressUpOption.Add);
-                        }
-                    }
-                }
-            }
-            else
-            {
-                CancelAction(true);
-            }
-            checkDefaultItem();
-        }
-
         //取消动作
         //取消动作
         public void CancelAction(bool changeToStand = false)
         public void CancelAction(bool changeToStand = false)
         {
         {
@@ -454,24 +375,54 @@ namespace GFGGame
             checkDefaultItem();
             checkDefaultItem();
         }
         }
 
 
-        public int GetItemIdBuyType(int subType)
+        #region private
+        private GameObject _sceneObj;
+        private GameObject _roleObj;
+        private bool _needSetMask;
+        private bool _showSceneType = true;
+        private bool _showBg = true;
+        private DressUpData _dressUpData = new DressUpData();
+        //穿上一个动作
+        private void PutOnAction(int actionId)
         {
         {
-            for (int i = 0; i < itemList.Count; i++)
+            bool hasSuitActionRes = DressUpMenuSuitDataManager.CheckSuitHasActionRes(actionId);
+            _dressUpData.actionId = actionId;
+            if (hasSuitActionRes)
             {
             {
-                if (itemList[i] != ConstItemID.DEFULT_LIAN_YI_QUN && itemList[i] != ConstItemID.DEFULT_NEI_DA && itemList[i] != ConstItemID.DEFULT_XIA_ZHUANG && itemList[i] != ConstItemID.DEFULT_FA_XING)
+                foreach (int itemId in itemList)
                 {
                 {
-                    if (subType == ItemUtilCS.GetItemSubType(itemList[i]))
+                    if (!DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemId))
                     {
                     {
-                        return itemList[i];
+                        //场景类型不受动作影响并且本来就有动画,对非场景类型处理
+                        AddOrRemove(itemId, false, DressUpOption.Remove);
+                        bool notInAction = SuitCfgArray.Instance.CheckItemNotInAction(itemId);
+                        if (notInAction)
+                        {
+                            //更新成动画模式
+                            AddOrRemove(itemId, false, DressUpOption.Add);
+                        }
                     }
                     }
-
                 }
                 }
             }
             }
-            if (suitId > 0)
+            else
             {
             {
-                return suitId;
+                CancelAction(true);
+            }
+            checkDefaultItem();
+        }
+
+        //当穿一件部件时检查是否需要取消动作,如果需要则取消该动作
+        private void TryCancelActionWhenPutOn(int itemId)
+        {
+            if (_dressUpData.actionId > 0)
+            {
+                bool replaceableByAction = SuitCfgArray.Instance.CheckItemReaplaceableOnAction(itemId, _dressUpData.actionId);
+                if (!replaceableByAction)
+                {
+                    CancelAction();
+                    _dressUpData.actionId = 0;
+                }
             }
             }
-            return 0;
         }
         }
 
 
         private void Add(int itemId)
         private void Add(int itemId)
@@ -506,6 +457,39 @@ namespace GFGGame
             }
             }
         }
         }
 
 
+        private void CheckRemoveSameType(int type)
+        {
+            int count = 0;
+            int firstTeshuId = 0;
+            for (int i = 0; i < _dressUpData.itemList.Count; i++)
+            {
+                int itemID = (int)_dressUpData.itemList[i];
+                int subType = ItemUtilCS.GetItemSubType(itemID);
+                if (subType == type
+                    || (type == ConstDressUpItemType.LIAN_YI_QUN && (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA))
+                    || (type == ConstDressUpItemType.SHANG_YI && subType == ConstDressUpItemType.LIAN_YI_QUN)
+                    || (type == ConstDressUpItemType.XIA_ZHUANG && subType == ConstDressUpItemType.LIAN_YI_QUN)
+                    || (type == ConstDressUpItemType.NEI_DA && subType == ConstDressUpItemType.LIAN_YI_QUN))
+                {
+                    Remove(itemID);
+                    i--;
+                }
+                if (subType > ConstDressUpItemType.TE_SHU)
+                {
+                    if (count == 0)
+                    {
+                        firstTeshuId = itemID;
+                    }
+                    count++;
+                }
+            }
+            if (type > ConstDressUpItemType.TE_SHU && count >= 3)
+            {
+                //特殊饰品最多穿三件,第四件会自动顶掉第一件
+                Remove(firstTeshuId);
+            }
+        }
+
         //与身上的散件对比差异然后添加
         //与身上的散件对比差异然后添加
         private void CompareAndAddItemList(bool oldIsAction, bool newIsAction, List<int> targetItemList)
         private void CompareAndAddItemList(bool oldIsAction, bool newIsAction, List<int> targetItemList)
         {
         {
@@ -664,6 +648,12 @@ namespace GFGGame
             }
             }
         }
         }
 
 
-        
+        private void OnUpdate(object param)
+        {
+
+        }
+
+        #endregion
+
     }
     }
 }
 }

+ 50 - 68
GameClient/Assets/Game/HotUpdate/DressUp/DressUpUtil.cs

@@ -23,65 +23,61 @@ namespace GFGGame
         public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
         public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
         {
         {
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
-            if (itemCfg != null)
+            if (itemCfg == null) return;
+
+            if (parentObj == null)
             {
             {
-                // GameObject parentObj = null;
-                if (parentObj == null)
+                if (itemCfg.subType == ConstDressUpItemType.BEI_JING || DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(itemCfg.subType))
                 {
                 {
-                    if (itemCfg.subType == ConstDressUpItemType.BEI_JING || DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(itemCfg.subType))
-                    {
-                        parentObj = sceneObj;
-                    }
-                    else
-                    {
-                        //角色
-                        Transform role = sceneObj.transform.Find(ROLE_OBJ_NAME);
-                        parentObj = role.gameObject;
-                    }
+                    parentObj = sceneObj;
                 }
                 }
-                showAni = showAni || itemCfg.subType == ConstDressUpItemType.ZHUANG_RONG;
-                if (resLayer > 0)
+                else
                 {
                 {
-                    string layerName = "";
-                    switch (resLayer)
-                    {
-                        case 1:
-                            layerName = itemCfg.resLayer1;
-                            break;
-                        case 2:
-                            layerName = itemCfg.resLayer2;
-                            break;
-                        case 3:
-                            layerName = itemCfg.resLayer3;
-                            break;
-                    }
-                    if (!string.IsNullOrEmpty(layerName))
-                    {
-                        updateLayerRes(itemCfg, parentObj, resLayer, needSetMask, showAni);
-                    }
-                    // updateLayerRes(itemCfg, parentObj, resLayer, resLayer == 2, needSetMask, showAni);
+                    //角色
+                    Transform role = sceneObj.transform.Find(ROLE_OBJ_NAME);
+                    parentObj = role.gameObject;
                 }
                 }
-                else
+            }
+            showAni = showAni || itemCfg.subType == ConstDressUpItemType.ZHUANG_RONG;
+            if (resLayer > 0)
+            {
+                string layerName = "";
+                switch (resLayer)
+                {
+                    case 1:
+                        layerName = itemCfg.resLayer1;
+                        break;
+                    case 2:
+                        layerName = itemCfg.resLayer2;
+                        break;
+                    case 3:
+                        layerName = itemCfg.resLayer3;
+                        break;
+                }
+                if (!string.IsNullOrEmpty(layerName))
+                {
+                    updateLayerRes(itemCfg, parentObj, resLayer, needSetMask, showAni);
+                }
+            }
+            else
+            {
+                //普通层
+                if (!string.IsNullOrEmpty(itemCfg.resLayer1))
+                {
+                    updateLayerRes(itemCfg, parentObj, 1, needSetMask, showAni);
+                }
+                //第二层
+                if (!string.IsNullOrEmpty(itemCfg.resLayer2))
                 {
                 {
-                    //普通层
-                    if (!string.IsNullOrEmpty(itemCfg.resLayer1))
-                    {
-                        updateLayerRes(itemCfg, parentObj, 1, needSetMask, showAni);
-                    }
-                    //第二层
-                    if (!string.IsNullOrEmpty(itemCfg.resLayer2))
-                    {
-
-                        updateLayerRes(itemCfg, parentObj, 2, needSetMask, showAni);
-                    }
-                    //第三层
-                    if (!string.IsNullOrEmpty(itemCfg.resLayer3))
-                    {
 
 
-                        updateLayerRes(itemCfg, parentObj, 3, needSetMask, showAni);
-                    }
+                    updateLayerRes(itemCfg, parentObj, 2, needSetMask, showAni);
                 }
                 }
+                //第三层
+                if (!string.IsNullOrEmpty(itemCfg.resLayer3))
+                {
 
 
+                    updateLayerRes(itemCfg, parentObj, 3, needSetMask, showAni);
+                }
             }
             }
         }
         }
 
 
@@ -207,16 +203,6 @@ namespace GFGGame
             }
             }
         }
         }
 
 
-        public static void AddAssetReleaser(GameObject gameObj, string resPath, AssetOperationHandle handle)
-        {
-            var assetReleaser = gameObj.GetComponent<AssetReleaser>();
-            if (assetReleaser == null)
-            {
-                assetReleaser = gameObj.AddComponent<AssetReleaser>();
-            }
-            assetReleaser.SetRes(resPath, handle);
-        }
-
         private static void updateLayerRes(ItemCfg itemCfg, GameObject parentObj, int layerId, bool needSetMask, bool showAni = true)
         private static void updateLayerRes(ItemCfg itemCfg, GameObject parentObj, int layerId, bool needSetMask, bool showAni = true)
         {
         {
 
 
@@ -302,7 +288,7 @@ namespace GFGGame
 
 
         private static GameObject AddSpriteObj(string resPath, string ext, string objName, GameObject parentObj, int sortingOrder, bool needSetMask)
         private static GameObject AddSpriteObj(string resPath, string ext, string objName, GameObject parentObj, int sortingOrder, bool needSetMask)
         {
         {
-            if (!YooAssets.CheckDressUpResExist(resPath))
+            if (!YooAssets.CheckResExist(resPath))
             {
             {
                 return null;
                 return null;
             }
             }
@@ -326,11 +312,7 @@ namespace GFGGame
             float tx, ty;
             float tx, ty;
             LoadSpritePos(resPath, out tx, out ty);
             LoadSpritePos(resPath, out tx, out ty);
             gameObj.transform.localPosition = new Vector3(tx, ty, gameObj.transform.localPosition.z);
             gameObj.transform.localPosition = new Vector3(tx, ty, gameObj.transform.localPosition.z);
-            //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-            var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-            Sprite sp = handle.AssetObject as Sprite;
-            AddAssetReleaser(gameObj, resPath, handle);
-            spr.sprite = sp;
+            SpriteHelper.AddSpriteTo(spr, resPath);
             spr.sortingOrder = sortingOrder;
             spr.sortingOrder = sortingOrder;
 
 
             if (needSetMask)
             if (needSetMask)
@@ -460,7 +442,7 @@ namespace GFGGame
 
 
         public static GameObject CreateObj(string resPath)
         public static GameObject CreateObj(string resPath)
         {
         {
-            if (!YooAssets.CheckDressUpResExist(resPath))
+            if (!YooAssets.CheckResExist(resPath))
             {
             {
                 return null;
                 return null;
             }
             }
@@ -477,7 +459,7 @@ namespace GFGGame
             resPath = resPath.Substring(0, index) + ".bytes";
             resPath = resPath.Substring(0, index) + ".bytes";
             //resPath = resPath.Replace(".png", ".bytes");
             //resPath = resPath.Replace(".png", ".bytes");
             //resPath = resPath.Replace(".jpg", ".bytes");
             //resPath = resPath.Replace(".jpg", ".bytes");
-            if (YooAssets.CheckDressUpResExist(resPath))
+            if (YooAssets.CheckResExist(resPath))
             {
             {
                 //var asset = GFGAsset.Load<TextAsset>(resPath);
                 //var asset = GFGAsset.Load<TextAsset>(resPath);
                 var handle = YooAssets.LoadAssetSync<TextAsset>(resPath);
                 var handle = YooAssets.LoadAssetSync<TextAsset>(resPath);

+ 24 - 45
GameClient/Assets/Game/HotUpdate/DressUp/SceneController.cs

@@ -7,20 +7,20 @@ namespace GFGGame
 {
 {
     public class SceneController
     public class SceneController
     {
     {
-        public static void UpdateLoginScene(GameObject sceneObj)
-        {
-            //背景
-            Transform tf = sceneObj.transform.Find("Bg");
-            SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
-            var resPath = ResPathUtil.GetSceneBgPath("jhsy_bg");
-            //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-            var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-            Sprite sp = handle.AssetObject as Sprite;
-            DressUpUtil.AddAssetReleaser(tf.gameObject, resPath, handle);
-            spr.sprite = sp;
-            //角色
-            DressUpUtil.UpdateBody("ui_loginrole", sceneObj);
-        }
+        //public static void UpdateLoginScene(GameObject sceneObj)
+        //{
+        //    //背景
+        //    Transform tf = sceneObj.transform.Find("Bg");
+        //    SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
+        //    var resPath = ResPathUtil.GetSceneBgPath("jhsy_bg");
+        //    //Sprite sp = GFGAsset.Load<Sprite>(resPath);
+        //    var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
+        //    Sprite sp = handle.AssetObject as Sprite;
+        //    DressUpUtil.AddAssetReleaser(tf.gameObject, resPath, handle);
+        //    spr.sprite = sp;
+        //    //角色
+        //    DressUpUtil.UpdateBody("ui_loginrole", sceneObj);
+        //}
 
 
         public static void UpdateMainScene(GameObject sceneObj)
         public static void UpdateMainScene(GameObject sceneObj)
         {
         {
@@ -28,20 +28,12 @@ namespace GFGGame
             Transform tf = sceneObj.transform.Find("Bg");
             Transform tf = sceneObj.transform.Find("Bg");
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             var resPath = ResPathUtil.GetBgImgPath("zjm_1");
             var resPath = ResPathUtil.GetBgImgPath("zjm_1");
-            //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-            var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-            Sprite sp = handle.AssetObject as Sprite;
-            DressUpUtil.AddAssetReleaser(tf.gameObject, resPath, handle);
-            spr.sprite = sp;
+            SpriteHelper.AddSpriteTo(spr, resPath);
             //背景1
             //背景1
             Transform tf1 = sceneObj.transform.Find("Bg1");
             Transform tf1 = sceneObj.transform.Find("Bg1");
             SpriteRenderer spr1 = tf1.GetComponent<SpriteRenderer>();
             SpriteRenderer spr1 = tf1.GetComponent<SpriteRenderer>();
             var resPath1 = ResPathUtil.GetBgImgPath("fuben_bg");
             var resPath1 = ResPathUtil.GetBgImgPath("fuben_bg");
-            //Sprite sp1 = GFGAsset.Load<Sprite>(resPath1);
-            handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-            Sprite sp1 = handle.AssetObject as Sprite;
-            DressUpUtil.AddAssetReleaser(tf1.gameObject, resPath, handle);
-            spr1.sprite = sp1;
+            SpriteHelper.AddSpriteTo(spr1, resPath);
             //角色
             //角色
             CustomSuitData suitSavedData = CustomSuitDataManager.GetCurrentSuitData();
             CustomSuitData suitSavedData = CustomSuitDataManager.GetCurrentSuitData();
             MyDressUpHelper.dressUpObj.setSceneObj(sceneObj.transform.Find("Scene").gameObject, false, true, null, false);
             MyDressUpHelper.dressUpObj.setSceneObj(sceneObj.transform.Find("Scene").gameObject, false, true, null, false);
@@ -57,26 +49,21 @@ namespace GFGGame
 
 
             if (value == "0")
             if (value == "0")
             {
             {
-                bgSpr.sprite = null;
+                SpriteHelper.RemoveSpriteFrom(bgSpr);
             }
             }
             else
             else
             {
             {
                 var resPath = ResPathUtil.GetSceneBgPath(value);
                 var resPath = ResPathUtil.GetSceneBgPath(value);
-                //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-                var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-                Sprite sp = handle.AssetObject as Sprite;
-                DressUpUtil.AddAssetReleaser(bg.gameObject, resPath, handle);
-
                 if (bgSpr.sprite == null)
                 if (bgSpr.sprite == null)
                 {
                 {
-                    bgSpr.sprite = sp;
+                    SpriteHelper.AddSpriteTo(bgSpr, resPath);
                 }
                 }
                 else
                 else
                 {
                 {
                     StoryDialogDataManager.Instance.waitBgChange = true;
                     StoryDialogDataManager.Instance.waitBgChange = true;
                     StoryDialogDataManager.Instance.dialogShowDelay = 0.4f;
                     StoryDialogDataManager.Instance.dialogShowDelay = 0.4f;
                     SetSpriteRendererAlpha(bgSpr, 1f);
                     SetSpriteRendererAlpha(bgSpr, 1f);
-                    bgNextSpr.sprite = sp;
+                    SpriteHelper.AddSpriteTo(bgNextSpr, resPath);
                     FairyGUI.Timers.inst.StartCoroutine(LastBgFadeOut());
                     FairyGUI.Timers.inst.StartCoroutine(LastBgFadeOut());
                     
                     
                     IEnumerator LastBgFadeOut()
                     IEnumerator LastBgFadeOut()
@@ -91,9 +78,9 @@ namespace GFGGame
                                 }
                                 }
                                 else
                                 else
                                 {
                                 {
-                                    bgSpr.sprite = sp;
+                                    SpriteHelper.AddSpriteTo(bgSpr, resPath);
                                     SetSpriteRendererAlpha(bgSpr, 1f);
                                     SetSpriteRendererAlpha(bgSpr, 1f);
-                                    bgNextSpr.sprite = null;
+                                    SpriteHelper.RemoveSpriteFrom(bgNextSpr);
                                     break;
                                     break;
                                 }
                                 }
                             }
                             }
@@ -115,18 +102,14 @@ namespace GFGGame
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             if (value == "0")
             if (value == "0")
             {
             {
-                spr.sprite = null;
+                SpriteHelper.RemoveSpriteFrom(spr);
             }
             }
             else
             else
             {
             {
                 StoryDialogDataManager.Instance.waitPicFade = true;
                 StoryDialogDataManager.Instance.waitPicFade = true;
 
 
                 var resPath = ResPathUtil.GetNpcPicSPath(value);
                 var resPath = ResPathUtil.GetNpcPicSPath(value);
-                //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-                var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-                Sprite sp = handle.AssetObject as Sprite;
-                DressUpUtil.AddAssetReleaser(tf.gameObject, resPath, handle);
-                spr.sprite = sp;
+                SpriteHelper.AddSpriteTo(spr, resPath);
                 SetSpriteRendererAlpha(spr, 0f);
                 SetSpriteRendererAlpha(spr, 0f);
                 FairyGUI.Timers.inst.StartCoroutine(UpdateDialogPicAlpha());
                 FairyGUI.Timers.inst.StartCoroutine(UpdateDialogPicAlpha());
 
 
@@ -168,11 +151,7 @@ namespace GFGGame
             Transform tf = sceneObj.transform.Find("Npc");
             Transform tf = sceneObj.transform.Find("Npc");
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             var resPath = ResPathUtil.GetNpcPicFPath(value);
             var resPath = ResPathUtil.GetNpcPicFPath(value);
-            //Sprite sp = GFGAsset.Load<Sprite>(resPath);
-            var handle = YooAssets.LoadAssetSync<Sprite>(resPath);
-            Sprite sp = handle.AssetObject as Sprite;
-            DressUpUtil.AddAssetReleaser(tf.gameObject, resPath, handle);
-            spr.sprite = sp;
+            SpriteHelper.AddSpriteTo(spr, resPath);
         }
         }
 
 
     }
     }

+ 4 - 4
GameClient/Assets/Game/HotUpdate/FairyGUI/GFGUIPackage.cs

@@ -40,7 +40,7 @@ namespace GFGGame
             var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, PackageItem item) =>
             var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, PackageItem item) =>
             {
             {
                 string location = name + extension;
                 string location = name + extension;
-                if (!YooAssets.CheckDressUpResExist(location))
+                if (!YooAssets.CheckResExist(location))
                 {
                 {
                     return;
                     return;
                 }
                 }
@@ -53,7 +53,7 @@ namespace GFGGame
                     if (tex != null)
                     if (tex != null)
                     {
                     {
                         string location = name + "!a" + extension;
                         string location = name + "!a" + extension;
-                        if (YooAssets.CheckDressUpResExist(location))
+                        if (YooAssets.CheckResExist(location))
                         {
                         {
                             AssetOperationHandle handleAlpha = YooAssets.LoadAssetAsync(location, type);
                             AssetOperationHandle handleAlpha = YooAssets.LoadAssetAsync(location, type);
                             CacheAssetHandle(descFilePath, handleAlpha);
                             CacheAssetHandle(descFilePath, handleAlpha);
@@ -88,7 +88,7 @@ namespace GFGGame
             var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, PackageItem item) =>
             var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, PackageItem item) =>
             {
             {
                 string location = name + extension;
                 string location = name + extension;
-                if (!YooAssets.CheckDressUpResExist(location))
+                if (!YooAssets.CheckResExist(location))
                 {
                 {
                     return;
                     return;
                 }
                 }
@@ -101,7 +101,7 @@ namespace GFGGame
                     if (tex != null)
                     if (tex != null)
                     {
                     {
                         string location = name + "!a" + extension;
                         string location = name + "!a" + extension;
-                        if (YooAssets.CheckDressUpResExist(location))
+                        if (YooAssets.CheckResExist(location))
                         {
                         {
                             AssetOperationHandle handleAlpha = YooAssets.LoadAssetAsync(location, type);
                             AssetOperationHandle handleAlpha = YooAssets.LoadAssetAsync(location, type);
                             CacheAssetHandle(descFilePath, handleAlpha);
                             CacheAssetHandle(descFilePath, handleAlpha);

+ 14 - 4
GameClient/Assets/Game/HotUpdate/HotUpdateEntry.cs → GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs

@@ -1,12 +1,11 @@
 using UniFramework.Pooling;
 using UniFramework.Pooling;
 using UnityEngine;
 using UnityEngine;
 
 
-namespace GFGGame.HotUpdate
+namespace GFGGame
 {
 {
-    public class HotUpdateEntry
+    public class HotUpdateDriver: MonoBehaviour
     {
     {
-
-        public static void Start()
+        private void Awake()
         {
         {
             //UniFramework
             //UniFramework
             // 初始化对象池系统
             // 初始化对象池系统
@@ -15,8 +14,19 @@ namespace GFGGame.HotUpdate
             LitJson.UnityTypeBindings.Register();
             LitJson.UnityTypeBindings.Register();
             //ET
             //ET
             ETManager.Instance.Init();
             ETManager.Instance.Init();
+            //Game
+            OperationSystem.Initialize();
             GameController.Start();
             GameController.Start();
         }
         }
 
 
+        private void Update()
+        {
+            OperationSystem.Update();
+        }
+
+        private void OnDestroy()
+        {
+            OperationSystem.DestroyAll();
+        }
     }
     }
 }
 }

+ 0 - 0
GameClient/Assets/Game/HotUpdate/HotUpdateEntry.cs.meta → GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs.meta


+ 8 - 0
GameClient/Assets/Game/HotUpdate/Live2d.meta

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

+ 7 - 0
GameClient/Assets/Game/HotUpdate/Live2d/Live2dAnimationManager.cs

@@ -0,0 +1,7 @@
+namespace GFGGame
+{
+    public class Live2dAnimationManager : SingletonBase<Live2dAnimationManager>
+    {
+
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Live2d/Live2dAnimationManager.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ca015150a731cfa4ca9db9961508d317
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem.meta

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

+ 105 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem/AsyncOperationBase.cs

@@ -0,0 +1,105 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace GFGGame
+{
+	public abstract class AsyncOperationBase : IEnumerator
+	{
+		// 用户请求的回调
+		private Action<AsyncOperationBase> _callback;
+
+		/// <summary>
+		/// 状态
+		/// </summary>
+		public EOperationStatus Status { get; protected set; } = EOperationStatus.None;
+
+		/// <summary>
+		/// 错误信息
+		/// </summary>
+		public string Error { get; protected set; }
+
+		/// <summary>
+		/// 处理进度
+		/// </summary>
+		public float Progress { get; protected set; }
+
+		/// <summary>
+		/// 是否已经完成
+		/// </summary>
+		public bool IsDone
+		{
+			get
+			{
+				return Status == EOperationStatus.Failed || Status == EOperationStatus.Succeed;
+			}
+		}
+
+		/// <summary>
+		/// 完成事件
+		/// </summary>
+		public event Action<AsyncOperationBase> Completed
+		{
+			add
+			{
+				if (IsDone)
+					value.Invoke(this);
+				else
+					_callback += value;
+			}
+			remove
+			{
+				_callback -= value;
+			}
+		}
+
+		/// <summary>
+		/// 异步操作任务
+		/// </summary>
+		public Task Task
+		{
+			get
+			{
+				if (_taskCompletionSource == null)
+				{
+					_taskCompletionSource = new TaskCompletionSource<object>();
+					if (IsDone)
+						_taskCompletionSource.SetResult(null);
+				}
+				return _taskCompletionSource.Task;
+			}
+		}
+
+		internal abstract void Start();
+		internal abstract void Update();
+		internal void Finish()
+		{
+			Progress = 1f;
+			_callback?.Invoke(this);
+			if (_taskCompletionSource != null)
+				_taskCompletionSource.TrySetResult(null);
+		}
+
+		/// <summary>
+		/// 清空完成回调
+		/// </summary>
+		protected void ClearCompletedCallback()
+		{
+			_callback = null;
+		}
+
+		#region 异步编程相关
+		bool IEnumerator.MoveNext()
+		{
+			return !IsDone;
+		}
+		void IEnumerator.Reset()
+		{
+		}
+		object IEnumerator.Current => null;
+
+		private TaskCompletionSource<object> _taskCompletionSource;
+		#endregion
+	}
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem/AsyncOperationBase.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ee8648ffd2c1722449ceadf2ff08184e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem/EOperationStatus.cs

@@ -0,0 +1,10 @@
+
+namespace GFGGame
+{
+	public enum EOperationStatus
+	{
+		None,
+		Succeed,
+		Failed
+	}
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem/EOperationStatus.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f9ffba02477bcbf4086f6308d706e281
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 107 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem/OperationSystem.cs

@@ -0,0 +1,107 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+
+namespace GFGGame
+{
+	internal class OperationSystem
+	{
+		private static readonly List<AsyncOperationBase> _operations = new List<AsyncOperationBase>(100);
+		private static readonly List<AsyncOperationBase> _addList = new List<AsyncOperationBase>(100);
+		private static readonly List<AsyncOperationBase> _removeList = new List<AsyncOperationBase>(100);
+
+		// 计时器相关
+		private static Stopwatch _watch;
+		private static long _frameTime;
+
+		/// <summary>
+		/// 异步操作的最小时间片段
+		/// </summary>
+		public static long MaxTimeSlice { set; get; } = long.MaxValue;
+
+		/// <summary>
+		/// 处理器是否繁忙
+		/// </summary>
+		public static bool IsBusy
+		{
+			get
+			{
+				return _watch.ElapsedMilliseconds - _frameTime >= MaxTimeSlice;
+			}
+		}
+
+
+		/// <summary>
+		/// 初始化异步操作系统
+		/// </summary>
+		public static void Initialize()
+		{
+			_watch = Stopwatch.StartNew();
+		}
+
+		/// <summary>
+		/// 更新异步操作系统
+		/// </summary>
+		public static void Update()
+		{
+			_frameTime = _watch.ElapsedMilliseconds;
+
+			// 添加新的异步操作
+			if (_addList.Count > 0)
+			{
+				for (int i = 0; i < _addList.Count; i++)
+				{
+					var operation = _addList[i];
+					_operations.Add(operation);
+				}
+				_addList.Clear();
+			}
+
+			// 更新所有的异步操作
+			foreach (var operation in _operations)
+			{
+				if (IsBusy)
+					break;
+
+				operation.Update();
+				if (operation.IsDone)
+				{
+					_removeList.Add(operation);
+					operation.Finish();
+				}
+			}
+
+			// 移除已经完成的异步操作
+			if (_removeList.Count > 0)
+			{
+				foreach (var operation in _removeList)
+				{
+					_operations.Remove(operation);
+				}
+				_removeList.Clear();
+			}
+		}
+
+		/// <summary>
+		/// 销毁异步操作系统
+		/// </summary>
+		public static void DestroyAll()
+		{
+			_operations.Clear();
+			_addList.Clear();
+			_removeList.Clear();
+			_watch = null;
+			_frameTime = 0;
+			MaxTimeSlice = long.MaxValue;
+		}
+
+		/// <summary>
+		/// 开始处理异步操作类
+		/// </summary>
+		public static void StartOperation(AsyncOperationBase operation)
+		{
+			_addList.Add(operation);
+			operation.Start();
+		}
+	}
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/OperationSystem/OperationSystem.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e67b93637cb3fa84785b53fd7ad0937b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Utils/ResPathUtil.cs

@@ -151,7 +151,7 @@ namespace GFGGame
                 return false;
                 return false;
             }
             }
             string resPath = ResPathUtil.GetDressUpAnimationPath(res, extName);
             string resPath = ResPathUtil.GetDressUpAnimationPath(res, extName);
-            return YooAssets.CheckDressUpResExist(resPath);
+            return YooAssets.CheckResExist(resPath);
         }
         }
 
 
         public static string GetDressUpEffectDirPath(string res)
         public static string GetDressUpEffectDirPath(string res)

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Card/CardFosterView.cs

@@ -345,7 +345,7 @@ namespace GFGGame
             }
             }
             string resName = _cardData.resources[_cardData.resIndex];
             string resName = _cardData.resources[_cardData.resIndex];
             string resPath = ResPathUtil.GetCardAnimationPath(_cardData.resources[_cardData.resIndex]);
             string resPath = ResPathUtil.GetCardAnimationPath(_cardData.resources[_cardData.resIndex]);
-            if (_cardData.itemCfg.animationCardStar > 0 && _cardData.star >= _cardData.itemCfg.animationCardStar && YooAssets.CheckDressUpResExist(resPath))
+            if (_cardData.itemCfg.animationCardStar > 0 && _cardData.star >= _cardData.itemCfg.animationCardStar && YooAssets.CheckResExist(resPath))
             {
             {
                 _effectUI1 = new EffectUI();
                 _effectUI1 = new EffectUI();
                 _effectUI1.Reset(_ui.m_comCard.m_comCardHolder.m_holder, resName, resName, 100, EffectUIType.Card);
                 _effectUI1.Reset(_ui.m_comCard.m_comCardHolder.m_holder, resName, resName, 100, EffectUIType.Card);

+ 1 - 1
GameClient/Assets/Game/Launcher/FairyGUI/GFGGLoader.cs

@@ -10,7 +10,7 @@ namespace GFGGame
 
 
         protected override void LoadExternal()
         protected override void LoadExternal()
         {
         {
-            if (!YooAssets.CheckDressUpResExist(this.url))
+            if (!YooAssets.CheckResExist(this.url))
             {
             {
                 return;
                 return;
             }
             }

+ 9 - 0
GameClient/Assets/Game/Launcher/GameLauncher.cs

@@ -5,6 +5,7 @@ using FairyGUI;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using YooAsset;
 using YooAsset;
+using UnityEngine.SceneManagement;
 
 
 public class GameLauncher : MonoBehaviour
 public class GameLauncher : MonoBehaviour
 {
 {
@@ -18,6 +19,14 @@ public class GameLauncher : MonoBehaviour
     {
     {
         Instance = this;
         Instance = this;
         DontDestroyOnLoad(gameObject);
         DontDestroyOnLoad(gameObject);
+        var roots = this.gameObject.scene.GetRootGameObjects();
+        foreach(var t in roots)
+        {
+            if(t.name == "FairyGUI" || t.name == "Stage Camera")
+            {
+                DontDestroyOnLoad(t);
+            }
+        }
     }
     }
 
 
     // Start is called before the first frame update
     // Start is called before the first frame update

+ 10 - 4
GameClient/Assets/Game/Launcher/HotUpdateProxy/HotUpdateCodeLoader.cs

@@ -29,6 +29,11 @@ namespace GFGGame
             return this.allTypes;
             return this.allTypes;
         }
         }
 
 
+        private void Awake()
+        {
+            DontDestroyOnLoad(this.gameObject);
+        }
+
         public void StartLoad()
         public void StartLoad()
         {
         {
 
 
@@ -64,10 +69,11 @@ namespace GFGGame
         {
         {
             //mono模式
             //mono模式
             this.allTypes = assembly.GetTypes();
             this.allTypes = assembly.GetTypes();
-            System.Type type = assembly.GetType("GFGGame.HotUpdate.HotUpdateEntry");
-            var method = type.GetMethod("Start");
-            var startDel = (Action)System.Delegate.CreateDelegate(typeof(Action), null, method);
-            startDel();
+            //System.Type type = assembly.GetType("GFGGame.HotUpdate.HotUpdateEntry");
+            //var method = type.GetMethod("Start");
+            //var startDel = (Action)System.Delegate.CreateDelegate(typeof(Action), null, method);
+            //startDel();
+            YooAssets.LoadSceneAsync("Assets/ResIn/Scene/HotUpdate.unity");
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 45 - 0
GameClient/Assets/ResIn/Prefab/HotUpdateDriver.prefab

@@ -0,0 +1,45 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &4256127963219327722
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4739744536700208726}
+  - component: {fileID: 98615633779879054}
+  m_Layer: 0
+  m_Name: HotUpdateDriver
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4739744536700208726
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4256127963219327722}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &98615633779879054
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4256127963219327722}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 720cf9604da70f3478fe7f9551c0a32a, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 7 - 0
GameClient/Assets/ResIn/Prefab/HotUpdateDriver.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d48f4d8afb2e4664f8ab5529f34c8f2d
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
GameClient/Assets/ResIn/Scene.meta

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

+ 273 - 0
GameClient/Assets/ResIn/Scene/HotUpdate.unity

@@ -0,0 +1,273 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 12
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 0
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 12
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_ExtractAmbientOcclusion: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 512
+    m_PVRBounces: 2
+    m_PVREnvironmentSampleCount: 256
+    m_PVREnvironmentReferencePointCount: 2048
+    m_PVRFilteringMode: 1
+    m_PVRDenoiserTypeDirect: 1
+    m_PVRDenoiserTypeIndirect: 1
+    m_PVRDenoiserTypeAO: 1
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVREnvironmentMIS: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ExportTrainingData: 0
+    m_TrainingDataDestination: TrainingData
+    m_LightProbeSampleCountMultiplier: 4
+  m_LightingDataAsset: {fileID: 0}
+  m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &1410528065
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1410528070}
+  - component: {fileID: 1410528069}
+  - component: {fileID: 1410528068}
+  - component: {fileID: 1410528067}
+  - component: {fileID: 1410528066}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!124 &1410528066
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1410528065}
+  m_Enabled: 1
+--- !u!114 &1410528067
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1410528065}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 03a74e9be952781499f1c48566c89209, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!81 &1410528068
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1410528065}
+  m_Enabled: 1
+--- !u!20 &1410528069
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1410528065}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 2
+  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: -1
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 9.6
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 23
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 0
+  m_HDR: 1
+  m_AllowMSAA: 0
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 0
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &1410528070
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1410528065}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1426644585
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1426644587}
+  - component: {fileID: 1426644586}
+  m_Layer: 0
+  m_Name: HotUpdateDriver
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1426644586
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1426644585}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 720cf9604da70f3478fe7f9551c0a32a, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!4 &1426644587
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1426644585}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 7 - 0
GameClient/Assets/ResIn/Scene/HotUpdate.unity.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: dbe866f85c772f64c9f1eb61eb15937d
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 0
GameClient/Assets/YooAsset/Editor/GFGAsset/Collect/AssetBundleHelper.cs

@@ -35,6 +35,7 @@ namespace GFGEditor
         {
         {
             EditorUtility.DisplayProgressBar("进度", "正在收集资源", 1);
             EditorUtility.DisplayProgressBar("进度", "正在收集资源", 1);
             BuildHotUpdateDll();
             BuildHotUpdateDll();
+            AssetDatabase.Refresh();
             itemsSizeDicDic = new Dictionary<string, Dictionary<string, AssetBundleAssetListItem>>();
             itemsSizeDicDic = new Dictionary<string, Dictionary<string, AssetBundleAssetListItem>>();
             assetBundleCollector = AssetBundleCollector.GetData();
             assetBundleCollector = AssetBundleCollector.GetData();
             
             

+ 1 - 1
GameClient/Assets/YooAsset/Runtime/GFG/YooAssetsExtensionGFG.cs

@@ -4,7 +4,7 @@ namespace YooAsset
 {
 {
     public static partial class YooAssets
     public static partial class YooAssets
     {
     {
-        public static bool CheckDressUpResExist(string assetPath)
+        public static bool CheckResExist(string assetPath)
         {
         {
             ResourcePackage p = GetPackage("GameLogic");
             ResourcePackage p = GetPackage("GameLogic");
             p.PlayModeServices.ActiveManifest.AssetDic.TryGetValue(assetPath, out var r);
             p.PlayModeServices.ActiveManifest.AssetDic.TryGetValue(assetPath, out var r);

+ 9 - 9
GameClient/UserSettings/EditorUserSettings.asset

@@ -6,31 +6,31 @@ EditorUserSettings:
   serializedVersion: 4
   serializedVersion: 4
   m_ConfigSettings:
   m_ConfigSettings:
     RecentlyUsedScenePath-0:
     RecentlyUsedScenePath-0:
-      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95a5b34270ff11b14cb090314e711cb1ec1111b850c12c7d904
+      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95b5c343222cf2c18f1141a1fc256d014c10b05
       flags: 0
       flags: 0
     RecentlyUsedScenePath-1:
     RecentlyUsedScenePath-1:
-      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95b5c343222cf2c18f1141a1fc256d014c10b05
+      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95b5b34390bf1021ec81f011dc156d014c10b05
       flags: 0
       flags: 0
     RecentlyUsedScenePath-2:
     RecentlyUsedScenePath-2:
-      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95b5b34390bf1021ec81f011dc156d014c10b05
+      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95b58343800eb0112fe041a1ecb56d014c10b05
       flags: 0
       flags: 0
     RecentlyUsedScenePath-3:
     RecentlyUsedScenePath-3:
-      value: 22424703114646680c031c2e153010393a250d2438212b3562785365acb77b1ce7ea39a6d8093c393707fc7321260032e2060c18b95b58343800eb0112fe041a1ecb56d014c10b05
+      value: 22424703114646680c031c2e1530103c1918130b38670a3f22223c27acf53a31f6fe
       flags: 0
       flags: 0
     RecentlyUsedScenePath-4:
     RecentlyUsedScenePath-4:
-      value: 22424703114646680c031c2e1530103c1918130b38670a3f22223c27acf53a31f6fe
+      value: 22424703114646680c031c2e1530103d17041323222f691d2c3a163aece77a2decee22f0
       flags: 0
       flags: 0
     RecentlyUsedScenePath-5:
     RecentlyUsedScenePath-5:
-      value: 22424703114646680c031c2e1530103d17041323222f691d2c3a163aece77a2decee22f0
+      value: 22424703114646680c031c2e15301031050e16290e2d283325241c21e9af152bfbe935cbe2343c343403fd374a2b0f36e613
       flags: 0
       flags: 0
     RecentlyUsedScenePath-6:
     RecentlyUsedScenePath-6:
-      value: 22424703114646680c031c2e15301031050e16290e2d283325241c21e9af152bfbe935cbe2343c343403fd374a2b0f36e613
+      value: 22424703114646680c031c2e15301031050e16290e2d283325241c21e9af152df6e83be8f3333c1d2a1be13f263b0f3cfa070819fd451f05181ae4
       flags: 0
       flags: 0
     RecentlyUsedScenePath-7:
     RecentlyUsedScenePath-7:
-      value: 22424703114646680c031c2e15301031050e16290e2d283325241c21e9af152df6e83be8f3333c1d2a1be13f263b0f3cfa070819fd451f05181ae4
+      value: 22424703114646680c031c2e15301031181e152b3821293e6208133aefe12031ede978fce9332b25
       flags: 0
       flags: 0
     RecentlyUsedScenePath-8:
     RecentlyUsedScenePath-8:
-      value: 22424703114646680c031c2e15301031181e152b3821293e6208133aefe12031ede978fce9332b25
+      value: 2242470311464669081d252c5f105c1518125706232f2f3e633c133af6f9
       flags: 0
       flags: 0
     RecentlyUsedScenePath-9:
     RecentlyUsedScenePath-9:
       value: 22424703114646680e0b0227036c78111b12342b39262538283b5326ece92021
       value: 22424703114646680e0b0227036c78111b12342b39262538283b5326ece92021