#if UNITY_EDITOR using UnityEditor; //using ILRuntime.Generated.CrossBinding; using System.Collections.Generic; [System.Reflection.Obfuscation(Exclude = true)] public class ILRuntimeCLRBinding { [MenuItem("ILRuntime/通过自动分析热更DLL生成CLR绑定")] static void GenerateCLRBindingByAnalysis() { //用新的分析热更dll调用引用来生成绑定代码 ILRuntime.Runtime.Enviorment.AppDomain domain = new ILRuntime.Runtime.Enviorment.AppDomain(); using (System.IO.FileStream fs = new System.IO.FileStream("Assets/Res/Code/Game.HotUpdate.dll.bytes", System.IO.FileMode.Open, System.IO.FileAccess.Read)) { domain.LoadAssembly(fs); //Crossbind Adapter is needed to generate the correct binding code InitILRuntime(domain); ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(domain, "Assets/Game/Launcher/ILRuntime/Generated"); } AssetDatabase.Refresh(); } static void InitILRuntime(ILRuntime.Runtime.Enviorment.AppDomain appdomain) { //这里需要注册所有热更DLL中用到的跨域继承Adapter,否则无法正确抓取引用 //appdomain.RegisterCrossBindingAdaptor(new MonoBehaviourAdapter()); //appdomain.RegisterCrossBindingAdaptor(new CoroutineAdapter()); //appdomain.RegisterCrossBindingAdaptor(new GComponentAdapter()); //appdomain.RegisterCrossBindingAdaptor(new IEnumerator()); //appdomain.RegisterCrossBindingAdaptor(new ScriptableObjectAdapter()); //appdomain.RegisterCrossBindingAdaptor(new WindowAdapter()); //appdomain.RegisterValueTypeBinder(typeof(Vector3), new Vector3Binder()); } } #endif