Ver Fonte

添加热更逻辑

DESKTOP-FB72PO8\Administrator há 5 meses atrás
pai
commit
0f3a8dfe81
100 ficheiros alterados com 1056 adições e 268 exclusões
  1. 1 1
      Assets/Res/TimeLineAssets/Stars2Timeline.playable.meta
  2. 10 10
      Assets/Scripts/Core/AssetLoadTool/Asset/AssetBundleLoadManager.cs
  3. 7 1
      Assets/Scripts/Core/Editor/BuildEtitor/BuildEditor.cs
  4. 2 1
      Assets/Scripts/Core/Editor/CoreEditor.asmdef
  5. 8 0
      Assets/Scripts/Core/Editor/HybridCLR.meta
  6. 165 0
      Assets/Scripts/Core/Editor/HybridCLR/BuildAssetsCommand.cs
  7. 11 0
      Assets/Scripts/Core/Editor/HybridCLR/BuildAssetsCommand.cs.meta
  8. 43 0
      Assets/Scripts/Core/Editor/HybridCLR/DllTool.cs
  9. 3 0
      Assets/Scripts/Core/Editor/HybridCLR/DllTool.cs.meta
  10. 2 1
      Assets/Scripts/Core/Fort23.Core.asmdef
  11. 221 0
      Assets/Scripts/Core/UI/Core/GameAssetUpdatePanel.cs
  12. 3 0
      Assets/Scripts/Core/UI/Core/GameAssetUpdatePanel.cs.meta
  13. 7 2
      Assets/Scripts/Core/Utility/Helper/FileHelper.cs
  14. 14 0
      Assets/Scripts/GameStart/AssetUrlInfo.cs
  15. 3 0
      Assets/Scripts/GameStart/AssetUrlInfo.cs.meta
  16. 491 0
      Assets/Scripts/GameStart/GameLoadDll.cs
  17. 3 0
      Assets/Scripts/GameStart/GameLoadDll.cs.meta
  18. 16 2
      Assets/Scripts/GameStart/GameStartDll.asmdef
  19. 31 2
      Assets/Scripts/GameStart/GameStartUIPanel.cs
  20. 2 1
      Assets/Scripts/GameUI/Fort23.Mono.asmdef
  21. 11 0
      Assets/Scripts/GameUI/GameApplction.cs
  22. BIN
      Assets/StreamingAssets/Bundle/01lz_e3c15c7a3af9a9dfa33512752ec236be
  23. BIN
      Assets/StreamingAssets/Bundle/01lz_fbb1c2b7f9a619e4d0b1edb55a476a95
  24. BIN
      Assets/StreamingAssets/Bundle/01np_dg_chu_mid_c018c37789d5224216c194f0c888b810
  25. BIN
      Assets/StreamingAssets/Bundle/01np_sk3_dg_l_8ded775e54c361aefcab925ea06c4310
  26. 0 7
      Assets/StreamingAssets/Bundle/01np_sk3_dg_l_8deda843050be69caa03bad2ce90e95e.meta
  27. BIN
      Assets/StreamingAssets/Bundle/09flowmap_smoke_be1bb1a7dd890673bc900d2a0583fb0c
  28. 1 1
      Assets/StreamingAssets/Bundle/09flowmap_smoke_be1bb1a7dd890673bc900d2a0583fb0c.meta
  29. 0 0
      Assets/StreamingAssets/Bundle/MD5.txt
  30. 0 7
      Assets/StreamingAssets/Bundle/UnityBundle.meta
  31. BIN
      Assets/StreamingAssets/Bundle/UnityBundle.unity3d
  32. 1 1
      Assets/StreamingAssets/Bundle/UnityBundle.unity3d.meta
  33. BIN
      Assets/StreamingAssets/Bundle/albedo_t1_c38e459a9673a6e3ab381a7c11ae8f5c
  34. 0 7
      Assets/StreamingAssets/Bundle/albedo_t1_c38e459a9673a6e3ab381a7c11ae8f5c.meta
  35. BIN
      Assets/StreamingAssets/Bundle/albedo_t1_c80bb97e409ff295a0f9fe341c09e185
  36. 0 7
      Assets/StreamingAssets/Bundle/albedo_t1_c80bb97e409ff295a0f9fe341c09e185.meta
  37. BIN
      Assets/StreamingAssets/Bundle/alpha_bd3_5a50b8fded097d08179d88dbb8b823bb
  38. 0 7
      Assets/StreamingAssets/Bundle/alpha_bd3_5a50b8fded097d08179d88dbb8b823bb.meta
  39. BIN
      Assets/StreamingAssets/Bundle/alpha_bd3_6251581ec759ab63cb2564907601b2e9
  40. 0 7
      Assets/StreamingAssets/Bundle/alpha_bd3_6251581ec759ab63cb2564907601b2e9.meta
  41. BIN
      Assets/StreamingAssets/Bundle/anse04_347b22c842e665b326462f1fc7254e35
  42. 0 7
      Assets/StreamingAssets/Bundle/anse04_347b22c842e665b326462f1fc7254e35.meta
  43. 0 0
      Assets/StreamingAssets/Bundle/assetConfig.txt
  44. BIN
      Assets/StreamingAssets/Bundle/bg_7riqdddi_23485c92d454f7b4d658c2f095335f42
  45. 0 7
      Assets/StreamingAssets/Bundle/bg_7riqdddi_23485c92d454f7b4d658c2f095335f42.meta
  46. BIN
      Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__4a52dade8f94650a5f6ecf3f577646cd
  47. 0 7
      Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__4a52dade8f94650a5f6ecf3f577646cd.meta
  48. BIN
      Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__b15606fc5cadf925a20dcaf3d9077643
  49. 0 7
      Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__b15606fc5cadf925a20dcaf3d9077643.meta
  50. BIN
      Assets/StreamingAssets/Bundle/buffconfig_aa9f8161bfc7e57864de2476fffb29ec
  51. 0 7
      Assets/StreamingAssets/Bundle/buffconfig_aa9f8161bfc7e57864de2476fffb29ec.meta
  52. BIN
      Assets/StreamingAssets/Bundle/buffpoolconfig_59731e42325038421090b38ca4b091df
  53. 0 7
      Assets/StreamingAssets/Bundle/buffpoolconfig_59731e42325038421090b38ca4b091df.meta
  54. BIN
      Assets/StreamingAssets/Bundle/canvas_296748ebefe0bdaa0e7a478b76884ec4
  55. 0 7
      Assets/StreamingAssets/Bundle/canvas_296748ebefe0bdaa0e7a478b76884ec4.meta
  56. BIN
      Assets/StreamingAssets/Bundle/canvas_c769c3beb02dfc51e445184531052cf6
  57. 0 7
      Assets/StreamingAssets/Bundle/canvas_c769c3beb02dfc51e445184531052cf6.meta
  58. BIN
      Assets/StreamingAssets/Bundle/chapter01_171e7fa4f734f6c776653362184dea75
  59. 0 7
      Assets/StreamingAssets/Bundle/chapter01_171e7fa4f734f6c776653362184dea75.meta
  60. BIN
      Assets/StreamingAssets/Bundle/chapter01_1_691ba002f96cc113d293ffde6923902f
  61. 0 7
      Assets/StreamingAssets/Bundle/chapter01_1_691ba002f96cc113d293ffde6923902f.meta
  62. BIN
      Assets/StreamingAssets/Bundle/chapter01_673b6fb40595a6c484b593dcf26f5aa5
  63. 0 7
      Assets/StreamingAssets/Bundle/chapter01_673b6fb40595a6c484b593dcf26f5aa5.meta
  64. BIN
      Assets/StreamingAssets/Bundle/chapter01_9a97f6ac4167102d46d257d5da329438
  65. 0 7
      Assets/StreamingAssets/Bundle/chapter01_9a97f6ac4167102d46d257d5da329438.meta
  66. BIN
      Assets/StreamingAssets/Bundle/chapter01_aaacc779331e0762041ca45cfb078298
  67. 0 7
      Assets/StreamingAssets/Bundle/chapter01_aaacc779331e0762041ca45cfb078298.meta
  68. BIN
      Assets/StreamingAssets/Bundle/chapter02_3405123f1988f6cd2995944ace318b68
  69. 0 7
      Assets/StreamingAssets/Bundle/chapter02_3405123f1988f6cd2995944ace318b68.meta
  70. BIN
      Assets/StreamingAssets/Bundle/chapter02_831c8284b8c043da3344572a77ec6e82
  71. 0 7
      Assets/StreamingAssets/Bundle/chapter02_831c8284b8c043da3344572a77ec6e82.meta
  72. BIN
      Assets/StreamingAssets/Bundle/circle_ab_0dba39348e4751cd9f07c0af5713cc9a
  73. 0 7
      Assets/StreamingAssets/Bundle/circle_ab_0dba39348e4751cd9f07c0af5713cc9a.meta
  74. BIN
      Assets/StreamingAssets/Bundle/circle_ab_27ad5172bd2f99a11ae0b61ddebfc53d
  75. 0 7
      Assets/StreamingAssets/Bundle/circle_ab_27ad5172bd2f99a11ae0b61ddebfc53d.meta
  76. BIN
      Assets/StreamingAssets/Bundle/circle_ab_a9350ecaf13453d5932d48d2a0031d84
  77. 0 7
      Assets/StreamingAssets/Bundle/circle_ab_a9350ecaf13453d5932d48d2a0031d84.meta
  78. BIN
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_04ca1c8037005f08e6e730759c64b1e2
  79. 0 7
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_04ca1c8037005f08e6e730759c64b1e2.meta
  80. BIN
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7917fea59e8e0d554986983186c832ee
  81. 0 7
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7917fea59e8e0d554986983186c832ee.meta
  82. BIN
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7edef9698bf2eb1a83896c25a958615f
  83. 0 7
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7edef9698bf2eb1a83896c25a958615f.meta
  84. BIN
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_t3_56368115444274cb13b8e83e5749f0f8
  85. 0 7
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_t3_56368115444274cb13b8e83e5749f0f8.meta
  86. BIN
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_t4_bd9d40a8f1beea67a31a04a1b5a3dd5e
  87. 0 7
      Assets/StreamingAssets/Bundle/cloud_2x2_soft_t4_bd9d40a8f1beea67a31a04a1b5a3dd5e.meta
  88. BIN
      Assets/StreamingAssets/Bundle/combathppanel_23f6085f168ef09b2a59ee67296de26d
  89. 0 7
      Assets/StreamingAssets/Bundle/combathppanel_23f6085f168ef09b2a59ee67296de26d.meta
  90. BIN
      Assets/StreamingAssets/Bundle/combathppanel_871fc32c3e71e970e03ea5319b11f711
  91. 0 7
      Assets/StreamingAssets/Bundle/combathppanel_871fc32c3e71e970e03ea5319b11f711.meta
  92. BIN
      Assets/StreamingAssets/Bundle/combathppanel_944fec919043d03f9b23542afa97974f
  93. 0 7
      Assets/StreamingAssets/Bundle/combathppanel_944fec919043d03f9b23542afa97974f.meta
  94. BIN
      Assets/StreamingAssets/Bundle/combatroot_6ea6b02b7feaa37039711b23a6bf21a9
  95. 0 7
      Assets/StreamingAssets/Bundle/combatroot_6ea6b02b7feaa37039711b23a6bf21a9.meta
  96. BIN
      Assets/StreamingAssets/Bundle/combatroot_a66623171aa0cb93c50d569e0ba7738f
  97. 0 7
      Assets/StreamingAssets/Bundle/combatroot_a66623171aa0cb93c50d569e0ba7738f.meta
  98. BIN
      Assets/StreamingAssets/Bundle/combatroot_f15bd57e6a48e1fb5efb907bf3bab695
  99. 0 7
      Assets/StreamingAssets/Bundle/combatroot_f15bd57e6a48e1fb5efb907bf3bab695.meta
  100. BIN
      Assets/StreamingAssets/Bundle/combatshowtextpanel_9fd8ce26d8d049623461c5e74eff141c

+ 1 - 1
Assets/Res/TimeLineAssets/Stars2Timeline.playable.meta

@@ -4,5 +4,5 @@ NativeFormatImporter:
   externalObjects: {}
   mainObjectFileID: 11400000
   userData: 
-  assetBundleName: 
+  assetBundleName: stars2timeline
   assetBundleVariant: 

+ 10 - 10
Assets/Scripts/Core/AssetLoadTool/Asset/AssetBundleLoadManager.cs

@@ -133,7 +133,7 @@ public class AssetBundleLoadManager : Singleton<AssetBundleLoadManager>
                             "assetConfig.txt";
 #endif
 
-        m_manifestName = "UnityBundle";
+        m_manifestName = "UnityBundle.unity3d";
         //Temp path. When version update is ready, path will be persistentPath and streamingPath.
 
 //        m_rootpersistentBundleURL = Application.persistentDataPath + "/BundlAsset/";
@@ -426,24 +426,24 @@ public class AssetBundleLoadManager : Singleton<AssetBundleLoadManager>
             }
         }
 
-        bool isShowDebug = Input.GetKeyUp(KeyCode.K);
+        // bool isShowDebug = Input.GetKeyUp(KeyCode.K);
 
         int count = 0;
         for (m_currLoadAsset.Begin(); m_currLoadAsset.Next();)
         {
-            if (isShowDebug)
-            {
-                Debug.Log(m_currLoadAsset.Key.name + "____" + m_currLoadAsset.Value.HandCount);
-            }
+            // if (isShowDebug)
+            // {
+            //     Debug.Log(m_currLoadAsset.Key.name + "____" + m_currLoadAsset.Value.HandCount);
+            // }
 
             count += m_currLoadAsset.Value.HandCount;
             m_currLoadAsset.Value.Update();
         }
 
-        if (isShowDebug)
-        {
-            Debug.Log($"当前拥有资源数:{count}    bundle数:{m_currLoadBundle.Count}");
-        }
+        // if (isShowDebug)
+        // {
+        //     Debug.Log($"当前拥有资源数:{count}    bundle数:{m_currLoadBundle.Count}");
+        // }
     }
 
 

+ 7 - 1
Assets/Scripts/Core/Editor/BuildEtitor/BuildEditor.cs

@@ -205,8 +205,14 @@ namespace Fort23.Editor
                 if (bundle.Contains(".manifest")) continue;
                 var fileInfo = new FileInfo(bundle);
                 byte[] data = File.ReadAllBytes(bundle);
+                string fileName = fileInfo.Name;
+                if (fileInfo.Name.Equals("UnityBundle"))
+                {
+                    fileName="UnityBundle.unity3d";
+                }
+
                 // data = DllTool.KeyEncryption(data);
-                string p = build + fileInfo.Name;
+                string p = build + fileName;
                 // Debug.Log("拷贝的路径" + p);
                 File.WriteAllBytes(p, data);
                 var md5Info = new MD5FileInfo();

+ 2 - 1
Assets/Scripts/Core/Editor/CoreEditor.asmdef

@@ -4,7 +4,8 @@
     "references": [
         "GUID:eb9b0eb79ecaf6c41a9e41da199393ef",
         "GUID:0c7a4160c4e32114da1dc8fb9b3a1d36",
-        "GUID:c03a7518d60db354c9d04ea9d1517aa1"
+        "GUID:c03a7518d60db354c9d04ea9d1517aa1",
+        "GUID:2373f786d14518f44b0f475db77ba4de"
     ],
     "includePlatforms": [
         "Editor"

+ 8 - 0
Assets/Scripts/Core/Editor/HybridCLR.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: DHgW5y2tUX0mXlrDY3CcZ+3y3K7uZh/y1+h/JGMpqHjQ9ucOEXMc+HQ=
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 165 - 0
Assets/Scripts/Core/Editor/HybridCLR/BuildAssetsCommand.cs

@@ -0,0 +1,165 @@
+using System.Collections.Generic;
+using System.IO;
+using Fort23.Core;
+using Fort23.Editor;
+using Fort23.GameData;
+using Fort23.Mono;
+using Fort23.UTool;
+using hirdParty.DownloadSystem;
+using HybridCLR.Editor.Commands;
+using UnityEditor;
+using UnityEngine;
+
+namespace HybridCLR.Editor
+{
+    public static class BuildAssetsCommand
+    {
+        [MenuItem("HybridCLR/打包dll到StreamingAssets")]
+        public static void BuildAndCopyAOTHotUpdateDllsToStreamingAssets()
+        {
+            // var gameRuntimeConfig = Resources.Load<GameRuntimeConfig>("GameRuntimeConfig");
+
+            var build = Application.streamingAssetsPath + "/Dll/";
+            if (Directory.Exists(build))
+            {
+                Directory.Delete(build,true);
+            }
+
+            Directory.CreateDirectory(build);
+            BuildAndCopyAOTHotUpdateDlls(build);
+            var assetMd5Info = new AssetMD5Info(new List<MD5FileInfo>());
+            var allBundles = Directory.GetFiles(build);
+            foreach (var bundle in allBundles)
+            {
+                if (bundle.Contains(".dll.bytes"))
+                {
+                    MD5FileInfo md5Info = new MD5FileInfo();
+                    md5Info.md5 = MD5Helper.FileMD5(bundle);
+
+                    FileInfo fileInfo = new FileInfo(bundle);
+                    md5Info.size = fileInfo.Length;
+                    md5Info.fileName = Path.GetFileName(bundle);
+                    assetMd5Info.fileInfo.Add(md5Info);
+                }
+            }
+
+            var md5Json = JsonHelper.ToJson(assetMd5Info);
+            File.WriteAllText(build + "DllMD5.txt", md5Json);
+            LogTool.Log("MD5文件生成完成");
+            PlatformType platformType;
+#if UNITY_ANDROID
+            platformType = PlatformType.Android;
+#elif UNITY_IOS
+			platformType = PlatformType.IOS;
+#elif UNITY_STANDALONE_WIN
+            platformType = PlatformType.PC;
+#elif UNITY_STANDALONE_OSX
+			platformType = PlatformType.MacOS;
+#else
+			platformType = PlatformType.None;
+#endif
+           // var build = Application.streamingAssetsPath;
+            BuildAndCopyAOTHotUpdateDlls(build);
+            AssetDatabase.SaveAssets();
+            AssetDatabase.Refresh();
+        }
+
+        [MenuItem("HybridCLR/打包dll到专门文件夹")]
+        public static void BuildAndCopyAOTHotUpdateDllsToSpecialFolder()
+        {
+            var gameRuntimeConfig = Resources.Load<GameRuntimeConfig>("GameRuntimeConfig");
+            PlatformType platformType;
+#if UNITY_ANDROID
+            platformType = PlatformType.Android;
+#elif UNITY_IOS
+			platformType = PlatformType.IOS;
+#elif UNITY_STANDALONE_WIN
+            platformType = PlatformType.PC;
+#elif UNITY_STANDALONE_OSX
+			platformType = PlatformType.MacOS;
+#else
+			platformType = PlatformType.None;
+#endif
+            var build = string.Format(BuildEditor.buildDllFolder, platformType,
+                $"{1}.{1}.{1}");
+            BuildAndCopyAOTHotUpdateDlls(build);
+
+            var assetMd5Info = new AssetMD5Info(new List<MD5FileInfo>());
+            var allBundles = Directory.GetFiles(build);
+            foreach (var bundle in allBundles)
+            {
+                if (bundle.Contains(".dll.bytes"))
+                {
+                    MD5FileInfo md5Info = new MD5FileInfo();
+                    md5Info.md5 = MD5Helper.FileMD5(bundle);
+
+                    FileInfo fileInfo = new FileInfo(bundle);
+                    md5Info.size = fileInfo.Length;
+                    md5Info.fileName = Path.GetFileName(bundle);
+                    assetMd5Info.fileInfo.Add(md5Info);
+                }
+            }
+
+            var md5Json = JsonHelper.ToJson(assetMd5Info);
+            File.WriteAllText(build + "/DllMD5.txt", md5Json);
+            LogTool.Log("MD5文件生成完成");
+        }
+
+        public static void BuildAndCopyAOTHotUpdateDlls(string buildDstDir)
+        {
+            if (!Directory.Exists(buildDstDir))
+            {
+                Directory.CreateDirectory(buildDstDir);
+            }
+
+            CompileDllCommand.CompileDllActiveBuildTarget();
+            CopyAOTAssembliesToStreamingAssets(buildDstDir);
+            CopyHotUpdateAssembliesToStreamingAssets(buildDstDir);
+        }
+
+        /// <summary>
+        /// 复制AOT的Assembly补充元数据到StreamingAssets(在LoadDll.AOTMetaAssemblyNames中设置的)
+        /// </summary>
+        private static void CopyAOTAssembliesToStreamingAssets(string aotAssembliesDstDir)
+        {
+            var target = EditorUserBuildSettings.activeBuildTarget;
+            string aotAssembliesSrcDir = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
+            foreach (var dll in SettingsUtil.HybridCLRSettings.patchAOTAssemblies)
+            {
+                string srcDllPath = $"{aotAssembliesSrcDir}/{dll}";
+                if (!File.Exists(srcDllPath))
+                {
+                    Debug.LogError($"ab中添加AOT补充元数据dll:{srcDllPath} 时发生错误,文件不存在。" +
+                                   "裁剪后的AOT dll在BuildPlayer时才能生成,因此需要你先构建一次游戏App后再打包。");
+                    continue;
+                }
+
+                string dllBytesPath = $"{aotAssembliesDstDir}/{dll}.bytes";
+
+
+                byte[] data = File.ReadAllBytes(srcDllPath);
+                data = DllTool.KeyEncryption(data);
+                File.WriteAllBytes(dllBytesPath, data);
+                Debug.Log($"[CopyAOTAssembliesToStreamingAssets] copy AOT dll {srcDllPath} -> {dllBytesPath}");
+            }
+        }
+
+        /// <summary>
+        /// 复制热更的Dll到StreamingAssets, 在HybridCLR Setting中设置的。
+        /// </summary>
+        private static void CopyHotUpdateAssembliesToStreamingAssets(string hotfixAssembliesDstDir)
+        {
+            var target = EditorUserBuildSettings.activeBuildTarget;
+            string hotfixDllSrcDir = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target);
+            foreach (var dll in SettingsUtil.HotUpdateAssemblyFilesExcludePreserved)
+            {
+                string dllPath = $"{hotfixDllSrcDir}/{dll}";
+                string dllBytesPath = $"{hotfixAssembliesDstDir}/{dll}.bytes";
+                byte[] data = File.ReadAllBytes(dllPath);
+                data = DllTool.KeyEncryption(data);
+                File.WriteAllBytes(dllBytesPath, data);
+                Debug.Log($"[CopyHotUpdateAssembliesToStreamingAssets] copy hotfix dll {dllPath} -> {dllBytesPath}");
+            }
+        }
+    }
+}

+ 11 - 0
Assets/Scripts/Core/Editor/HybridCLR/BuildAssetsCommand.cs.meta

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

+ 43 - 0
Assets/Scripts/Core/Editor/HybridCLR/DllTool.cs

@@ -0,0 +1,43 @@
+using System;
+using UnityEngine;
+
+namespace HybridCLR.Editor
+{
+    public class DllTool
+    {
+        private static byte[] keyRqust = new byte[]
+        {
+            199, 65, 209, 163, 129, 213, 106, 251, 151, 26, 17, 175, 229, 12,
+            152, 35, 144, 156, 215, 36, 190, 186, 114, 60, 183, 207, 84, 171,
+            1, 191, 115, 169, 201, 20, 230, 82, 91, 220, 208, 202, 149, 42, 128,
+            70, 205, 62, 24, 222, 195, 76, 188, 120, 48, 238, 179, 19, 6, 187, 125,
+            40, 146, 109, 185, 37, 102, 59, 200, 174, 253, 157, 247, 145, 105, 165,
+            137, 176, 194, 136, 197, 166, 160, 168, 237, 143, 164, 97, 235, 53, 231,
+            224, 11, 236, 139, 107, 116, 140, 92, 162, 173, 39, 14, 181, 167, 80, 46,
+            89, 178, 52, 79, 142, 85, 43, 158, 121, 87, 78, 61, 16, 198, 214, 58, 4, 193,
+            132, 29, 51, 50, 245, 180, 81, 155, 177, 13, 18, 223, 63, 21, 204, 101, 227,
+            25, 138, 55, 32, 8, 226, 10, 100, 254, 252, 216, 67, 99, 108, 141, 249, 250,
+            47, 75, 210, 211, 124, 27, 22, 153, 233, 83, 23, 242, 172, 88, 57, 77, 95, 41,
+            133, 9, 44, 118, 221, 154, 72, 234, 33, 56, 184, 130, 127, 148, 170, 203, 243,
+            150, 228, 110, 66, 74, 86, 64, 45, 94, 239, 225, 206, 31, 28, 5, 113, 241, 30,
+            244, 248, 196, 69, 7, 212, 232, 54, 0, 126, 122, 96, 112, 117, 217, 34, 123,
+            192, 49, 161, 135, 73, 134, 103, 90, 240, 2, 219, 38, 119, 182, 246, 159, 189,
+            98, 131, 15, 104, 71, 3, 147, 111, 218, 93, 68,255
+        };
+     
+
+       
+        public static byte[] KeyEncryption(byte[] data)
+        {
+            return data;
+            Debug.Log(keyRqust.Length);
+            byte[] keyData = new byte[data.Length];
+            for (int i = 0; i < data.Length; i++)
+            {
+                keyData[i] = keyRqust[data[i]];
+            }
+
+            return keyData;
+        }
+    }
+}

+ 3 - 0
Assets/Scripts/Core/Editor/HybridCLR/DllTool.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cf7506b379d249c8a44f334165977608
+timeCreated: 1716347993

+ 2 - 1
Assets/Scripts/Core/Fort23.Core.asmdef

@@ -11,7 +11,8 @@
         "GUID:d8b63aba1907145bea998dd612889d6b",
         "GUID:5efd170ecd8084500bed5692932fe14e",
         "GUID:a5baed0c9693541a5bd947d336ec7659",
-        "GUID:3b570a5146f9d4f0fa107ed4559471a3"
+        "GUID:3b570a5146f9d4f0fa107ed4559471a3",
+        "DownloadSystem"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 221 - 0
Assets/Scripts/Core/UI/Core/GameAssetUpdatePanel.cs

@@ -0,0 +1,221 @@
+using System.Collections;
+using System.Collections.Generic;
+using Fort23.Core;
+using Fort23.GameData;
+using hirdParty.DownloadSystem;
+
+using ThirdParty;
+using ThirdParty.DownloadSystem;
+using UnityEngine;
+
+public class GameAssetUpdatePanel
+{
+    private AssetMD5Info remotelyMD5Info;
+    public System.Action OnCallBack;
+
+    private IDownloadUI _downloadUI;
+
+
+    private List<MD5FileInfo> checkFileInfo = new List<MD5FileInfo>();
+
+    public void StartUpdateAsset()
+    {
+        _downloadUI = HotSyncContent.DownloadUI;
+        _downloadUI.SetMassge("开始校验资源");
+        // DownloadFileData downloadFileData = new DownloadFileData();
+        // downloadFileData.remoteUrl = AssetBundleLoadManager.Instance.RootPersistentBundleURL + "MD5.txt";
+        // DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
+
+        DownloadFileData downloadFileData2 = new DownloadFileData();
+        downloadFileData2.remoteUrl =
+            $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/Bundle/MD5.txt";
+        downloadFileData2.maxCount = int.MaxValue;
+        downloadFileData2.timeOut = 10;
+        DownloadHander downloadHander2 = FileDownloadSystem.Instance.DownloadFile(downloadFileData2);
+        DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
+        // downLoadHanderGroup.AddHander(downloadHander);
+        downLoadHanderGroup.AddHander(downloadHander2);
+        downLoadHanderGroup.OnCallBack = delegate { ComparisonMD5(downloadHander2); };
+
+        downLoadHanderGroup.StartUpdate();
+    }
+
+    private void ComparisonMD5(DownloadHander downloadHander2)
+    {
+        _downloadUI.SetMassge("对比资源中");
+        // AssetMD5Info localMD5Info = JsonHelper.FromJson<AssetMD5Info>(downloadHander.Text);
+        string json = System.Text.UTF8Encoding.UTF8.GetString(downloadHander2.Data);
+        remotelyMD5Info = JsonHelper.FromJson<AssetMD5Info>(json);
+        Check();
+        // List<MD5FileInfo> updateFlieInfo = new List<MD5FileInfo>();
+        //
+        // for (int i = 0; i < remotelyMD5Info.fileInfo.Count; i++)
+        // {
+        //     MD5FileInfo remotelymd5FileInfo = remotelyMD5Info.fileInfo[i];
+        //     bool isYongYou = false;
+        //     for (int j = 0; j < localMD5Info.fileInfo.Count; j++)
+        //     {
+        //         MD5FileInfo localmd5FileInfo = localMD5Info.fileInfo[j];
+        //         if (remotelymd5FileInfo.fileName.Equals(localmd5FileInfo.fileName))
+        //         {
+        //             isYongYou = true;
+        //             if (!remotelymd5FileInfo.md5.Equals(localmd5FileInfo.md5))
+        //             {
+        //                 updateFlieInfo.Add(remotelymd5FileInfo);
+        //             }
+        //         }
+        //     }
+        //
+        //     if (!isYongYou)
+        //     {
+        //         updateFlieInfo.Add(remotelymd5FileInfo);
+        //     }
+        // }
+        //
+        // DownloadFile(updateFlieInfo);
+    }
+
+    private async void DownloadFile(List<MD5FileInfo> updateFlieInfo)
+    {
+        Debug.Log("开始下载文件" + updateFlieInfo.Count);
+     
+        CTask<bool> cTask = CTask<bool>.Create();
+
+        long size = 0;
+        for (int i = 0; i < updateFlieInfo.Count; i++)
+        {
+            MD5FileInfo md5FileInfo = updateFlieInfo[i];
+            if (md5FileInfo.size <= 0)
+            {
+                continue;
+            }
+
+            if (md5FileInfo.fileName.Contains("MD5"))
+            {
+                continue;
+            }
+
+
+            size += md5FileInfo.size;
+        }
+
+
+        string message = _downloadUI.GetLoadingText(46);
+
+        message = string.Format(message, size / 1024 / 1024);
+        _downloadUI.ShowPopWindow(0, message, () =>
+        {
+            _downloadUI.HidePopWindow();
+            cTask.SetResult(false);
+            Application.Quit();
+        }, () =>
+        {
+            _downloadUI.HidePopWindow();
+            cTask.SetResult(true);
+        });
+
+        await cTask;
+        if (!cTask.GetResult())
+        {
+            return;
+        }
+
+
+        DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
+
+        // long size = 0;
+        for (int i = 0; i < updateFlieInfo.Count; i++)
+        {
+            MD5FileInfo md5FileInfo = updateFlieInfo[i];
+            if (md5FileInfo.size <= 0)
+            {
+                continue;
+            }
+
+            if (md5FileInfo.fileName.Contains("MD5"))
+            {
+                continue;
+            }
+
+            DownloadFileData downloadFileData = new DownloadFileData();
+            // size += md5FileInfo.size;
+            downloadFileData.remoteUrl =
+                $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/Bundle/{md5FileInfo.fileName}";
+            Debug.Log("下载文件" + downloadFileData.remoteUrl);
+            downloadFileData.localPath = AssetBundleLoadManager.Instance.RootPersistentBundleURL + md5FileInfo.fileName;
+            DownloadHander fileDow = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
+            downLoadHanderGroup.AddHander(fileDow);
+        }
+
+        float sizeM = size / 1024f / 1024f;
+        SliderData sliderData = new SliderData();
+        sliderData.maxValue = size;
+        _downloadUI.SetMassge($"开始下载文件,个数{updateFlieInfo.Count}   大小{sizeM}");
+
+        
+   
+        
+        sliderData.CcurrValue = delegate
+        {
+            float m = downLoadHanderGroup.size / 1024f / 1024f;
+            float speed = downLoadHanderGroup.speed / 1024f;
+            _downloadUI.SetMassge(
+                $"开始下载文件,个数{updateFlieInfo.Count}   大小{m.ToString(".00")}M / {sizeM.ToString(".00")}M  速度{speed.ToString(".00")} Kb");
+            return downLoadHanderGroup.size;
+        };
+        _downloadUI.SetSlider(sliderData);
+
+
+        downLoadHanderGroup.OnCallBack = Check;
+        downLoadHanderGroup.StartUpdate();
+    }
+
+    private void Check()
+    {
+        _downloadUI.ClearSlider();
+        checkFileInfo.Clear();
+        checkFileInfo.AddRange(remotelyMD5Info.fileInfo);
+        CheckFilePool _checkFileThrans = new CheckFilePool();
+        _checkFileThrans.isStreamingAssetsPath = true;
+        _checkFileThrans.streamingAssetsPath = AssetBundleLoadManager.Instance.RootStreamingBundleURL;
+        SliderData sliderData = new SliderData();
+        sliderData.maxValue = checkFileInfo.Count;
+        _downloadUI.SetMassge($"校验本地文件");
+        sliderData.CcurrValue = delegate
+        {
+            float m = _checkFileThrans.FileCount();
+            if (_checkFileThrans.isFinish)
+            {
+                _downloadUI.ClearSlider();
+                if (_checkFileThrans.shiBaiFile.Count > 0)
+                {
+                    Debug.Log("还有错误文件需要下载");
+                    for (int i = 0; i < _checkFileThrans.shiBaiFile.Count; i++)
+                    {
+                        Debug.Log(_checkFileThrans.shiBaiFile[i].fileName);
+                    }
+
+
+                    DownloadFile(_checkFileThrans.shiBaiFile);
+                }
+                else
+                {
+                    OnCallBack?.Invoke();
+                }
+            }
+            else
+            {
+                _downloadUI.SetMassge(
+                    $"校验本地文件{m} / {sliderData.maxValue}");
+            }
+
+
+            return m;
+        };
+        _downloadUI.SetSlider(sliderData);
+
+
+        string rootPath = AssetBundleLoadManager.Instance.RootPersistentBundleURL;
+        _checkFileThrans.Start(rootPath, checkFileInfo);
+    }
+}

+ 3 - 0
Assets/Scripts/Core/UI/Core/GameAssetUpdatePanel.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 52aacd6f154f4f18b9c2486283b6c721
+timeCreated: 1733811705

+ 7 - 2
Assets/Scripts/Core/Utility/Helper/FileHelper.cs

@@ -29,9 +29,14 @@ namespace Fort23.Core
 
             if (!source.Exists)
                 return;
+            if (Directory.Exists(tarTgtDir))
+            {
+                Directory.Delete(tarTgtDir, true);
+            }
 
-            if (!target.Exists)
-                target.Create();
+            target = Directory.CreateDirectory(tarTgtDir);
+            // if (!target.Exists)
+            //     target.Create();
 
             FileInfo[] files = source.GetFiles();
             for (int i = 0; i < files.Length; i++)

+ 14 - 0
Assets/Scripts/GameStart/AssetUrlInfo.cs

@@ -0,0 +1,14 @@
+[System.Serializable]
+public class AssetUrlInfo
+{
+    public string _id;
+    public int buildVer;
+    public int apkVer;
+    public int assetsVer;
+    public string assetsUrl;
+    public int protocolVer;
+    /// <summary>
+    /// 1=本地模式
+    /// </summary>
+    public int loadType;
+}

+ 3 - 0
Assets/Scripts/GameStart/AssetUrlInfo.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 09977e68f18640c39ce00024b166b069
+timeCreated: 1733810910

+ 491 - 0
Assets/Scripts/GameStart/GameLoadDll.cs

@@ -0,0 +1,491 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using hirdParty.DownloadSystem;
+using HybridCLR;
+using ThirdParty;
+using ThirdParty.DownloadSystem;
+using UnityEditor;
+using UnityEngine;
+
+public class GameLoadDll
+{
+    private bool _isHadNetwork;
+    private bool _hadEnterGame;
+
+    private float _per;
+    private float _currentProgress;
+
+    private bool _isMarkClose;
+    private readonly Dictionary<string, byte[]> _assetBytes = new Dictionary<string, byte[]>();
+    string versionName = "versionInfo.txt";
+    private System.Action callBack;
+
+    private AssetMD5Info remoteMD5Info;
+    private GameStartUIPanel _downloadUI;
+
+
+    private string[] localVersionInfo;
+    private GameStart gameStart;
+
+    public void StartLoadDll(GameStart gameStart, string url, System.Action callBack)
+    {
+        this.gameStart = gameStart;
+        // _downloadUI = HotSyncContent.DownloadUI;
+        _downloadUI.SetMassge("开始校验脚本");
+
+        this.callBack = callBack;
+        if (HotSyncContent.isOpenHotFix)
+        {
+            if (HotSyncContent.isOpenDllStreamingLoad)
+            {
+                LoadStreamingDllLoad();
+            }
+            else
+            {
+                LoadBenDiVersion();
+            }
+        }
+    }
+
+
+    private void LoadStreamingDllLoad()
+    {
+        string DllMD5 = HotSyncContent.GetDllWebRequestPath("DllMD5.txt");
+        DownloadFileData versiondownloadFileData = new DownloadFileData();
+        versiondownloadFileData.remoteUrl = DllMD5;
+        DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(versiondownloadFileData);
+        downloadHander.OnFinishCallBack = delegate(DownloadHander hander)
+        {
+            remoteMD5Info =
+                JsonUtility.FromJson(hander.Text, typeof(AssetMD5Info)) as AssetMD5Info;
+            LoadLoaclDll();
+        };
+    }
+
+    private byte[] GetAssetBytes(string dllName)
+    {
+        if (_assetBytes.ContainsKey(dllName))
+        {
+            return _assetBytes[dllName];
+        }
+        else
+        {
+            Debug.Log("没有找到dll数据" + dllName);
+            return new byte[] { };
+        }
+    }
+
+
+    // private void LoadVersion()
+    // {
+    //     string md5Name = "DllMD5.txt";
+    //     string versionInfoUrl = ($"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{versionName}");
+    //     DownloadFileData versiondownloadFileData = new DownloadFileData();
+    //     versiondownloadFileData.remoteUrl = versionInfoUrl;
+    //     DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(versiondownloadFileData);
+    //     downloadHander.OnFinishCallBack = delegate(DownloadHander hander)
+    //     {
+    //         string[] remoteVersionInfo = hander.Text.Split('\n');
+    //         string versionInfo =
+    //             $"{remoteVersionInfo[0].Split('=')[1]}.{remoteVersionInfo[1].Split('=')[1]}.{remoteVersionInfo[2].Split('=')[1]}";
+    //         HotSyncContent.Currversion = versionInfo;
+    //         if (localVersionInfo[0]!=remoteVersionInfo[0])
+    //         {
+    //             // 本地版本和远程一致也需要更新,防止散文件错误
+    //             Debug.Log("本地版本更大,不需要更新");
+    //         }
+    //         else
+    //         {
+    //             LoadMD5();
+    //         }
+    //     };
+    // }
+
+    private void LoadBenDiVersion()
+    {
+        string versionInfoUrl = HotSyncContent.GetWebRequestPath(versionName);
+        DownloadFileData versiondownloadFileData = new DownloadFileData();
+        versiondownloadFileData.remoteUrl = versionInfoUrl;
+        DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(versiondownloadFileData);
+        downloadHander.OnFinishCallBack = delegate(DownloadHander hander)
+        {
+            localVersionInfo = hander.Text.Split('\n');
+            GetAssetUrl();
+        };
+    }
+
+
+    private async void GetAssetUrl()
+    {
+#if UNITY_EDITOR || UNITY_STANDALONE_WIN
+        string appSettingPath = "file://" + Application.streamingAssetsPath + "/AppSetting.txt";
+
+#elif UNITY_ANDROID
+      string  appSettingPath = Application.streamingAssetsPath + "/AppSetting.txt";
+
+#elif UNITY_IPHONE
+      string  appSettingPath = "file://"+ Application.streamingAssetsPath+"/AppSetting.txt";
+#endif
+
+        WWW loader = new WWW(appSettingPath);
+        while (!loader.isDone)
+        {
+        }
+
+        if (!string.IsNullOrEmpty(loader.error))
+        {
+            Debug.LogError(appSettingPath);
+            Debug.LogError(loader.error);
+        }
+
+        string url = "";
+        string settingData = loader.text;
+        string[] datas = settingData.Split('\n');
+        for (int i = 0; i < datas.Length; i++)
+        {
+            datas[i] = datas[i].Replace("\r", "");
+            string[] configInfo = datas[i].Split('=');
+            if (configInfo[0].Contains("//") || configInfo.Length <= 1)
+            {
+                continue;
+            }
+
+            if (configInfo[0].Equals("loginServer"))
+            {
+                url = configInfo[1];
+            }
+        }
+
+        url += "/client_config";
+
+        LoadAsset(url, localVersionInfo[0].Split('=')[1]);
+    }
+
+    private async Task LoadAsset(string url, string v)
+    {
+        var replace = v.Replace("\r", "");
+        _downloadUI.SetMassge($"等待服务器地址");
+        Debug.Log("等待下载资源服地址" + url);
+        Dictionary<string, string> dictionary = new Dictionary<string, string>();
+        dictionary.Add("buildVer", replace);
+        FormUrlEncodedContent formUrlEncodedContent = new FormUrlEncodedContent(dictionary);
+        HttpClient httpClient = new HttpClient();
+        httpClient.Timeout = TimeSpan.FromSeconds(5);
+        string json = "";
+        try
+        {
+            HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(url, formUrlEncodedContent);
+
+            if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
+            {
+                Debug.LogError(httpResponseMessage.RequestMessage);
+                _downloadUI.SetMassge($"获取配置错误,正在在重新获取!");
+                LoadAsset(url, v);
+                return;
+            }
+
+            json = await httpResponseMessage.Content.ReadAsStringAsync();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e);
+            LoadAsset(url, v);
+            return;
+        }
+
+        httpClient.Dispose();
+        Debug.Log(json);
+        _downloadUI.SetMassge($"地址获取成功");
+        // UnityWebRequest webRequest = UnityWebRequest.Post(url, dictionary);
+        // webRequest.timeout = 5;
+        // UnityWebRequestAsyncOperation unityWebRequestAsyncOperation = webRequest.SendWebRequest();
+        // while (!unityWebRequestAsyncOperation.isDone)
+        // {
+        //     yield return 0;
+        // }
+
+        // if (!string.IsNullOrEmpty(webRequest.error))
+        // {
+        //     Debug.LogError(webRequest.error);
+        //     _downloadUI.SetMassge($"获取配置错误,正在在重新获取!");
+        //     gameStart.StartCoroutine(LoadAsset(url, v));
+        // }
+
+        // string json = webRequest.downloadHandler.text;
+        AssetUrlInfo assetUrlInfo = JsonUtility.FromJson<AssetUrlInfo>(json);
+        HotSyncContent.AssetURL = assetUrlInfo.assetsUrl;
+        // webRequest.Dispose();
+        //HotSyncContent.AssetURL = "http://42.192.110.229/010";
+
+        HotSyncContent.loadType = assetUrlInfo.loadType;
+        HotSyncContent.assetsVer = assetUrlInfo.assetsVer;
+        HotSyncContent.Currversion = $"{assetUrlInfo.apkVer}.{assetUrlInfo.buildVer}.{assetUrlInfo.assetsVer}";
+        Debug.Log("版本号:" + HotSyncContent.Currversion);
+        Debug.Log(HotSyncContent.Currversion + "获得的下载资源服地址" + HotSyncContent.AssetURL);
+        if (localVersionInfo[0].Split('=')[1] != assetUrlInfo.apkVer.ToString())
+        {
+            Debug.Log("版本号:" + HotSyncContent.Currversion);
+            Debug.Log(HotSyncContent.Currversion + "获得的下载资源服地址" + HotSyncContent.AssetURL);
+            if (localVersionInfo[0].Split('=')[1] != assetUrlInfo.apkVer.ToString())
+            {
+                // 本地版本和远程一致也需要更新,防止散文件错误
+                Debug.LogError("本地版本更大,不需要更新");
+            }
+            else
+            {
+                LoadMD5();
+            }
+        }
+        else
+        {
+            LoadMD5();
+        }
+
+        // LoadVersion();
+        // Debug.Log(assetUrlInfo.assetsUrl);
+    }
+
+
+    private void LoadBenDiVersion(string[] remoteVersionInfo)
+    {
+        string versionInfoUrl = HotSyncContent.GetWebRequestPath(versionName);
+        DownloadFileData versiondownloadFileData = new DownloadFileData();
+        versiondownloadFileData.remoteUrl = versionInfoUrl;
+        DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(versiondownloadFileData);
+        downloadHander.OnFinishCallBack = delegate(DownloadHander hander) { };
+    }
+
+    private void LoadMD5()
+    {
+        _downloadUI.SetMassge($"资源检查中");
+        string md5Url =
+            $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/DLL/DllMD5.txt";
+        DownloadFileData versiondownloadFileData = new DownloadFileData();
+        versiondownloadFileData.remoteUrl = md5Url;
+        versiondownloadFileData.maxCount = int.MaxValue;
+        versiondownloadFileData.timeOut = 10;
+        DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(versiondownloadFileData);
+        downloadHander.OnFinishCallBack = delegate(DownloadHander hander)
+        {
+            remoteMD5Info =
+                JsonUtility.FromJson(hander.Text, typeof(AssetMD5Info)) as AssetMD5Info;
+            if (HotSyncContent.loadType == 1)
+            {
+                LoadLoaclDll();
+            }
+            else
+            {
+                JianYan();
+            }
+        };
+    }
+
+    private void JianYan()
+    {
+        List<MD5FileInfo> CheckFile = new List<MD5FileInfo>();
+        CheckFile.AddRange(remoteMD5Info.fileInfo);
+        string rootPath = HotSyncContent.AppHotfixResPath;
+        CheckFilePool _checkFileThrans = new CheckFilePool();
+        _checkFileThrans.isStreamingAssetsPath = true;
+        _checkFileThrans.streamingAssetsPath = HotSyncContent.RootStreamingURL + "/Dll/";
+        SliderData sliderData = new SliderData();
+        sliderData.maxValue = CheckFile.Count;
+        _downloadUI.SetMassge($"校验本地文件");
+        sliderData.CcurrValue = delegate
+        {
+            float m = _checkFileThrans.FileCount();
+            if (_checkFileThrans.isFinish)
+            {
+                // _downloadUI.ClearSlider();
+                if (_checkFileThrans.shiBaiFile != null && _checkFileThrans.shiBaiFile.Count > 0)
+                {
+                    DownJiaoBen(_checkFileThrans.shiBaiFile);
+                }
+                else
+                {
+                    LoadLoaclDll();
+                }
+            }
+            else
+            {
+                _downloadUI.SetMassge(
+                    $"校验本地文件{m} / {sliderData.maxValue}");
+            }
+
+
+            return m;
+        };
+        // _downloadUI.SetSlider(sliderData);
+
+        _checkFileThrans.Start(rootPath, CheckFile);
+    }
+
+    private void DownJiaoBen(List<MD5FileInfo> updateFlieInfo)
+    {
+        DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
+
+        long size = 0;
+        for (int i = 0; i < updateFlieInfo.Count; i++)
+        {
+            MD5FileInfo md5FileInfo = updateFlieInfo[i];
+            if (md5FileInfo.size <= 0)
+            {
+                continue;
+            }
+
+            DownloadFileData downloadFileData = new DownloadFileData();
+            size += md5FileInfo.size;
+            downloadFileData.remoteUrl =
+                $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/DLL/{md5FileInfo.fileName}";
+            Debug.Log("下载文件" + downloadFileData.remoteUrl);
+            downloadFileData.localPath = Path.Combine(HotSyncContent.AppHotfixResPath, md5FileInfo.fileName);
+            DownloadHander fileDow = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
+            downLoadHanderGroup.AddHander(fileDow);
+        }
+
+
+        float sizeM = size / 1024f / 1024f;
+        SliderData sliderData = new SliderData();
+        sliderData.maxValue = size;
+        _downloadUI.SetMassge($"开始下载文件,个数{updateFlieInfo.Count}   大小{sizeM}");
+
+        sliderData.CcurrValue = delegate
+        {
+            float m = downLoadHanderGroup.size / 1024f / 1024f;
+            float speed = downLoadHanderGroup.speed / 1024f;
+            _downloadUI.SetMassge(
+                $"开始下载文件,个数{updateFlieInfo.Count}   大小{m.ToString("0.00")}M / {sizeM.ToString("0.00")}M  速度{speed.ToString(".00")} Kb");
+            return downLoadHanderGroup.size;
+        };
+        // _downloadUI.SetSlider(sliderData);
+
+
+        downLoadHanderGroup.OnCallBack = JianYan;
+        downLoadHanderGroup.StartUpdate();
+    }
+
+    private void LoadLoaclDll()
+    {
+        DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
+        for (int i = 0; i < remoteMD5Info.fileInfo.Count; i++)
+        {
+            MD5FileInfo md5FileInfo = remoteMD5Info.fileInfo[i];
+            DownloadFileData downloadFileData = new DownloadFileData();
+
+            downloadFileData.remoteUrl = HotSyncContent.GetDllWebRequestPath(md5FileInfo.fileName);
+            Debug.Log("下载文件" + downloadFileData.remoteUrl);
+            DownloadHander fileDow = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
+            fileDow.OnFinishCallBack = delegate(DownloadHander hander)
+            {
+                byte[] dllBytes = hander.Data;
+                // dllBytes = DllTool.Instance.KeyDecryption(dllBytes);
+                _assetBytes[md5FileInfo.fileName] = dllBytes;
+                Debug.Log($"资源:{md5FileInfo.fileName}  大小:{dllBytes.Length}");
+                HomologousImageMode mode = HomologousImageMode.SuperSet;
+                // 加载Assembly对应的Dll,会自动为它hook。一旦AOT泛型函数的Native函数不存在,用解释器版本代码
+                LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(dllBytes, mode);
+                Debug.Log($"LoadMetadataForAOTAssembly:{md5FileInfo.fileName}. mode:{mode} ret:{err}");
+            };
+            downLoadHanderGroup.AddHander(fileDow);
+        }
+
+        downLoadHanderGroup.OnCallBack = LoadDll;
+        downLoadHanderGroup.StartUpdate();
+    }
+
+    private void LoadDll()
+    {
+        _downloadUI.SetMassge($"初始化资源中,请稍等");
+
+
+        Debug.Log("开始Fort23.Proto");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.Proto.dll.bytes"));
+        // Debug.Log("开始FMODUnity");
+        // System.Reflection.Assembly.Load(GetAssetBytes("FMODUnity.dll.bytes"));
+        // Debug.Log("开始FMODUnityResonance");
+        // System.Reflection.Assembly.Load(GetAssetBytes("FMODUnityResonance.dll.bytes"));
+        Debug.Log("开始Fort23.Core");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.Core.dll.bytes"));
+        Debug.Log("开始BGMController");
+        System.Reflection.Assembly.Load(GetAssetBytes("BGMController.dll.bytes"));
+        Debug.Log("开始Fort23.GameData");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.GameData.dll.bytes"));
+
+
+        Debug.Log("开始spine-unity");
+        System.Reflection.Assembly.Load(GetAssetBytes("spine-unity.dll.bytes"));
+        Debug.Log("开始spine-timeline");
+        System.Reflection.Assembly.Load(GetAssetBytes("spine-timeline.dll.bytes"));
+        Debug.Log("开始Fort23.CombatCore");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.CombatCore.dll.bytes"));
+        Debug.Log("开始Fort23.UTool");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.UTool.dll.bytes"));
+        Debug.Log("开始Fort23.Combat");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.Combat.dll.bytes"));
+        Debug.Log("开始Fort23.Mono");
+        System.Reflection.Assembly.Load(GetAssetBytes("Fort23.Mono.dll.bytes"));
+        // Debug.Log("spine-unity");
+        // System.Reflection.Assembly.Load(GetAssetBytes("spine-unity.dll"));
+        // Debug.Log("spine-timeline");
+        // System.Reflection.Assembly.Load(GetAssetBytes("spine-timeline.dll"));
+
+        Debug.Log("开始Assembly-CSharp");
+        System.Reflection.Assembly.Load(GetAssetBytes("Assembly-CSharp.dll.bytes"));
+
+        AppDomain.CurrentDomain.GetAssemblies()
+            .First(assembly => assembly.GetName().Name == "Assembly-CSharp");
+
+        Debug.Log("Assembly-CSharp.dll加载成功");
+        // 2. 开始执行热更新代码逻辑,加载Init进入游戏流程
+        Debug.Log("开始加载进入游戏");
+        string path = Application.persistentDataPath + "/Bundle/init";
+
+        if (!File.Exists(path))
+        {
+            path = Application.streamingAssetsPath + "/Bundle/init";
+        }
+
+        Debug.Log("path=" + path);
+
+        // string[] assemblyNames =
+        // {
+        //     "Fort23.Core.dll", "Fort23.MonoCore.dll", "Fort23.Mono.dll", "Fort23.Model.dll",
+        //     "Fort23.CommonCore.dll", "Fort23.Common.dll", "Assembly-CSharp.dll", "Fort23.UTool.dll",
+        //     "Fort23.GameData.dll", "spine-unity.dll", "spine-timeline.dll", "BGMController.dll", "Fort23.Combat.dll",
+        //     "Fort23.CombatCore.dll"
+        // };
+        // int addCount = 0;
+        // foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
+        // {
+        //     string assemblyName = $"{assembly.GetName().Name}.dll";
+        //     if (!((IList) assemblyNames).Contains(assemblyName))
+        //     {
+        //         continue;
+        //     }
+        //     Debug.Log(assemblyName);
+        //     foreach (var type in assembly.GetTypes())
+        //     {
+        //         
+        //         if ((typeof(MonoBehaviour).IsAssignableFrom(type)))
+        //         {
+        //             Debug.Log(type.Name);
+        //             var go = new GameObject();
+        //             // 我们不希望挂载到这个GameObject上的脚本执行
+        //             go.SetActive(false);
+        //             go.AddComponent(type);
+        //             GameObject.Destroy(go);
+        //             addCount++;
+        //         }
+        //     }
+        //    
+        // }
+
+        callBack?.Invoke();
+    }
+}

+ 3 - 0
Assets/Scripts/GameStart/GameLoadDll.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 8a2c4d9c05e94ada978f5e05325b3f87
+timeCreated: 1733810708

+ 16 - 2
Assets/Scripts/GameStart/GameStartDll.asmdef

@@ -1,3 +1,17 @@
 {
-	"name": "GameStartDll"
-}
+    "name": "GameStartDll",
+    "rootNamespace": "",
+    "references": [
+        "DownloadSystem",
+        "HybridCLR.Runtime"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 31 - 2
Assets/Scripts/GameStart/GameStartUIPanel.cs

@@ -1,9 +1,11 @@
 using System.Collections;
 using System.Collections.Generic;
+using ThirdParty.DownloadSystem;
 using UnityEngine;
+using UnityEngine.Events;
 using UnityEngine.UI;
 
-public class GameStartUIPanel : MonoBehaviour
+public class GameStartUIPanel : MonoBehaviour, IDownloadUI
 {
     public Text massgeText;
 
@@ -12,7 +14,34 @@ public class GameStartUIPanel : MonoBehaviour
     public void ShowMassge(string massge)
     {
         massgeText.text = massge;
-        
+    }
+
+    public GameObject MyGameObject { get; }
+
+    public void ClearSlider()
+    {
+    }
+
+    public void SetSlider(SliderData sliderData)
+    {
+    }
+
+    public void SetMassge(string massge)
+    {
+        massgeText.text = massge;
+    }
+
+    public void ShowPopWindow(int state, string message, UnityAction cancelCallBack, UnityAction okCallBack)
+    {
+    }
+
+    public void HidePopWindow()
+    {
+    }
+
+    public string GetLoadingText(int id)
+    {
+        return "";
     }
 
     public void SetSlider(float slider)

+ 2 - 1
Assets/Scripts/GameUI/Fort23.Mono.asmdef

@@ -12,7 +12,8 @@
         "GUID:6055be8ebefd69e48b49212b09b47b2f",
         "GUID:a53833a977d49cb4993f5eabd5a75200",
         "GUID:5efd170ecd8084500bed5692932fe14e",
-        "GUID:4c25c05f410a3a447a75c3b0909152ef"
+        "GUID:4c25c05f410a3a447a75c3b0909152ef",
+        "GUID:c03a7518d60db354c9d04ea9d1517aa1"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 11 - 0
Assets/Scripts/GameUI/GameApplction.cs

@@ -64,8 +64,19 @@ public class GameApplction : IGameStart
         AssetBundleLoadManager.Instance.BundleLoadType = BundleLoadType;
         AssetBundleLoadManager.Instance.h5Url = h5Url;
         await AssetBundleLoadManager.Instance.InitAssetsManager(null);
+#if !UNITY_EDITOR
+        AssetBundleLoadManager.Instance.AddBundleTask("fb010shader", delegate(BundleLoadBasic basic, object o)
+        {
+            if (basic.currBundle != null)
+            {
+                basic.currBundle.LoadAllAssets<Shader>();
+                Shader.WarmupAllShadersWait();
+            }
+        }, null);
+#endif
         gameStartUIPanel.ShowMassge("loadConfig");
         gameStartUIPanel.SetSlider(0.25f);
+
         await ConfigComponent.Instance.Preload();
         await AnimationCurveManager.Instance.Init();
         UGUIPackLoad uguiPackLoad = new UGUIPackLoad();

BIN
Assets/StreamingAssets/Bundle/01lz_e3c15c7a3af9a9dfa33512752ec236be


BIN
Assets/StreamingAssets/Bundle/01lz_fbb1c2b7f9a619e4d0b1edb55a476a95


BIN
Assets/StreamingAssets/Bundle/01np_dg_chu_mid_c018c37789d5224216c194f0c888b810


BIN
Assets/StreamingAssets/Bundle/01np_sk3_dg_l_8ded775e54c361aefcab925ea06c4310


+ 0 - 7
Assets/StreamingAssets/Bundle/01np_sk3_dg_l_8deda843050be69caa03bad2ce90e95e.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: Bigas3/7UyrUd5YHgcj6gCSGv9/TzKHWdc4OB1Pb4ZUPGJ8RxYmBR2A=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/01np_sk3_dg_l_8deda843050be69caa03bad2ce90e95e → Assets/StreamingAssets/Bundle/09flowmap_smoke_be1bb1a7dd890673bc900d2a0583fb0c


+ 1 - 1
Assets/StreamingAssets/Bundle/01np_dg_chu_mid_c018c37789d5224216c194f0c888b810.meta → Assets/StreamingAssets/Bundle/09flowmap_smoke_be1bb1a7dd890673bc900d2a0583fb0c.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: BiwYtCP5AH7tIje77JaUbh0qusgFexpjjeZZAMqtFl5QEnsLhIfSZuA=
+guid: CC4fs3n/AnO0I9aMusrakUmZNnJ+rgb7QOK/0l50VoweRvkqUN1XBLk=
 DefaultImporter:
   externalObjects: {}
   userData: 

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
Assets/StreamingAssets/Bundle/MD5.txt


+ 0 - 7
Assets/StreamingAssets/Bundle/UnityBundle.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DXwatX/+W31422+ZOO3EShZ1MjiRnkREyBvCKua10vi0K41rtFZjsUg=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/UnityBundle → Assets/StreamingAssets/Bundle/UnityBundle.unity3d


+ 1 - 1
Assets/StreamingAssets/Bundle/01lz_e3c15c7a3af9a9dfa33512752ec236be.meta → Assets/StreamingAssets/Bundle/UnityBundle.unity3d.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: Wy4WtC77UHg9ucf/pZzR6tuSAhZBBiYMeK9969/UCGI8eTXjMe0K6RQ=
+guid: Wn1Mty2sUS/0HUQ2g2dYYJASHqkYfjydkdnu0eTv29WbnMvtR4nv3yk=
 DefaultImporter:
   externalObjects: {}
   userData: 

BIN
Assets/StreamingAssets/Bundle/albedo_t1_c38e459a9673a6e3ab381a7c11ae8f5c


+ 0 - 7
Assets/StreamingAssets/Bundle/albedo_t1_c38e459a9673a6e3ab381a7c11ae8f5c.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: Dn1Jsi6uASmAG5eff2er4e10hiWalyTxHzIqU4pGYTxSo+2vR5cS+zg=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/albedo_t1_c80bb97e409ff295a0f9fe341c09e185


+ 0 - 7
Assets/StreamingAssets/Bundle/albedo_t1_c80bb97e409ff295a0f9fe341c09e185.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: Cy4Y5yOpAnslLi8ESubFN1eMs1xLRPVODgs+8HaaIWiltnWa5EjvikI=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/alpha_bd3_5a50b8fded097d08179d88dbb8b823bb


+ 0 - 7
Assets/StreamingAssets/Bundle/alpha_bd3_5a50b8fded097d08179d88dbb8b823bb.meta

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

BIN
Assets/StreamingAssets/Bundle/alpha_bd3_6251581ec759ab63cb2564907601b2e9


+ 0 - 7
Assets/StreamingAssets/Bundle/alpha_bd3_6251581ec759ab63cb2564907601b2e9.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: CntMsyn/An20qBBRo1I+cfdXhcBwAXvmfRAx2mc67tRGzParEExzyCQ=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/anse04_347b22c842e665b326462f1fc7254e35


+ 0 - 7
Assets/StreamingAssets/Bundle/anse04_347b22c842e665b326462f1fc7254e35.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DnxM5CmkVXpxIxoJJ1oBw6SRSBbO9Gp0PT/gw2+iCK7DlH6umuBAxeE=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
Assets/StreamingAssets/Bundle/assetConfig.txt


BIN
Assets/StreamingAssets/Bundle/bg_7riqdddi_23485c92d454f7b4d658c2f095335f42


+ 0 - 7
Assets/StreamingAssets/Bundle/bg_7riqdddi_23485c92d454f7b4d658c2f095335f42.meta

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

BIN
Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__4a52dade8f94650a5f6ecf3f577646cd


+ 0 - 7
Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__4a52dade8f94650a5f6ecf3f577646cd.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: XnxL53upB3uypXWk2Xx0LtzTGD5orxI4KJuRsCR/ky/jZgAo0qyPs6M=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__b15606fc5cadf925a20dcaf3d9077643


+ 0 - 7
Assets/StreamingAssets/Bundle/bg_icon_heianqianghualight2__b15606fc5cadf925a20dcaf3d9077643.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DnkftXupWn0ivxwaH4KFh/pmUZHkmU2NK+G/fAjqFSszuwINssk03OY=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/buffconfig_aa9f8161bfc7e57864de2476fffb29ec


+ 0 - 7
Assets/StreamingAssets/Bundle/buffconfig_aa9f8161bfc7e57864de2476fffb29ec.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DXhKtC6pUH56Egt5Nixs5XB1J46kRgOgQyOIKqY4At1/jl558y2ASr0=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/buffpoolconfig_59731e42325038421090b38ca4b091df


+ 0 - 7
Assets/StreamingAssets/Bundle/buffpoolconfig_59731e42325038421090b38ca4b091df.meta

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

BIN
Assets/StreamingAssets/Bundle/canvas_296748ebefe0bdaa0e7a478b76884ec4


+ 0 - 7
Assets/StreamingAssets/Bundle/canvas_296748ebefe0bdaa0e7a478b76884ec4.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DS8dtS2kUC/P9hXgzgHgXP2aXuFP7BgTsiJOGvjRPyBlJqTEMGLS0u4=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/canvas_c769c3beb02dfc51e445184531052cf6


+ 0 - 7
Assets/StreamingAssets/Bundle/canvas_c769c3beb02dfc51e445184531052cf6.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: XnpJtyj4UiqhTH+8T9Ua0VOZLrrvV1OeCPfl0rGatSsuHQoE2oM7LTc=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/chapter01_171e7fa4f734f6c776653362184dea75


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter01_171e7fa4f734f6c776653362184dea75.meta

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

BIN
Assets/StreamingAssets/Bundle/chapter01_1_691ba002f96cc113d293ffde6923902f


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter01_1_691ba002f96cc113d293ffde6923902f.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: BnpK4H+vBSid/OAxpWfdNeByu9Z3TtWAui8HFXNw9it/4RD5x4LmZEw=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/chapter01_673b6fb40595a6c484b593dcf26f5aa5


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter01_673b6fb40595a6c484b593dcf26f5aa5.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: XisY4S6pW3/iR5Jo9JhKnXCvR4ehkft/GC5XqgopEJV3om73Tlqfg4Q=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/chapter01_9a97f6ac4167102d46d257d5da329438


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter01_9a97f6ac4167102d46d257d5da329438.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: CHwZvSqsUC/TYLuo5H8QFLxdxwGtsvq/+DRyaOWQ8T0qm6x8oPCDJRQ=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/chapter01_aaacc779331e0762041ca45cfb078298


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter01_aaacc779331e0762041ca45cfb078298.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: Xn8a5CL5Ui+qMKcr/Ix9KPyowW6Yv+bvSufJbKb8vb7vmFu5PWOVPJs=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/chapter02_3405123f1988f6cd2995944ace318b68


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter02_3405123f1988f6cd2995944ace318b68.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: C3kcvCKuWn19XvshY3ZunnASxjDmmrYVYwUkaM1u9AOWfoYBA3/3LJc=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/chapter02_831c8284b8c043da3344572a77ec6e82


+ 0 - 7
Assets/StreamingAssets/Bundle/chapter02_831c8284b8c043da3344572a77ec6e82.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: C3JK53mpWn6/l6ZEqB5jFI3zEsrIwEmWYhZegJW7CxW27LFC5Y1CkgM=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/circle_ab_0dba39348e4751cd9f07c0af5713cc9a


+ 0 - 7
Assets/StreamingAssets/Bundle/circle_ab_0dba39348e4751cd9f07c0af5713cc9a.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DC4c4SKpAinrXVCrsA7V7G8mzkhAsRZDy/F52UnJYX4UJASgLAUP70E=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/circle_ab_27ad5172bd2f99a11ae0b61ddebfc53d


+ 0 - 7
Assets/StreamingAssets/Bundle/circle_ab_27ad5172bd2f99a11ae0b61ddebfc53d.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DHhNsSj4Uin18NdY/ShmXKfCCsyhLB5CFkiXWMVNJfefX+h9NA9OYSM=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/circle_ab_a9350ecaf13453d5932d48d2a0031d84


+ 0 - 7
Assets/StreamingAssets/Bundle/circle_ab_a9350ecaf13453d5932d48d2a0031d84.meta

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

BIN
Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_04ca1c8037005f08e6e730759c64b1e2


+ 0 - 7
Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_04ca1c8037005f08e6e730759c64b1e2.meta

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

BIN
Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7917fea59e8e0d554986983186c832ee


+ 0 - 7
Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7917fea59e8e0d554986983186c832ee.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: Bi9M5i+qB3PIeYMIoOipoqZdEgx9QIgbWcrn0Tug51or4/rso6o6sWQ=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7edef9698bf2eb1a83896c25a958615f


+ 0 - 7
Assets/StreamingAssets/Bundle/cloud_2x2_soft_ab_7edef9698bf2eb1a83896c25a958615f.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: WXMdsy6kVioPs1gML/CdqERnUHAUaNDoXt4uMzAliewiKQW6zCdXO+0=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/cloud_2x2_soft_t3_56368115444274cb13b8e83e5749f0f8


+ 0 - 7
Assets/StreamingAssets/Bundle/cloud_2x2_soft_t3_56368115444274cb13b8e83e5749f0f8.meta

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

BIN
Assets/StreamingAssets/Bundle/cloud_2x2_soft_t4_bd9d40a8f1beea67a31a04a1b5a3dd5e


+ 0 - 7
Assets/StreamingAssets/Bundle/cloud_2x2_soft_t4_bd9d40a8f1beea67a31a04a1b5a3dd5e.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: WnIbsi//VS6BBly6rKV9dDH+PjY1WKIm3ColMr6sE32tqRYZWmSv/kk=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/combathppanel_23f6085f168ef09b2a59ee67296de26d


+ 0 - 7
Assets/StreamingAssets/Bundle/combathppanel_23f6085f168ef09b2a59ee67296de26d.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: DCwc4X+vBnKfqq7ixQ28j9+GQl0lWtynD02BScMXlZr8lUbhEP0GKEM=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/combathppanel_871fc32c3e71e970e03ea5319b11f711


+ 0 - 7
Assets/StreamingAssets/Bundle/combathppanel_871fc32c3e71e970e03ea5319b11f711.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: WSlNsi+oB3iO8b0A9tzGdAemx2m3EKGCiWDZ1FBmlSTGnUOmHiTCk+g=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/combathppanel_944fec919043d03f9b23542afa97974f


+ 0 - 7
Assets/StreamingAssets/Bundle/combathppanel_944fec919043d03f9b23542afa97974f.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: Bn0fvCr4VygoqjGQ/nw5mpgJywoVVPwdilqyNawuSZqeTu0DH+PL1LA=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/StreamingAssets/Bundle/combatroot_6ea6b02b7feaa37039711b23a6bf21a9


+ 0 - 7
Assets/StreamingAssets/Bundle/combatroot_6ea6b02b7feaa37039711b23a6bf21a9.meta

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

BIN
Assets/StreamingAssets/Bundle/combatroot_a66623171aa0cb93c50d569e0ba7738f


+ 0 - 7
Assets/StreamingAssets/Bundle/combatroot_a66623171aa0cb93c50d569e0ba7738f.meta

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

BIN
Assets/StreamingAssets/Bundle/combatroot_f15bd57e6a48e1fb5efb907bf3bab695


+ 0 - 7
Assets/StreamingAssets/Bundle/combatroot_f15bd57e6a48e1fb5efb907bf3bab695.meta

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

BIN
Assets/StreamingAssets/Bundle/combatshowtextpanel_9fd8ce26d8d049623461c5e74eff141c


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff