| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- using Assets.Game.Launcher.HotUpdateProxy;
 
- using ET;
 
- using FairyGUI;
 
- using System;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- namespace GFGGame.HotUpdate
 
- {
 
-     public class HotUpdateEntry
 
-     {
 
-         public static void Start()
 
-         {
 
-             Log.Debug("HotUpdateEntry Start 1");
 
- #if !UNITY_EDITOR
 
-             LoadMetadataForAOTAssembly();
 
- #endif
 
-             Log.Debug("HotUpdateEntry Start 2");
 
-             VEngine.Logger.Loggable = false;
 
-             //ET
 
-             try
 
-             {
 
-                 HotUpdateProxy.Instance.update = Game.Update;
 
-                 HotUpdateProxy.Instance.lateUpdate = Game.LateUpdate;
 
-                 HotUpdateProxy.Instance.onApplicationQuit = Game.Close;
 
-                 Game.EventSystem.Add(HotUpdateCodeLoader.Instance.GetTypes());
 
-                 Game.EventSystem.Publish(new ET.EventType.AppStart());
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 Log.Error(e);
 
-             }
 
-             Log.Debug("HotUpdateEntry Start 3");
 
-             GameController.Start();
 
-             Log.Debug("HotUpdateEntry Start 4");
 
-         }
 
-         /// <summary>
 
-         /// 为aot assembly加载原始metadata, 这个代码放aot或者热更新都行。
 
-         /// 一旦加载后,如果AOT泛型函数对应native实现不存在,则自动替换为解释模式执行
 
-         /// </summary>
 
-         public static unsafe void LoadMetadataForAOTAssembly()
 
-         {
 
-             // 可以加载任意aot assembly的对应的dll。但要求dll必须与unity build过程中生成的裁剪后的dll一致,而不能直接使用原始dll。
 
-             // 我们在BuildProcessor_xxx里添加了处理代码,这些裁剪后的dll在打包时自动被复制到 {项目目录}/HybridCLRData/AssembliesPostIl2CppStrip/{Target} 目录。
 
-             /// 注意,补充元数据是给AOT dll补充元数据,而不是给热更新dll补充元数据。
 
-             /// 热更新dll不缺元数据,不需要补充,如果调用LoadMetadataForAOTAssembly会返回错误
 
-             /// 
 
-             List<string> aotDllList = new List<string>
 
-             {
 
-                 "mscorlib.dll",
 
-                 "System.dll",
 
-                 "System.Core.dll", // 如果使用了Linq,需要这个
 
-                 "ThirdParty.dll",
 
-                 "Game.Launcher.dll",
 
-                 // "Newtonsoft.Json.dll",
 
-                 // "protobuf-net.dll",
 
-                 // "Google.Protobuf.dll",
 
-                 // "MongoDB.Bson.dll",
 
-                 // "DOTween.Modules.dll",
 
-                 // "UniTask.dll",
 
-             };
 
-             foreach (var aotDllName in aotDllList)
 
-             {
 
-                 byte[] dllBytes = GFGAsset.Load<TextAsset>($"{LauncherConfig.DllDirAOT}{aotDllName}.bytes").bytes;
 
-                 fixed (byte* ptr = dllBytes)
 
-                 {
 
-                     // 加载assembly对应的dll,会自动为它hook。一旦aot泛型函数的native函数不存在,用解释器版本代码
 
-                     int err = HybridCLR.RuntimeApi.LoadMetadataForAOTAssembly((IntPtr)ptr, dllBytes.Length);
 
-                     Debug.Log($"LoadMetadataForAOTAssembly:{aotDllName}. ret:{err}");
 
-                 }
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |