ILRuntimeCLRBinding.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #if ILRuntime
  2. using UnityEditor;
  3. using UnityEngine;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using ETModel;
  8. public static class ILRuntimeCLRBinding
  9. {
  10. //[MenuItem("Tools/ILRuntime/Generate CLR Binding Code")]
  11. static void GenerateCLRBinding()
  12. {
  13. List<Type> types = new List<Type>();
  14. types.Add(typeof(int));
  15. types.Add(typeof(float));
  16. types.Add(typeof(long));
  17. types.Add(typeof(object));
  18. types.Add(typeof(string));
  19. types.Add(typeof(Array));
  20. types.Add(typeof(Vector2));
  21. types.Add(typeof(Vector3));
  22. types.Add(typeof(Quaternion));
  23. types.Add(typeof(GameObject));
  24. types.Add(typeof(UnityEngine.Object));
  25. types.Add(typeof(Transform));
  26. types.Add(typeof(RectTransform));
  27. types.Add(typeof(Time));
  28. types.Add(typeof(Debug));
  29. //所有DLL内的类型的真实C#类型都是ILTypeInstance
  30. types.Add(typeof(List<ILRuntime.Runtime.Intepreter.ILTypeInstance>));
  31. ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(types, "Assets/Model/ILBinding");
  32. AssetDatabase.Refresh();
  33. }
  34. [MenuItem("Tools/ILRuntime/Generate CLR Binding Code by Analysis")]
  35. static void GenerateCLRBindingByAnalysis()
  36. {
  37. GenerateCLRBinding();
  38. //用新的分析热更dll调用引用来生成绑定代码
  39. ILRuntime.Runtime.Enviorment.AppDomain domain = new ILRuntime.Runtime.Enviorment.AppDomain();
  40. using (FileStream fs = new FileStream("Assets/Res/Code/Hotfix.dll.bytes", FileMode.Open, FileAccess.Read))
  41. {
  42. domain.LoadAssembly(fs);
  43. //Crossbind Adapter is needed to generate the correct binding code
  44. ILHelper.InitILRuntime(domain);
  45. ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(domain, "Assets/Model/ILBinding");
  46. AssetDatabase.Refresh();
  47. }
  48. }
  49. }
  50. #endif