| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | using System;using System.Collections;using System.Reflection;using UnityEngine;using GFGGame.Launcher;namespace GFGGame{    public class HotUpdateCodeLoader : SingletonMonoBase<HotUpdateCodeLoader>    {        public Type[] allTypes;        public Type[] GetTypes()        {            return this.allTypes;        }        public void StartLoad()        {            StartCoroutine(StartLoadAssemblyHotfix());        }        IEnumerator StartLoadAssemblyHotfix()        {            LogServerHelperHttp.SendNodeLog((int)LogNode.StartLoadGameDll);            //ET.Log.Debug("ILRuntimeLauncher StartLoadAssemblyHotfix");            yield return new WaitForSeconds(0.1f);            var dllPath = "Assets/Res/Code/Game.HotUpdate.dll.bytes";            var asset = GFGAsset.Load<TextAsset>(dllPath);            byte[] assBytes = asset.bytes;            var pdbPath = "Assets/Res/Code/Game.HotUpdate.pdb.bytes";            asset = GFGAsset.Load<TextAsset>(pdbPath);            byte[] pdbBytes = asset.bytes;            if (LauncherConfig.ILRuntimeMode)            {                            }            else            {                StartCoroutine(LoadAssemblyJustInTime(assBytes, pdbBytes));            }            GFGAsset.Release(dllPath);            GFGAsset.Release(pdbPath);        }        IEnumerator LoadAssemblyJustInTime(byte[] assBytes, byte[] pdbBytes)        {            //mono模式            var assembly = Assembly.Load(assBytes, pdbBytes);            this.allTypes = assembly.GetTypes();            System.Type type = assembly.GetType("GFGGame.HotUpdate.HotUpdateEntry");            type.GetMethod("Start").Invoke(type, null);            yield break;        }    }}
 |