少年修仙传客户端基础资源
lwb
2021-02-25 f57f62816a6f621cb7e7946e7a97ef5c6f570a82
Merge branch 'ILRuntime'
9个文件已修改
227个文件已删除
34个文件已添加
32192 ■■■■■ 已修改文件
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/AssetSourceSetting.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ClearAllLocalSaveTool.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ClearAllLocalSaveTool.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ClientPackage.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/TableTool.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/VersionConfigs/Versions.txt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/IFix/Editor/Configure.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Editor.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Editor/ILRuntimeCLRBinding.cs 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Editor/ILRuntimeCLRBinding.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Editor/ILRuntimeCrossBinding.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Editor/ILRuntimeCrossBinding.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Generated.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder/QuaternionBinder.cs 346 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder/QuaternionBinder.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder/Vector2Binder.cs 460 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder/Vector2Binder.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder/Vector3Binder.cs 461 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Binder/Vector3Binder.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILBehaviourProxy.cs 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILBehaviourProxy.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILLauncherProxy.cs 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILLauncherProxy.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILOneLevelWindowProxy.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILOneLevelWindowProxy.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILRuntimeUtility.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILRuntimeUtility.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILWindowProxy.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/ILWindowProxy.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance/CoroutineAdapter.cs 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance/CoroutineAdapter.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance/DtcBasicAdapter.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance/DtcBasicAdapter.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance/GameNetPackBasicAdapter.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/ILRuntime/Src/Inheritance/GameNetPackBasicAdapter.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/arm64-v8a.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/arm64-v8a/libxlua.so 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/arm64-v8a/libxlua.so.meta 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/armeabi-v7a/libxlua.so 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/armeabi-v7a/libxlua.so.meta 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/x86/libxlua.so 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/Android/libs/x86/libxlua.so.meta 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/AssemblyInfo.cs.in 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/AssemblyInfo.cs.in.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/IJsonWrapper.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/IJsonWrapper.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonData.cs 1059 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonData.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonException.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonException.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonMapper.cs 966 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonMapper.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonMockWrapper.cs 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonMockWrapper.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonReader.cs 478 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonReader.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonWriter.cs 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/JsonWriter.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/Lexer.cs 912 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/Lexer.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/Netstandard15Polyfill.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/Netstandard15Polyfill.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/ParserToken.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/LitJson/ParserToken.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/ARM.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/ARM/xlua.dll 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/ARM/xlua.dll.meta 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/x64.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/x64/xlua.dll 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/x64/xlua.dll.meta 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/x86.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/x86/xlua.dll 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WSA/x86/xlua.dll.meta 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WebGL/xlua_webgl.cpp 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/WebGL/xlua_webgl.cpp.meta 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/iOS/HotfixFlags.cpp 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/iOS/HotfixFlags.cpp.meta 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/iOS/libxlua.a 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/iOS/libxlua.a.meta 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86/libxlua.so 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86/libxlua.so.meta 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86/xlua.dll 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86/xlua.dll.meta 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86_64/libxlua.so 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86_64/libxlua.so.meta 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86_64/xlua.dll 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/x86_64/xlua.dll.meta 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle.meta 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle/Contents.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle/Contents/Info.plist 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle/Contents/Info.plist.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle/Contents/MacOS.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle/Contents/MacOS/xlua 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/xlua.bundle/Contents/MacOS/xlua.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/CHANGELOG.txt 487 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/CHANGELOG.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Add_Remove_Lua_Lib.md 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Add_Remove_Lua_Lib.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Configure_EN.md 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Configure_EN.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Custom_Generate_EN.md 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Custom_Generate_EN.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Faq_EN.md 371 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Faq_EN.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Hotfix_EN.md 356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Hotfix_EN.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Materials.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Materials/logo.mat 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/Materials/logo.mat.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_API.doc 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_API.doc.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_API.md 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_API.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_API_EN.md 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_API_EN.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_Tutorial_EN.md 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua_Tutorial_EN.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua增加删除第三方lua库.doc 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua增加删除第三方lua库.doc.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua增加删除第三方lua库.md 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua增加删除第三方lua库.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.doc 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.doc.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.md 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua性能分析工具.doc 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua性能分析工具.doc.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua性能分析工具.md 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua性能分析工具.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua教程.doc 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua教程.doc.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua教程.md 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua教程.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua的配置.doc 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/XLua的配置.doc.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/compatible_bytecode.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/compatible_bytecode.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/configure.md 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/configure.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/custom_generate.md 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/custom_generate.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/faq.md 513 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/faq.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/features.md 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/features.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/hotfix.md 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/hotfix.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/logo.png.meta 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/signature.md 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/signature.md.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/xLua.png 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Doc/xLua.png.meta 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Editor.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Editor/XluaConfig.cs 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Editor/XluaConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/perf.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/perf/memory.lua.txt 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/perf/memory.lua.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/perf/profiler.lua.txt 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/perf/profiler.lua.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/xlua.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/xlua/util.lua.txt 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Resources/xlua/util.lua.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/CodeEmit.cs 1918 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/CodeEmit.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/CopyByValue.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/CopyByValue.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/DelegateBridge.cs 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/DelegateBridge.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Generator.cs 1874 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Generator.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Hotfix.cs 1739 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Hotfix.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/LinkXmlGen.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.cs.meta 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.tpl.txt 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaClassWrap.tpl.txt 589 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaClassWrap.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaClassWrapGCM.tpl.txt 517 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaClassWrapGCM.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaDelegateBridge.tpl.txt 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaDelegateBridge.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaDelegateWrap.tpl.txt 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaDelegateWrap.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaEnumWrap.tpl.txt 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaEnumWrap.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaEnumWrapGCM.tpl.txt 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaEnumWrapGCM.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaInterfaceBridge.tpl.txt 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaInterfaceBridge.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaRegister.tpl.txt 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaRegister.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaRegisterGCM.tpl.txt 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaRegisterGCM.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaWrapPusher.tpl.txt 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/LuaWrapPusher.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/PackUnpack.tpl.txt 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/PackUnpack.tpl.txt.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/TemplateCommon.lua.txt 472 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/Template/TemplateCommon.lua.txt.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/TemplateRef.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Editor/TemplateRef.cs.meta 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/GenAttributes.cs 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/GenAttributes.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/GenericDelegateBridge.cs 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/GenericDelegateBridge.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/InternalGlobals.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/InternalGlobals.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaBase.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaBase.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaDLL.cs 599 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaDLL.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaEnv.cs 747 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaEnv.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaException.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaException.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaFunction.cs 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaFunction.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaTable.cs 378 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/LuaTable.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/MethodWarpsCache.cs 583 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/MethodWarpsCache.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectCasters.cs 733 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectCasters.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectPool.cs 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectPool.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectTranslator.cs 1715 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectTranslator.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectTranslatorPool.cs 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/ObjectTranslatorPool.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/RawObject.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/RawObject.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/SignatureLoader.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/SignatureLoader.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/StaticLuaCallbacks.cs 1240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/StaticLuaCallbacks.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/TemplateEngine.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/TemplateEngine/TemplateEngine.cs 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/TemplateEngine/TemplateEngine.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/TypeExtensions.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/TypeExtensions.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Utils.cs 1539 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/XLua/Src/Utils.cs.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProjectSettings/PackageManagerSettings.asset 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProjectSettings/ProjectSettings.asset 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tools/Mono.Cecil.Mdb.dll 补丁 | 查看 | 原始文档 | blame | 历史
Tools/Mono.Cecil.Pdb.dll 补丁 | 查看 | 原始文档 | blame | 历史
Tools/Mono.Cecil.dll 补丁 | 查看 | 原始文档 | blame | 历史
Tools/Mono.Security.dll 补丁 | 查看 | 原始文档 | blame | 历史
Tools/System.Core.dll 补丁 | 查看 | 原始文档 | blame | 历史
Tools/System.Core.dll.mdb 补丁 | 查看 | 原始文档 | blame | 历史
Tools/System.dll 补丁 | 查看 | 原始文档 | blame | 历史
Tools/System.dll.mdb 补丁 | 查看 | 原始文档 | blame | 历史
Tools/XLuaHotfixInject.exe 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -67,3 +67,4 @@
Assets/ThirdParty.meta
LuaDebuggee.dll
Assets/XLua/Gen.meta
Assets/ILRuntime/Generated/
Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
@@ -377,6 +377,11 @@
                EditorApplication.delayCall += ExcuteBuildPatch;
            }
            if (GUILayout.Button("logic"))
            {
                EditorApplication.delayCall += ExcuteBuildLogic;
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();
@@ -582,6 +587,7 @@
            ExcuteBuildBuiltIn();
            ExcuteBuildLua();
            ExcuteBuildPatch();
            ExcuteBuildLogic();
            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
@@ -693,6 +699,26 @@
            DirectoryCopy(sourcePath, outputPath, ".meta");
        }
        private void ExcuteBuildLogic()
        {
            var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
            outputPath = StringUtility.Contact(outputPath, "/logic");
            if (Directory.Exists(outputPath))
                Directory.Delete(outputPath, true);
            var dllFile = ResourcesPath.ResourcesOutAssetPath + "logic/Logic.dll.bytes";
            var outDllFile = StringUtility.Contact(outputPath, "/Logic.dll.bytes");
            var pdbFile = ResourcesPath.ResourcesOutAssetPath + "logic/Logic.pdb";
            var outPdbFile = StringUtility.Contact(outputPath, "/Logic.pdb");
            if (!File.Exists(dllFile))
            {
                DebugEx.LogErrorFormat("打包错误:{0} ä¸å­˜åœ¨", dllFile);
                return;
            }
            FileExtersion.MakeSureDirectory(outDllFile);
            File.Copy(dllFile, outDllFile);
            File.Copy(pdbFile, outPdbFile);
        }
        private void ExcuteBuildLevels()
        {
            UpdateLevelSetting.SetAllLevelAssetBundleName();
Assets/Editor/Tool/AssetSourceSetting.cs
@@ -25,6 +25,7 @@
            AssetSource.uiFromEditor = EditorGUILayout.Toggle("uiFromEditor:", AssetSource.uiFromEditor);
            AssetSource.builtInFromEditor = EditorGUILayout.Toggle("builtInFromEditor:", AssetSource.builtInFromEditor);
            AssetSource.patchFromEditor = EditorGUILayout.Toggle("patchFromEditor:", AssetSource.patchFromEditor);
            AssetSource.logicFromEditor = EditorGUILayout.Toggle("logicFromEditor:", AssetSource.logicFromEditor);
            EditorGUILayout.Space();
            if (GUILayout.Button("全部切换"))
            {
Assets/Editor/Tool/ClearAllLocalSaveTool.cs
New file
@@ -0,0 +1,13 @@
using UnityEditor;
using UnityEngine;
public class ClearAllLocalSaveTool
{
    [MenuItem("Tools/清除LocalSave")]
    public static void ClearAllLocalSave()
    {
        LocalSave.DeleteAll();
    }
}
Assets/Editor/Tool/ClearAllLocalSaveTool.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 44556fe6ad0f763438fceaa932d50e8a
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Editor/Tool/ClientPackage.cs
@@ -61,6 +61,7 @@
    /// <param name="_replace">ios打包导出xcode工程模式,Append和Replace</param>
    public static void BuildPublishers(string _sdkPath, string _assetBundlePath, string _output, string _publisherString, int _buildIndex, bool _development, bool _replace)
    {
        var publisherIds = new List<string>();
        var tempStrings = _publisherString.Split(StringUtility.splitSeparator, StringSplitOptions.RemoveEmptyEntries);
@@ -263,7 +264,7 @@
                    }
                }
            }
            //剔除表资源
            if (!includeConfig)
            {
@@ -548,60 +549,47 @@
    private static void PreBuild(string _publisher, int _buildIndex)
    {
        try
        var newVersionConfigPath = StringUtility.Contact("Assets/Resources/VersionConfig", ".asset");
        var versionName = string.Empty;
        var fromVersionConfig = GetVersionConfig(_publisher, out versionName);
        var newVersionConfig = ScriptableObject.CreateInstance<VersionConfig>();
        if (File.Exists(newVersionConfigPath))
        {
            var newVersionConfigPath = StringUtility.Contact("Assets/Resources/VersionConfig", ".asset");
            var versionName = string.Empty;
            var fromVersionConfig = GetVersionConfig(_publisher, out versionName);
            var newVersionConfig = ScriptableObject.CreateInstance<VersionConfig>();
            if (File.Exists(newVersionConfigPath))
            {
                AssetDatabase.DeleteAsset(newVersionConfigPath);
            }
            VersionConfig.Copy(fromVersionConfig, newVersionConfig);
            newVersionConfig.buildTime = DateTime.Now.ToString("yy/MM/dd--HH:mm");
            newVersionConfig.buildIndex = _buildIndex;
            if (File.Exists(Application.dataPath + "/Resources/Game.txt"))
            {
                File.Delete(Application.dataPath + "/Resources/Game.txt");
            }
            File.WriteAllText(Application.dataPath + "/Resources/Game.txt", GetGameId(_publisher));
            AssetDatabase.CreateAsset(newVersionConfig, newVersionConfigPath);
            EditorUtility.SetDirty(newVersionConfig);
            SetIconAndSplashImage(versionName);
            //SetCreateRoleAnimation();
            PlayerSettings.companyName = "TheSecondWorld";
            PlayerSettings.productName = newVersionConfig.productName;
            PlayerSettings.applicationIdentifier = newVersionConfig.bundleIdentifier;
            PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation;
            PlayerSettings.allowedAutorotateToLandscapeLeft = true;
            PlayerSettings.allowedAutorotateToLandscapeRight = true;
            PlayerSettings.allowedAutorotateToPortrait = false;
            PlayerSettings.allowedAutorotateToPortraitUpsideDown = false;
            PlayerSettings.bundleVersion = VersionConfig.GetVersionNumber(newVersionConfig.version).ToString();
            if (GetBuildTarget() == BuildTargetGroup.Android)
            {
                CSObjectWrapEditor.Generator.ClearAll();
                CSObjectWrapEditor.Generator.GenAll();
            }
        }
        catch (Exception ex)
        {
            Debug.Log(ex);
        }
        finally
        {
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            AssetDatabase.DeleteAsset(newVersionConfigPath);
        }
        VersionConfig.Copy(fromVersionConfig, newVersionConfig);
        newVersionConfig.buildTime = DateTime.Now.ToString("yy/MM/dd--HH:mm");
        newVersionConfig.buildIndex = _buildIndex;
        if (File.Exists(Application.dataPath + "/Resources/Game.txt"))
        {
            File.Delete(Application.dataPath + "/Resources/Game.txt");
        }
        File.WriteAllText(Application.dataPath + "/Resources/Game.txt", GetGameId(_publisher));
        AssetDatabase.CreateAsset(newVersionConfig, newVersionConfigPath);
        EditorUtility.SetDirty(newVersionConfig);
        SetIconAndSplashImage(versionName);
        //SetCreateRoleAnimation();
        PlayerSettings.companyName = "TheSecondWorld";
        PlayerSettings.productName = newVersionConfig.productName;
        PlayerSettings.applicationIdentifier = newVersionConfig.bundleIdentifier;
        PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation;
        PlayerSettings.allowedAutorotateToLandscapeLeft = true;
        PlayerSettings.allowedAutorotateToLandscapeRight = true;
        PlayerSettings.allowedAutorotateToPortrait = false;
        PlayerSettings.allowedAutorotateToPortraitUpsideDown = false;
        PlayerSettings.bundleVersion = VersionConfig.GetVersionNumber(newVersionConfig.version).ToString();
        //生成ILruntiemd CLR ç»‘定代码
        ILRuntimeCLRBinding.GenerateCLRBinding();
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
    static VersionConfig GetVersionConfig(string _publisher, out string _versionName)
Assets/Editor/Tool/TableTool.cs
@@ -274,6 +274,7 @@
    /// <param name="setPath"></param>
    private static void PathCache(string setPath = "")
    {
        DebugEx.Log("路径缓存:" + setPath);
        string configPath = UnityEngine.Application.dataPath;
        configPath = configPath + "/ResourcesOut/Refdata/Config/PathCache/TablePath.txt";
        FileStream configPathTxt = File.Open(configPath, FileMode.Open);
Assets/Editor/VersionConfigs/Versions.txt
@@ -8,4 +8,4 @@
9998    xmyjgame    xmyjgame    1    1.100.2    aaa    4    xbqy    1    1    ä»™é­”战场    com.xfzc.yj.quick    mengxiandao    mengxiandao2020    mengxiandao    mengxiandao2020        0    0    (-15,64)    å‡ºç‰ˆå•位名称:天津电子出版社有限公司 è‘—作权人名称:广州秒乐网络科技有限公司</r>运营单位:广州游路网络科技有限公司 æ¸¸æˆå†…容类别:移动游戏 æ‰¹æ–‡å·:国新出审[2019]1132号 æ¸¸æˆç‰ˆå·:ISBN 978-7-498-06329-8    xmyjgame    0    
9527    TheSecondWorld    test    0    1.100.1    aaa    911    xbqy    2    0    ä»™å®å¥‡ç¼˜    com.secondworld.snxxz    thesecondworld    thesecondworld2018    thesecondworld    thesecondworld2018        1    0     (-32,144)            0    
9528    gtgame    gtgame    1    1.100.1    aaa    1    xbqy    3    0    éŽ®é­”è¨£    com.sanxiagame.zmjgp    gtgame    Fjsx123123    Key0    Fjsx123123        1    0    (0,80)        gtgame    0    1
911    TheSecondWorld    test    0    1.100.1    aaa    911    xbqy    2    0    ä»™å®å¥‡ç¼˜    com.secondworld.snxxz    thesecondworld    thesecondworld2018    thesecondworld    thesecondworld2018        1    0     (-32,144)            0
911    TheSecondWorld    test    0    1.100.1    aaa    911    xbqy    0    0    ä»™å®å¥‡ç¼˜    com.secondworld.snxxz    thesecondworld    thesecondworld2018    thesecondworld    thesecondworld2018        1    0     (-32,144)            0
Assets/IFix/Editor/Configure.cs
@@ -30,10 +30,20 @@
            get
            {
                return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
                        where type.Namespace == null || (!type.Namespace.StartsWith("XLua") && !type.Namespace.StartsWith("IFix"))
                        where type.Namespace == null ||
                         (!type.Namespace.StartsWith("XLua") &&
                         !type.Namespace.StartsWith("IFix") &&
                         type.Namespace != "ILRuntime.Runtime.Generated")
                        select type);
            }
        }
        [Filter]
        static bool Filter(System.Reflection.MethodInfo methodInfo)
        {
            return methodInfo.DeclaringType.FullName == "Test"
                && (methodInfo.Name == "Div" || methodInfo.Name == "Mult");
        }
    }
    //放置配置的
Assets/ILRuntime.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dea2d610c46c63249bbfd24044a6c75f
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Editor.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a2619b749b100f847a3fdbddc509bebc
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Editor/ILRuntimeCLRBinding.cs
New file
@@ -0,0 +1,223 @@
#if UNITY_EDITOR
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using ILCrossBinding;
using Snxxz.UI;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
[System.Reflection.Obfuscation(Exclude = true)]
public class ILRuntimeCLRBinding
{
    const string genPath = "Assets/ILRuntime/Generated";
    //需要生成绑定代码的类, litjson å’Œ c# system ä¸‹çš„代码不要在这生成,会有问题
    //此处配置的类,生成代码会覆盖自动生成的。
    static List<Type> types = new List<Type>
    {
        //Unity相关
        typeof(Transform),
        typeof(RectTransform),
        typeof(GameObject),
        typeof(Component),
        typeof(UnityEngine.Object),
        typeof(MonoBehaviour),
        typeof(Behaviour),
        typeof(Text),
        typeof(Button),
        typeof(Image),
        //主工程相关
        typeof(Redpoint),
        typeof(Int2),
        typeof(Int3),
        typeof(UILoader),
        typeof(ComponentExtersion),
        typeof(TransformExtension),
        typeof(LocalSave),
        typeof(ILBehaviourProxy),
        typeof(WidgetBehavior),
        typeof(ILWindowProxy),
        typeof(ILOneLevelWindowProxy),
        typeof(ModelCenter),
        typeof(Singleton<ModelCenter>),
        typeof(WindowCenter),
        typeof(SingletonMonobehaviour<WindowCenter>),
        typeof(WindowJumpMgr),
        typeof(Singleton<WindowJumpMgr>),
        typeof(DebugEx),
        typeof(TextEx),
        typeof(ButtonEx),
        typeof(ImageEx),
        typeof(TimeUtility),
        typeof(HttpRequest),
        typeof(SingletonMonobehaviour<HttpRequest>),
        typeof(SysNotifyMgr),
        typeof(SingletonMonobehaviour<SysNotifyMgr>),
        typeof(PackageRegedit),
        typeof(GameNetSystem),
        typeof(Singleton<GameNetSystem>),
        typeof(GameNetPackBasic),
        typeof(OperationTimeHepler),
        typeof(Singleton<OperationTimeHepler>),
        typeof(DtcBasic),
        typeof(PlayerDatas),
        typeof(Singleton<PlayerDatas>),
        typeof(PlayerBaseData),
        typeof(Language),
        typeof(TimeMgr),
        typeof(SingletonMonobehaviour<TimeMgr>),
        typeof(CommonItemBaisc),
        typeof(ItemCell),
        typeof(ItemTipUtility),
        typeof(SkillModel),
        typeof(VipModel),
        typeof(ItemCellModel),
        typeof(ItemModel),
        typeof(PackModel),
        typeof(EquipModel),
        //表
        typeof(ItemConfig),
        typeof(FuncConfigConfig),
        typeof(SysInfoConfig)
    };
    //需要排除的方法
    static List<object[]> excludeMethods = new List<object[]>()
    {
        new object[]{typeof(Text),"OnRebuildRequested"},
        new object[]{typeof(MonoBehaviour),"get_runInEditMode"},
        new object[]{typeof(MonoBehaviour),"set_runInEditMode"},
    };
    static HashSet<MethodBase> GetExcludeMethod()
    {
        var set = new HashSet<MethodBase>();
        foreach (var objs in excludeMethods)
        {
            var type = (Type)objs[0];
            var m = type.GetMethod((string)objs[1]);
            set.Add(m);
        }
        return set;
    }
    [MenuItem("ILRuntime/清除CLR绑定")]
    static void ClearCLRBinding()
    {
        if (Directory.Exists(genPath))
        {
            Directory.Delete(genPath, true);
        }
        AssetDatabase.Refresh();
    }
    [MenuItem("ILRuntime/生成CLR绑定")]
    public static void GenerateCLRBinding()
    {
        ClearCLRBinding();
        GenerateCLRBindingByAnalysis();
        GenerateCLRBindingByTypes();
        MergeGenerated();
        AssetDatabase.Refresh();
        DebugEx.Log("ILRuntime CLR绑定代码生成成功!");
    }
    // [MenuItem("ILRuntime/自动分析Dll生成CLR绑定")]
    static void GenerateCLRBindingByAnalysis()
    {
        var path = genPath + "/Analysis";
        //用热更dll调用引用来生成绑定代码
        ILRuntime.Runtime.Enviorment.AppDomain domain = new ILRuntime.Runtime.Enviorment.AppDomain();
        using (System.IO.FileStream fs = new System.IO.FileStream("Assets/ResourcesOut/logic/Logic.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, path);
        }
    }
    // [MenuItem("ILRuntime/根据配置列表生成CLR绑定")]
    static void GenerateCLRBindingByTypes()
    {
        var path = genPath + "/Types";
        //用自定义的列表来生成绑定代码
        ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(types, path, GetExcludeMethod());
    }
    //合并生成的代码
    static void MergeGenerated()
    {
        var exist = new HashSet<string>();
        var added = new List<string>();
        var path1 = System.Environment.CurrentDirectory + "/" + genPath + "/Types";
        var dic1 = new DirectoryInfo(path1);
        //获取types生成的列表
        foreach (var file in dic1.GetFiles())
        {
            exist.Add(file.Name);
        }
        var path2 = System.Environment.CurrentDirectory + "/" + genPath + "/Analysis";
        var dic2 = new DirectoryInfo(path2);
        //dll存在和types一样的代码,就删除,其余的视为新增
        foreach (var file in dic2.GetFiles())
        {
            if (exist.Contains(file.Name))
                file.Delete();
            else
            {
                var className = GetClassName(file.FullName);
                if (!string.IsNullOrEmpty(className))
                    added.Add(className);
            }
        }
        //将dll新增代码写入到CLRBindings中注册
        var lines = File.ReadAllLines(path1 + "/CLRBindings.cs").ToList();
        int index = 0;
        for (int i = 0; i < lines.Count; i++)
        {
            if (lines[i].Contains("public static void Initialize"))
            {
                index = i;
                break;
            }
        }
        var space = "            ";
        lines.Insert(index + 2, space + "//配置列表的CLR绑定类");
        foreach (var name in added)
        {
            lines.Insert(index + 2, space + name + ".Register(app);");
        }
        lines.Insert(index + 2, space + "//自动分析dll新增的CLR绑定类");
        File.WriteAllLines(path1 + "/CLRBindings.cs", lines);
    }
    //获取文件的类名
    static string GetClassName(string path)
    {
        var lines = File.ReadAllLines(path).ToList();
        foreach (var line in lines)
        {
            if (line.Contains("class"))
            {
                var strs = line.Split(' ');
                return strs[strs.Length - 1];
            }
        }
        return null;
    }
    //这里需要注册所有热更DLL中用到的跨域继承Adapter,否则无法正确抓取引用
    static void InitILRuntime(ILRuntime.Runtime.Enviorment.AppDomain domain)
    {
        domain.RegisterCrossBindingAdaptor(new CoroutineAdapter());
        domain.RegisterCrossBindingAdaptor(new DtcBasicAdapter());
        domain.RegisterCrossBindingAdaptor(new GameNetPackBasicAdapter());
    }
}
#endif
Assets/ILRuntime/Editor/ILRuntimeCLRBinding.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b25613ceb76187a4f928518b9ac1dd22
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Editor/ILRuntimeCrossBinding.cs
New file
@@ -0,0 +1,42 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using System;
[System.Reflection.Obfuscation(Exclude = true)]
public class ILRuntimeCrossBinding : EditorWindow
{
    [MenuItem("ILRuntime/生成跨域继承适配器")]
    public static void ShowWindow()
    {
        EditorWindow.GetWindow<ILRuntimeCrossBinding>("生成跨域继承适配器").Show();
    }
    Type type = typeof(DtcBasic);
    private void OnGUI()
    {
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        GUILayout.Label(string.Format("类名:{0}", type.Name));
        EditorGUILayout.Space();
        if (GUILayout.Button("生成"))
        {
            GenerateCrossbindAdapter();
        }
    }
    void GenerateCrossbindAdapter()
    {
        var path = "Assets/Scripts/ILRuntime/Src/Inheritance/{0}Adapter.cs";
        using (System.IO.StreamWriter sw = new System.IO.StreamWriter(string.Format(path, type.Name)))
        {
            sw.WriteLine(ILRuntime.Runtime.Enviorment.CrossBindingCodeGenerator.GenerateCrossBindingAdapterCode(type, "ILCrossBinding"));
        }
        AssetDatabase.Refresh();
        DebugEx.Log("跨域继承适配生成成功");
    }
}
#endif
Assets/ILRuntime/Editor/ILRuntimeCrossBinding.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 077d29cbd51762b43bf8163a1b0df776
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Generated.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9265fa54816eaa241be3e83a494799a7
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 160d44d5c8f210a4a8f72a7d2167b131
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Binder.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 63c35164a7435f845b547dd77d13d13a
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Binder/QuaternionBinder.cs
New file
@@ -0,0 +1,346 @@
using UnityEngine;
using System.Collections.Generic;
using ILRuntime.Other;
using System;
using System.Reflection;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using ILRuntime.CLR.Method;
using ILRuntime.CLR.TypeSystem;
using ILRuntime.Runtime.Stack;
public unsafe class QuaternionBinder : ValueTypeBinder<Quaternion>
{
    Vector3Binder vector3Binder;
    bool vector3BinderGot;
    Vector3Binder Vector3Binder
    {
        get
        {
            if (!vector3BinderGot)
            {
                vector3BinderGot = true;
                var vector3Type = CLRType.AppDomain.GetType(typeof(Vector3)) as CLRType;
                vector3Binder = vector3Type.ValueTypeBinder as Vector3Binder;
            }
            return vector3Binder;
        }
    }
    public override unsafe void AssignFromStack(ref Quaternion ins, StackObject* ptr, IList<object> mStack)
    {
        var v = ILIntepreter.Minus(ptr, 1);
        ins.x = *(float*)&v->Value;
        v = ILIntepreter.Minus(ptr, 2);
        ins.y = *(float*)&v->Value;
        v = ILIntepreter.Minus(ptr, 3);
        ins.z = *(float*)&v->Value;
        v = ILIntepreter.Minus(ptr, 4);
        ins.w = *(float*)&v->Value;
    }
    public override unsafe void CopyValueTypeToStack(ref Quaternion ins, StackObject* ptr, IList<object> mStack)
    {
        var v = ILIntepreter.Minus(ptr, 1);
        *(float*)&v->Value = ins.x;
        v = ILIntepreter.Minus(ptr, 2);
        *(float*)&v->Value = ins.y;
        v = ILIntepreter.Minus(ptr, 3);
        *(float*)&v->Value = ins.z;
        v = ILIntepreter.Minus(ptr, 4);
        *(float*)&v->Value = ins.w;
    }
    public override void RegisterCLRRedirection(ILRuntime.Runtime.Enviorment.AppDomain appdomain)
    {
        BindingFlags flag = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;
        MethodBase method;
        Type[] args;
        Type type = typeof(Quaternion);
        args = new Type[] { typeof(float), typeof(float), typeof(float), typeof(float) };
        method = type.GetConstructor(flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, NewQuaternion);
        args = new Type[] { typeof(Quaternion), typeof(Quaternion) };
        method = type.GetMethod("op_Multiply", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Multiply);
        args = new Type[] { typeof(Quaternion), typeof(Vector3) };
        method = type.GetMethod("op_Multiply", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Multiply2);
        args = new Type[] { typeof(Quaternion), typeof(Quaternion) };
        method = type.GetMethod("op_Equality", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Equality);
        args = new Type[] { typeof(Quaternion), typeof(Quaternion) };
        method = type.GetMethod("op_Inequality", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Inequality);
        args = new Type[] { typeof(Quaternion), typeof(Quaternion) };
        method = type.GetMethod("Dot", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Dot);
        args = new Type[] { typeof(Quaternion), typeof(Quaternion) };
        method = type.GetMethod("Angle", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Angle);
        args = new Type[] { typeof(Vector3) };
        method = type.GetMethod("Euler", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Euler);
        args = new Type[] { typeof(float), typeof(float), typeof(float) };
        method = type.GetMethod("Euler", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Quaternion_Euler2);
        args = new Type[] { };
        method = type.GetMethod("get_eulerAngles", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_EulerAngle);
        args = new Type[] { };
        method = type.GetMethod("get_identity", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Identity);
    }
    StackObject* Quaternion_Multiply(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        Quaternion left, right;
        var ptr = ILIntepreter.Minus(esp, 1);
        ParseQuaternion(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseQuaternion(out left, intp, ptr, mStack);
        var res = left * right;
        PushQuaternion(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Quaternion_Multiply2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        Vector3 vec;
        Quaternion left;
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3Binder.ParseVector3(out vec, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseQuaternion(out left, intp, ptr, mStack);
        vec = left * vec;
        PushVector3(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Quaternion_Equality(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Quaternion left, right;
        ParseQuaternion(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseQuaternion(out left, intp, ptr, mStack);
        var res = left == right;
        ret->ObjectType = ObjectTypes.Integer;
        ret->Value = res ? 1 : 0;
        return ret + 1;
    }
    StackObject* Quaternion_Inequality(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Quaternion left, right;
        ParseQuaternion(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseQuaternion(out left, intp, ptr, mStack);
        var res = left != right;
        ret->ObjectType = ObjectTypes.Integer;
        ret->Value = res ? 1 : 0;
        return ret + 1;
    }
    StackObject* Quaternion_Dot(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Quaternion left, right;
        ParseQuaternion(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseQuaternion(out left, intp, ptr, mStack);
        var res = Quaternion.Dot(left, right);
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Quaternion_Angle(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Quaternion left, right;
        ParseQuaternion(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseQuaternion(out left, intp, ptr, mStack);
        var res = Quaternion.Angle(left, right);
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Quaternion_Euler(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 vec;
        Vector3Binder.ParseVector3(out vec, intp, ptr, mStack);
        var res = Quaternion.Euler(vec);
        PushQuaternion(ref res, intp, ptr, mStack);
        return ret + 1;
    }
    StackObject* Quaternion_Euler2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 3);
        float x, y, z;
        var ptr = ILIntepreter.GetObjectAndResolveReference(ILIntepreter.Minus(esp, 1));
        z = *(float*)&ptr->Value;
        ptr = ILIntepreter.GetObjectAndResolveReference(ILIntepreter.Minus(esp, 2));
        y = *(float*)&ptr->Value;
        ptr = ILIntepreter.GetObjectAndResolveReference(ILIntepreter.Minus(esp, 3));
        x = *(float*)&ptr->Value;
        var res = Quaternion.Euler(x, y, z);
        PushQuaternion(ref res, intp, ptr, mStack);
        return ret + 1;
    }
    StackObject* NewQuaternion(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        StackObject* ret;
        if (isNewObj)
        {
            ret = ILIntepreter.Minus(esp, 3);
            Quaternion vec;
            var ptr = ILIntepreter.Minus(esp, 1);
            vec.w = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 2);
            vec.z = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 3);
            vec.y = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 4);
            vec.x = *(float*)&ptr->Value;
            PushQuaternion(ref vec, intp, ptr, mStack);
        }
        else
        {
            ret = ILIntepreter.Minus(esp, 5);
            var instance = ILIntepreter.GetObjectAndResolveReference(ret);
            var dst = *(StackObject**)&instance->Value;
            var f = ILIntepreter.Minus(dst, 1);
            var v = ILIntepreter.Minus(esp, 4);
            *f = *v;
            f = ILIntepreter.Minus(dst, 2);
            v = ILIntepreter.Minus(esp, 3);
            *f = *v;
            f = ILIntepreter.Minus(dst, 3);
            v = ILIntepreter.Minus(esp, 2);
            *f = *v;
            f = ILIntepreter.Minus(dst, 4);
            v = ILIntepreter.Minus(esp, 1);
            *f = *v;
        }
        return ret;
    }
    StackObject* Get_EulerAngle(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Quaternion vec;
        ParseQuaternion(out vec, intp, ptr, mStack);
        var res = vec.eulerAngles;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Get_Identity(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = esp;
        var res = Quaternion.identity;
        PushQuaternion(ref res, intp, ret, mStack);
        return ret + 1;
    }
    static void ParseQuaternion(out Quaternion vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        var a = ILIntepreter.GetObjectAndResolveReference(ptr);
        if (a->ObjectType == ObjectTypes.ValueTypeObjectReference)
        {
            var src = *(StackObject**)&a->Value;
            vec.x = *(float*)&ILIntepreter.Minus(src, 1)->Value;
            vec.y = *(float*)&ILIntepreter.Minus(src, 2)->Value;
            vec.z = *(float*)&ILIntepreter.Minus(src, 3)->Value;
            vec.w = *(float*)&ILIntepreter.Minus(src, 4)->Value;
            intp.FreeStackValueType(ptr);
        }
        else
        {
            vec = (Quaternion)StackObject.ToObject(a, intp.AppDomain, mStack);
            intp.Free(ptr);
        }
    }
    void PushQuaternion(ref Quaternion vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        intp.AllocValueType(ptr, CLRType);
        var dst = *((StackObject**)&ptr->Value);
        CopyValueTypeToStack(ref vec, dst, mStack);
    }
    void PushVector3(ref Vector3 vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        var binder = Vector3Binder;
        if (binder != null)
            binder.PushVector3(ref vec, intp, ptr, mStack);
        else
            ILIntepreter.PushObject(ptr, mStack, vec, true);
    }
}
Assets/ILRuntime/Src/Binder/QuaternionBinder.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e5e2a12f16432dd41b19583a42ca0e9d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Binder/Vector2Binder.cs
New file
@@ -0,0 +1,460 @@
using UnityEngine;
using System.Collections.Generic;
using ILRuntime.Other;
using System;
using System.Reflection;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using ILRuntime.CLR.Method;
using ILRuntime.CLR.TypeSystem;
using ILRuntime.Runtime.Stack;
public unsafe class Vector2Binder : ValueTypeBinder<Vector2>
{
    Vector3Binder vector3Binder;
    bool vector3BinderGot;
    Vector3Binder Vector3Binder
    {
        get
        {
            if (!vector3BinderGot)
            {
                vector3BinderGot = true;
                var vector3Type = CLRType.AppDomain.GetType(typeof(Vector3)) as CLRType;
                vector3Binder = vector3Type.ValueTypeBinder as Vector3Binder;
            }
            return vector3Binder;
        }
    }
    public override unsafe void AssignFromStack(ref Vector2 ins, StackObject* ptr, IList<object> mStack)
    {
        var v = ILIntepreter.Minus(ptr, 1);
        ins.x = *(float*)&v->Value;
        v = ILIntepreter.Minus(ptr, 2);
        ins.y = *(float*)&v->Value;
    }
    public override unsafe void CopyValueTypeToStack(ref Vector2 ins, StackObject* ptr, IList<object> mStack)
    {
        var v = ILIntepreter.Minus(ptr, 1);
        *(float*)&v->Value = ins.x;
        v = ILIntepreter.Minus(ptr, 2);
        *(float*)&v->Value = ins.y;
    }
    public override void RegisterCLRRedirection(ILRuntime.Runtime.Enviorment.AppDomain appdomain)
    {
        BindingFlags flag = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;
        MethodBase method;
        Type[] args;
        Type type = typeof(Vector2);
        args = new Type[] { typeof(float), typeof(float) };
        method = type.GetConstructor(flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, NewVector2);
        args = new Type[] { typeof(Vector2), typeof(Vector2) };
        method = type.GetMethod("op_Addition", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Add);
        args = new Type[] { typeof(Vector2), typeof(Vector2) };
        method = type.GetMethod("op_Subtraction", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Subtraction);
        args = new Type[] { typeof(Vector2), typeof(float) };
        method = type.GetMethod("op_Multiply", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Multiply);
        args = new Type[] { typeof(float), typeof(Vector2) };
        method = type.GetMethod("op_Multiply", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Multiply2);
        args = new Type[] { typeof(Vector2), typeof(float) };
        method = type.GetMethod("op_Division", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Division);
        args = new Type[] { typeof(Vector2) };
        method = type.GetMethod("op_UnaryNegation", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Negate);
        args = new Type[] { typeof(Vector2), typeof(Vector2) };
        method = type.GetMethod("op_Equality", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Equality);
        args = new Type[] { typeof(Vector2), typeof(Vector2) };
        method = type.GetMethod("op_Inequality", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Inequality);
        args = new Type[] { typeof(Vector2) };
        method = type.GetMethod("op_Implicit", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Implicit);
        args = new Type[] { typeof(Vector3) };
        method = type.GetMethod("op_Implicit", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Implicit2);
        args = new Type[] { typeof(Vector2), typeof(Vector2) };
        method = type.GetMethod("Dot", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Dot);
        args = new Type[] { typeof(Vector2), typeof(Vector2) };
        method = type.GetMethod("Distance", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector2_Distance);
        args = new Type[] { };
        method = type.GetMethod("get_magnitude", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Magnitude);
        args = new Type[] { };
        method = type.GetMethod("get_sqrMagnitude", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_SqrMagnitude);
        args = new Type[] { };
        method = type.GetMethod("get_normalized", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Normalized);
        args = new Type[] { };
        method = type.GetMethod("get_one", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_One);
        args = new Type[] { };
        method = type.GetMethod("get_zero", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Zero);
    }
    StackObject* Vector2_Add(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 left, right;
        ParseVector2(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out left, intp, ptr, mStack);
        var res = left + right;
        PushVector2(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Subtraction(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 left, right;
        ParseVector2(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out left, intp, ptr, mStack);
        var res = left - right;
        PushVector2(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Multiply(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        var b = ILIntepreter.GetObjectAndResolveReference(ptr);
        float val = *(float*)&b->Value;
        Vector2 vec;
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out vec, intp, ptr, mStack);
        vec = vec * val;
        PushVector2(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Multiply2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        Vector2 vec;
        var ptr = ILIntepreter.Minus(esp, 1);
        ParseVector2(out vec, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        var b = ILIntepreter.GetObjectAndResolveReference(ptr);
        float val = *(float*)&b->Value;
        vec = val * vec;
        PushVector2(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Division(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        var b = ILIntepreter.GetObjectAndResolveReference(ptr);
        float val = *(float*)&b->Value;
        Vector2 vec;
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out vec, intp, ptr, mStack);
        vec = vec / val;
        PushVector2(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Negate(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 vec;
        ptr = ILIntepreter.Minus(esp, 1);
        ParseVector2(out vec, intp, ptr, mStack);
        vec = -vec;
        PushVector2(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Implicit(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 vec;
        ptr = ILIntepreter.Minus(esp, 1);
        ParseVector2(out vec, intp, ptr, mStack);
        Vector3 res = vec;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Implicit2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 vec;
        ptr = ILIntepreter.Minus(esp, 1);
        Vector3Binder.ParseVector3(out vec, intp, ptr, mStack);
        Vector2 res = vec;
        PushVector2(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector2_Equality(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 left, right;
        ParseVector2(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out left, intp, ptr, mStack);
        var res = left == right;
        ret->ObjectType = ObjectTypes.Integer;
        ret->Value = res ? 1 : 0;
        return ret + 1;
    }
    StackObject* Vector2_Inequality(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 left, right;
        ParseVector2(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out left, intp, ptr, mStack);
        var res = left != right;
        ret->ObjectType = ObjectTypes.Integer;
        ret->Value = res ? 1 : 0;
        return ret + 1;
    }
    StackObject* Vector2_Dot(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 left, right;
        ParseVector2(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out left, intp, ptr, mStack);
        var res = Vector3.Dot(left, right);
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Vector2_Distance(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 left, right;
        ParseVector2(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector2(out left, intp, ptr, mStack);
        var res = Vector3.Distance(left, right);
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* NewVector2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        StackObject* ret;
        if (isNewObj)
        {
            ret = ILIntepreter.Minus(esp, 1);
            Vector2 vec;
            var ptr = ILIntepreter.Minus(esp, 1);
            vec.y = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 2);
            vec.x = *(float*)&ptr->Value;
            PushVector2(ref vec, intp, ptr, mStack);
        }
        else
        {
            ret = ILIntepreter.Minus(esp, 3);
            var instance = ILIntepreter.GetObjectAndResolveReference(ret);
            var dst = *(StackObject**)&instance->Value;
            var f = ILIntepreter.Minus(dst, 1);
            var v = ILIntepreter.Minus(esp, 2);
            *f = *v;
            f = ILIntepreter.Minus(dst, 2);
            v = ILIntepreter.Minus(esp, 1);
            *f = *v;
        }
        return ret;
    }
    StackObject* Get_Magnitude(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 vec;
        ParseVector2(out vec, intp, ptr, mStack);
        float res = vec.magnitude;
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Get_SqrMagnitude(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 vec;
        ParseVector2(out vec, intp, ptr, mStack);
        float res = vec.sqrMagnitude;
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Get_Normalized(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector2 vec;
        ParseVector2(out vec, intp, ptr, mStack);
        var res = vec.normalized;
        PushVector2(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Get_One(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = esp;
        var res = Vector2.one;
        PushVector2(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Get_Zero(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = esp;
        var res = Vector2.zero;
        PushVector2(ref res, intp, ret, mStack);
        return ret + 1;
    }
    public static void ParseVector2(out Vector2 vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        var a = ILIntepreter.GetObjectAndResolveReference(ptr);
        if (a->ObjectType == ObjectTypes.ValueTypeObjectReference)
        {
            var src = *(StackObject**)&a->Value;
            vec.x = *(float*)&ILIntepreter.Minus(src, 1)->Value;
            vec.y = *(float*)&ILIntepreter.Minus(src, 2)->Value;
            intp.FreeStackValueType(ptr);
        }
        else
        {
            vec = (Vector2)StackObject.ToObject(a, intp.AppDomain, mStack);
            intp.Free(ptr);
        }
    }
    public void PushVector2(ref Vector2 vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        intp.AllocValueType(ptr, CLRType);
        var dst = *((StackObject**)&ptr->Value);
        CopyValueTypeToStack(ref vec, dst, mStack);
    }
    void PushVector3(ref Vector3 vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        var binder = Vector3Binder;
        if (binder != null)
            binder.PushVector3(ref vec, intp, ptr, mStack);
        else
            ILIntepreter.PushObject(ptr, mStack, vec, true);
    }
}
Assets/ILRuntime/Src/Binder/Vector2Binder.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c67e166fc0959864c95cb8a252f5c0d8
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Binder/Vector3Binder.cs
New file
@@ -0,0 +1,461 @@
using UnityEngine;
using System.Collections.Generic;
using ILRuntime.Other;
using System;
using System.Reflection;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using ILRuntime.CLR.Method;
using ILRuntime.Runtime.Stack;
public unsafe class Vector3Binder : ValueTypeBinder<Vector3>
{
    public override unsafe void AssignFromStack(ref Vector3 ins, StackObject* ptr, IList<object> mStack)
    {
        var v = ILIntepreter.Minus(ptr, 1);
        ins.x = *(float*)&v->Value;
        v = ILIntepreter.Minus(ptr, 2);
        ins.y = *(float*)&v->Value;
        v = ILIntepreter.Minus(ptr, 3);
        ins.z = *(float*)&v->Value;
    }
    public override unsafe void CopyValueTypeToStack(ref Vector3 ins, StackObject* ptr, IList<object> mStack)
    {
        var v = ILIntepreter.Minus(ptr, 1);
        *(float*)&v->Value = ins.x;
        v = ILIntepreter.Minus(ptr, 2);
        *(float*)&v->Value = ins.y;
        v = ILIntepreter.Minus(ptr, 3);
        *(float*)&v->Value = ins.z;
    }
    public override void RegisterCLRRedirection(ILRuntime.Runtime.Enviorment.AppDomain appdomain)
    {
        BindingFlags flag = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;
        MethodBase method;
        Type[] args;
        Type type = typeof(Vector3);
        args = new Type[] { typeof(float), typeof(float), typeof(float) };
        method = type.GetConstructor(flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, NewVector3);
        args = new Type[] { typeof(float), typeof(float) };
        method = type.GetConstructor(flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, NewVector3_2);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("op_Addition", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Add);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("op_Subtraction", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Subtraction);
        args = new Type[] { typeof(Vector3), typeof(float) };
        method = type.GetMethod("op_Multiply", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Multiply);
        args = new Type[] { typeof(float), typeof(Vector3) };
        method = type.GetMethod("op_Multiply", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Multiply2);
        args = new Type[] { typeof(Vector3), typeof(float) };
        method = type.GetMethod("op_Division", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Division);
        args = new Type[] { typeof(Vector3) };
        method = type.GetMethod("op_UnaryNegation", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Negate);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("op_Equality", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Equality);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("op_Inequality", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Inequality);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("Dot", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Dot);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("Cross", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Cross);
        args = new Type[] { typeof(Vector3), typeof(Vector3) };
        method = type.GetMethod("Distance", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Vector3_Distance);
        args = new Type[] { };
        method = type.GetMethod("get_magnitude", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Magnitude);
        args = new Type[] { };
        method = type.GetMethod("get_sqrMagnitude", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_SqrMagnitude);
        args = new Type[] { };
        method = type.GetMethod("get_normalized", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Normalized);
        args = new Type[] { };
        method = type.GetMethod("get_one", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_One);
        args = new Type[] { };
        method = type.GetMethod("get_zero", flag, null, args, null);
        appdomain.RegisterCLRMethodRedirection(method, Get_Zero);
    }
    StackObject* Vector3_Add(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = left + right;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector3_Subtraction(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = left - right;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector3_Multiply(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        var b = ILIntepreter.GetObjectAndResolveReference(ptr);
        float val = *(float*)&b->Value;
        Vector3 vec;
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out vec, intp, ptr, mStack);
        vec = vec * val;
        PushVector3(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector3_Multiply2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        Vector3 vec;
        var ptr = ILIntepreter.Minus(esp, 1);
        ParseVector3(out vec, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        var b = ILIntepreter.GetObjectAndResolveReference(ptr);
        float val = *(float*)&b->Value;
        vec = val * vec;
        PushVector3(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector3_Division(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        var b = ILIntepreter.GetObjectAndResolveReference(ptr);
        float val = *(float*)&b->Value;
        Vector3 vec;
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out vec, intp, ptr, mStack);
        vec = vec / val;
        PushVector3(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector3_Negate(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 vec;
        ptr = ILIntepreter.Minus(esp, 1);
        ParseVector3(out vec, intp, ptr, mStack);
        vec = -vec;
        PushVector3(ref vec, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Vector3_Equality(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = left == right;
        ret->ObjectType = ObjectTypes.Integer;
        ret->Value = res ? 1 : 0;
        return ret + 1;
    }
    StackObject* Vector3_Inequality(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = left != right;
        ret->ObjectType = ObjectTypes.Integer;
        ret->Value = res ? 1 : 0;
        return ret + 1;
    }
    StackObject* Vector3_Dot(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = Vector3.Dot(left, right);
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Vector3_Distance(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = Vector3.Distance(left, right);
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Vector3_Cross(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 2);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 left, right;
        ParseVector3(out right, intp, ptr, mStack);
        ptr = ILIntepreter.Minus(esp, 2);
        ParseVector3(out left, intp, ptr, mStack);
        var res = Vector3.Cross(left, right);
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* NewVector3(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        StackObject* ret;
        if (isNewObj)
        {
            ret = ILIntepreter.Minus(esp, 2);
            Vector3 vec;
            var ptr = ILIntepreter.Minus(esp, 1);
            vec.z = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 2);
            vec.y = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 3);
            vec.x = *(float*)&ptr->Value;
            PushVector3(ref vec, intp, ptr, mStack);
        }
        else
        {
            ret = ILIntepreter.Minus(esp, 4);
            var instance = ILIntepreter.GetObjectAndResolveReference(ret);
            var dst = *(StackObject**)&instance->Value;
            var f = ILIntepreter.Minus(dst, 1);
            var v = ILIntepreter.Minus(esp, 3);
            *f = *v;
            f = ILIntepreter.Minus(dst, 2);
            v = ILIntepreter.Minus(esp, 2);
            *f = *v;
            f = ILIntepreter.Minus(dst, 3);
            v = ILIntepreter.Minus(esp, 1);
            *f = *v;
        }
        return ret;
    }
    StackObject* NewVector3_2(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        StackObject* ret;
        if (isNewObj)
        {
            ret = ILIntepreter.Minus(esp, 1);
            Vector3 vec;
            var ptr = ILIntepreter.Minus(esp, 1);
            vec.y = *(float*)&ptr->Value;
            ptr = ILIntepreter.Minus(esp, 2);
            vec.x = *(float*)&ptr->Value;
            vec.z = 0;
            PushVector3(ref vec, intp, ptr, mStack);
        }
        else
        {
            ret = ILIntepreter.Minus(esp, 3);
            var instance = ILIntepreter.GetObjectAndResolveReference(ret);
            var dst = *(StackObject**)&instance->Value;
            var f = ILIntepreter.Minus(dst, 1);
            var v = ILIntepreter.Minus(esp, 2);
            *f = *v;
            f = ILIntepreter.Minus(dst, 2);
            v = ILIntepreter.Minus(esp, 1);
            *f = *v;
            f = ILIntepreter.Minus(dst, 3);
            *(float*)&f->Value = 0f;
        }
        return ret;
    }
    StackObject* Get_Magnitude(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 vec;
        ParseVector3(out vec, intp, ptr, mStack);
        float res = vec.magnitude;
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Get_SqrMagnitude(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 vec;
        ParseVector3(out vec, intp, ptr, mStack);
        float res = vec.sqrMagnitude;
        ret->ObjectType = ObjectTypes.Float;
        *(float*)&ret->Value = res;
        return ret + 1;
    }
    StackObject* Get_Normalized(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = ILIntepreter.Minus(esp, 1);
        var ptr = ILIntepreter.Minus(esp, 1);
        Vector3 vec;
        ParseVector3(out vec, intp, ptr, mStack);
        var res = vec.normalized;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Get_One(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = esp;
        var res = Vector3.one;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    StackObject* Get_Zero(ILIntepreter intp, StackObject* esp, IList<object> mStack, CLRMethod method, bool isNewObj)
    {
        var ret = esp;
        var res = Vector3.zero;
        PushVector3(ref res, intp, ret, mStack);
        return ret + 1;
    }
    public static void ParseVector3(out Vector3 vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        var a = ILIntepreter.GetObjectAndResolveReference(ptr);
        if (a->ObjectType == ObjectTypes.ValueTypeObjectReference)
        {
            var src = *(StackObject**)&a->Value;
            vec.x = *(float*)&ILIntepreter.Minus(src, 1)->Value;
            vec.y = *(float*)&ILIntepreter.Minus(src, 2)->Value;
            vec.z = *(float*)&ILIntepreter.Minus(src, 3)->Value;
            intp.FreeStackValueType(ptr);
        }
        else
        {
            vec = (Vector3)StackObject.ToObject(a, intp.AppDomain, mStack);
            intp.Free(ptr);
        }
    }
    public void PushVector3(ref Vector3 vec, ILIntepreter intp, StackObject* ptr, IList<object> mStack)
    {
        intp.AllocValueType(ptr, CLRType);
        var dst = *((StackObject**)&ptr->Value);
        CopyValueTypeToStack(ref vec, dst, mStack);
    }
}
Assets/ILRuntime/Src/Binder/Vector3Binder.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5d1e5f2c3e980eb4ca3a46ab89ee9ff2
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/ILBehaviourProxy.cs
New file
@@ -0,0 +1,195 @@
using System.Collections.Generic;
using ILRuntime.CLR.Method;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using UnityEngine;
/// <summary>
/// çƒ­æ›´å·¥ç¨‹ä½¿ç”¨monovehavior的基础代理类
/// </summary>
public class ILBehaviourProxy : WidgetBehavior
{
    [SerializeField]
    [Tooltip("Logic工程的代码,例:命名空间.类名")]
    List<string> classNames;
    Dictionary<string, ILBehaviourHolder> ilBehaviourHolders = new Dictionary<string, ILBehaviourHolder>();
    AppDomain appDomain
    {
        get { return ILLauncherProxy.Instance.appdomain; }
    }
    private void Init()
    {
        InitWidgts();
        ilBehaviourHolders.Clear();
        var baseType = appDomain.LoadedTypes["ILBehaviour"];
        foreach (var name in classNames)
        {
            if (ilBehaviourHolders.ContainsKey(name))
            {
                DebugEx.LogErrorFormat("ILBehaviour è„šæœ¬ä»£ç æœ‰é‡å¤é¡¹ï¼š{0}", name);
                continue;
            }
            var obj = appDomain.Instantiate(name);
            if (obj == null)
            {
                DebugEx.LogErrorFormat("ILBehaviour è„šæœ¬ä»£ç ä¸å­˜åœ¨ï¼š{0}", name);
                continue;
            }
            var setProxy = baseType.GetMethod("SetProxy", 1);
            appDomain.Invoke(setProxy, obj, this);//将当前代理对象传过去
            var holder = new ILBehaviourHolder(obj);
            //此处用type获取的方法,子类不定义是不会执行Logic工程父类的方法
            var type = obj.Type;
            holder.awake = type.GetMethod("Awake");
            holder.start = type.GetMethod("Start");
            holder.onEnable = type.GetMethod("OnEnable");
            holder.onDisable = type.GetMethod("OnDisable");
            holder.update = type.GetMethod("Update");
            holder.fixedUpdate = type.GetMethod("FixedUpdate");
            holder.lateUpdate = type.GetMethod("LateUpdate");
            holder.onDestroy = type.GetMethod("OnDestroy", 0);
            //baseType èŽ·å–çš„æ–¹æ³•ï¼Œæ‰ä¼šæ‰§è¡Œçˆ¶ç±»Logic工程的父类方法,但同时也不会调用子类重写的方法
            holder.dipose = baseType.GetMethod("Dipose", 0);
            ilBehaviourHolders.Add(name, holder);
        }
    }
    //获取IL热更工程的脚本实例,供热更工程调用,不要在主工程使用
    public object GetILBehaviour(string name)
    {
        ILBehaviourHolder holder;
        if (ilBehaviourHolders.TryGetValue(name, out holder))
            return holder.instance;
        else
            return null;
    }
    private void Awake()
    {
        Init();
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.awake != null)
                    appDomain.Invoke(holder.awake, holder.instance);
            }
        }
    }
    private void Start()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.start != null)
                    appDomain.Invoke(holder.start, holder.instance);
            }
        }
    }
    private void OnEnable()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.onEnable != null)
                    appDomain.Invoke(holder.onEnable, holder.instance);
            }
        }
    }
    private void OnDisable()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.onDisable != null)
                    appDomain.Invoke(holder.onDisable, holder.instance);
            }
        }
    }
    private void Update()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.update != null)
                    appDomain.Invoke(holder.update, holder.instance);
            }
        }
    }
    private void FixedUpdate()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.fixedUpdate != null)
                    appDomain.Invoke(holder.fixedUpdate, holder.instance);
            }
        }
    }
    private void LateUpdate()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (holder.lateUpdate != null)
                    appDomain.Invoke(holder.lateUpdate, holder.instance);
            }
        }
    }
    private void OnDestroy()
    {
        foreach (var name in classNames)
        {
            ILBehaviourHolder holder;
            if (ilBehaviourHolders.TryGetValue(name, out holder))
            {
                if (appDomain != null && holder.onDestroy != null)
                    appDomain?.Invoke(holder.onDestroy, holder.instance);
                if (appDomain != null && holder.dipose != null)
                    appDomain?.Invoke(holder.dipose, holder.instance);
            }
        }
        ilBehaviourHolders.Clear();
    }
    private class ILBehaviourHolder
    {
        public object instance;
        public IMethod awake, start, onEnable, onDisable, update, fixedUpdate, lateUpdate, onDestroy;
        public IMethod dipose;
        public ILBehaviourHolder(object instance)
        {
            this.instance = instance;
        }
    }
}
Assets/ILRuntime/Src/ILBehaviourProxy.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0972c9814fd923f459dfe2411b6ccb50
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/ILLauncherProxy.cs
New file
@@ -0,0 +1,245 @@
using System;
using System.Collections.Generic;
using System.IO;
using ILCrossBinding;
using ILRuntime.CLR.Method;
using ILRuntime.Mono.Cecil.Pdb;
using ILRuntime.Runtime.Intepreter;
using Snxxz.UI;
using UnityEngine;
public class ILLauncherProxy : SingletonMonobehaviour<ILLauncherProxy>
{
    FileStream dllFS, pdbFS;
    private ILRuntime.Runtime.Enviorment.AppDomain _appdomain;
    public ILRuntime.Runtime.Enviorment.AppDomain appdomain
    {
        get
        {
            return _appdomain;
        }
    }
    public bool started;
    ILTypeInstance launcherInstance;
    IMethod update, onDestroy;
    public void Init()
    {
        started = false;
        LoadILRuntime();
        //由于Unity的Profiler接口只允许在主线程使用,为了避免出异常,需要告诉ILRuntime主线程的线程ID才能正确将函数运行耗时报告给Profiler
#if UNITY_EDITOR
        _appdomain.UnityMainThreadID = System.Threading.Thread.CurrentThread.ManagedThreadId;
#endif
        //对LitJson进行注册
        LitJson.JsonMapper.RegisterILRuntimeCLRRedirection(_appdomain);
        RegisterCrossBindingAdaptor();
        RegisterValueTypeBinder();
        RegisterDelegate();
#if UNITY_EDITOR
        // CLRBindings æ˜¯åŠ¨æ€ç”Ÿæˆå‡ºæ¥çš„ï¼Œeditor下可能不存在,所以使用反射方式调用
        var type = Type.GetType("ILRuntime.Runtime.Generated.CLRBindings");
        if (type != null)
        {
            var m = type.GetMethod("Initialize");
            m.Invoke(null, new object[] { appdomain });
        }
#else
        ILRuntime.Runtime.Generated.CLRBindings.Initialize(_appdomain);
#endif
    }
    void LoadILRuntime()
    {
        _appdomain = new ILRuntime.Runtime.Enviorment.AppDomain();
        var dllPath = string.Empty;
        var pdbPath = string.Empty;
        if (AssetSource.logicFromEditor)
        {
            dllPath = ResourcesPath.ResourcesOutAssetPath + "logic/Logic.dll.bytes";
            pdbPath = ResourcesPath.ResourcesOutAssetPath + "logic/Logic.pdb";
        }
        else
        {
            dllPath = AssetVersionUtility.GetAssetFilePath("logic/Logic.dll.bytes");
            pdbPath = AssetVersionUtility.GetAssetFilePath("logic/Logic.pdb");
        }
        if (!File.Exists(dllPath))
        {
            DebugEx.LogErrorFormat("找不到热更代码:{0}", dllPath);
            return;
        }
        dllFS = new FileStream(dllPath, FileMode.Open);
        if (VersionConfig.Get().debugVersion && File.Exists(pdbPath))
            pdbFS = new FileStream(pdbPath, FileMode.Open);
        _appdomain.LoadAssembly(dllFS, pdbFS, new PdbReaderProvider());
    }
    //注册跨域继承适配器
    private void RegisterCrossBindingAdaptor()
    {
        appdomain.RegisterCrossBindingAdaptor(new CoroutineAdapter());
        appdomain.RegisterCrossBindingAdaptor(new DtcBasicAdapter());
        appdomain.RegisterCrossBindingAdaptor(new GameNetPackBasicAdapter());
    }
    //注册值类型绑定
    private void RegisterValueTypeBinder()
    {
        appdomain.RegisterValueTypeBinder(typeof(Vector3), new Vector3Binder());
        appdomain.RegisterValueTypeBinder(typeof(Quaternion), new QuaternionBinder());
        appdomain.RegisterValueTypeBinder(typeof(Vector2), new Vector2Binder());
    }
    //注册委托
    private void RegisterDelegate()
    {
        //无返回值
        appdomain.DelegateManager.RegisterMethodDelegate<int>();
        appdomain.DelegateManager.RegisterMethodDelegate<long>();
        appdomain.DelegateManager.RegisterMethodDelegate<string>();
        appdomain.DelegateManager.RegisterMethodDelegate<float>();
        appdomain.DelegateManager.RegisterMethodDelegate<double>();
        appdomain.DelegateManager.RegisterMethodDelegate<bool>();
        appdomain.DelegateManager.RegisterMethodDelegate<byte[]>();
        appdomain.DelegateManager.RegisterMethodDelegate<bool, bool>();
        appdomain.DelegateManager.RegisterMethodDelegate<bool, string>();
        appdomain.DelegateManager.RegisterMethodDelegate<int, string>();
        appdomain.DelegateManager.RegisterMethodDelegate<int, float>();
        appdomain.DelegateManager.RegisterMethodDelegate<string, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<int, bool, string>();
        appdomain.DelegateManager.RegisterMethodDelegate<int, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<int, bool>();
        appdomain.DelegateManager.RegisterMethodDelegate<bool, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<ulong>();
        appdomain.DelegateManager.RegisterMethodDelegate<uint>();
        appdomain.DelegateManager.RegisterMethodDelegate<Snxxz.UI.Operation>();
        appdomain.DelegateManager.RegisterMethodDelegate<float, Vector2>();
        appdomain.DelegateManager.RegisterMethodDelegate<int, Transform>();
        appdomain.DelegateManager.RegisterMethodDelegate<Vector2>();
        appdomain.DelegateManager.RegisterMethodDelegate<Vector3>();
        appdomain.DelegateManager.RegisterMethodDelegate<Transform>();
        appdomain.DelegateManager.RegisterMethodDelegate<GameObject>();
        appdomain.DelegateManager.RegisterMethodDelegate<Component>();
        appdomain.DelegateManager.RegisterMethodDelegate<E_AttackMode>();
        appdomain.DelegateManager.RegisterMethodDelegate<PlayerDataType>();
        appdomain.DelegateManager.RegisterMethodDelegate<PlayerDataType, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<List<Vector3>>();
        appdomain.DelegateManager.RegisterMethodDelegate<ChatData>();
        appdomain.DelegateManager.RegisterMethodDelegate<VoiceHttpRequest.VoiceDecodec>();
        appdomain.DelegateManager.RegisterMethodDelegate<Snxxz.UI.ComposeMatCell, NeedMatType>();
        appdomain.DelegateManager.RegisterMethodDelegate<ItemCompoundConfig, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<Snxxz.UI.ComposeMatCell, int, SelectItemType>();
        appdomain.DelegateManager.RegisterMethodDelegate<GroupType, bool>();
        appdomain.DelegateManager.RegisterMethodDelegate<PackType, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<PackType, string>();
        appdomain.DelegateManager.RegisterMethodDelegate<PackType, int, int>();
        appdomain.DelegateManager.RegisterMethodDelegate<SystemSwitch, bool>();
        appdomain.DelegateManager.RegisterMethodDelegate<ChatBoolType, bool>();
        appdomain.DelegateManager.RegisterMethodDelegate<E_NpcType, int, uint>();
        appdomain.DelegateManager.RegisterMethodDelegate<TeamInviteType>();
        appdomain.DelegateManager.RegisterMethodDelegate<Snxxz.UI.PlayerDetails.DetailType>();
        appdomain.DelegateManager.RegisterMethodDelegate<FunctionUnlockType>();
        appdomain.DelegateManager.RegisterMethodDelegate<TreasureCategory>();
        appdomain.DelegateManager.RegisterMethodDelegate<Window>();
        appdomain.DelegateManager.RegisterMethodDelegate<TimeMgr.SyntonyType>();
        appdomain.DelegateManager.RegisterMethodDelegate<DateTime>();
        appdomain.DelegateManager.RegisterMethodDelegate<System.Object>();
        appdomain.DelegateManager.RegisterMethodDelegate<global::ScrollerDataType, global::CellView>();
        //有返回值
        appdomain.DelegateManager.RegisterFunctionDelegate<int>();
        appdomain.DelegateManager.RegisterFunctionDelegate<bool>();
        appdomain.DelegateManager.RegisterFunctionDelegate<long>();
        appdomain.DelegateManager.RegisterFunctionDelegate<string>();
        appdomain.DelegateManager.RegisterFunctionDelegate<float>();
        appdomain.DelegateManager.RegisterFunctionDelegate<double>();
        appdomain.DelegateManager.RegisterFunctionDelegate<int, bool>();
        appdomain.DelegateManager.RegisterFunctionDelegate<System.Int32, System.Int32, System.Int32>();
        appdomain.DelegateManager.RegisterFunctionDelegate<ILRuntime.Runtime.Intepreter.ILTypeInstance, ILRuntime.Runtime.Intepreter.ILTypeInstance, System.Int32>();
        //自定义委托转换
        appdomain.DelegateManager.RegisterDelegateConvertor<UnityEngine.Events.UnityAction>((action) =>
        {
            return new UnityEngine.Events.UnityAction(() =>
            {
                ((System.Action)action)();
            });
        });
        appdomain.DelegateManager.RegisterDelegateConvertor<System.Threading.WaitCallback>((act) =>
        {
            return new System.Threading.WaitCallback((state) =>
             {
                 ((Action<System.Object>)act)(state);
             });
        });
        appdomain.DelegateManager.RegisterDelegateConvertor<System.Comparison<System.Int32>>((act) =>
        {
            return new System.Comparison<System.Int32>((x, y) =>
            {
                return ((Func<System.Int32, System.Int32, System.Int32>)act)(x, y);
            });
        });
        appdomain.DelegateManager.RegisterDelegateConvertor<global::ScrollerController.OnRefreshCellDelegate>((act) =>
        {
            return new global::ScrollerController.OnRefreshCellDelegate((type, cell) =>
            {
                ((Action<global::ScrollerDataType, global::CellView>)act)(type, cell);
            });
        });
        appdomain.DelegateManager.RegisterDelegateConvertor<System.Comparison<ILRuntime.Runtime.Intepreter.ILTypeInstance>>((act) =>
        {
            return new System.Comparison<ILRuntime.Runtime.Intepreter.ILTypeInstance>((x, y) =>
            {
                return ((Func<ILRuntime.Runtime.Intepreter.ILTypeInstance, ILRuntime.Runtime.Intepreter.ILTypeInstance, System.Int32>)act)(x, y);
            });
        });
    }
    public void LaunchStart()
    {
#if UNITY_EDITOR
        _appdomain.DebugService.StartDebugService(56000);
#endif
        launcherInstance = appdomain.Instantiate("LogicLauncher");
        var type = launcherInstance.Type;
        update = type.GetMethod("Update");
        onDestroy = type.GetMethod("OnDestroy", 0);
        _appdomain.Invoke("LogicLauncher", "LaunchStart", launcherInstance, null);
    }
    private void Update()
    {
        if (update != null)
            appdomain.Invoke(update, launcherInstance);
    }
    protected override void OnDestroy()
    {
        base.OnDestroy();
        if (onDestroy != null)
            appdomain.Invoke(onDestroy, launcherInstance);
#if UNITY_EDITOR
        var type = Type.GetType("ILRuntime.Runtime.Generated.CLRBindings");
        if (type != null)
        {
            var m = type.GetMethod("Shutdown");
            m.Invoke(null, new object[] { appdomain });
        }
#else
        ILRuntime.Runtime.Generated.CLRBindings.Shutdown(appDomain);
#endif
        dllFS?.Close();
        pdbFS?.Close();
    }
}
Assets/ILRuntime/Src/ILLauncherProxy.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c019f0e1c95d1d64b9eee16ffaccb910
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/ILOneLevelWindowProxy.cs
New file
@@ -0,0 +1,130 @@
using ILRuntime.CLR.Method;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using Snxxz.UI;
using UnityEngine;
/// <summary>
/// çƒ­æ›´å·¥ç¨‹ä½¿ç”¨ä¸€çº§çª—口的基础代理类
/// </summary>
public class ILOneLevelWindowProxy : OneLevelWin
{
    ILTypeInstance obj;
    IMethod bindController, addListeners, onPreOpen, onAfterOpen, onPreClose, onAfterClose, onDestroy, lateUpdate, onActived;
    IMethod dipose;
    AppDomain appDomain
    {
        get { return ILLauncherProxy.Instance.appdomain; }
    }
    private void Init()
    {
        InitWidgts();
        //使用与预制同名的代码文件
        var windowName = gameObject.name;
        var baseType = appDomain.LoadedTypes["ILOneLevelWindow"];
        obj = appDomain.Instantiate(windowName);
        if (obj == null)
        {
            DebugEx.LogErrorFormat("ILWindow çƒ­æ›´ä»£ç ä¸å­˜åœ¨ï¼š{0}", windowName);
            return;
        }
        var setProxy = baseType.GetMethod("SetProxy", 1);
        appDomain.Invoke(setProxy, obj, this);//将当前代理对象传过去
        //此处用type获取的方法,子类不定义是不会执行Logic工程父类的方法
        var type = obj.Type;
        bindController = type.GetMethod("BindController");
        addListeners = type.GetMethod("AddListeners");
        onPreOpen = type.GetMethod("OnPreOpen");
        onAfterOpen = type.GetMethod("OnAfterOpen");
        onPreClose = type.GetMethod("OnPreClose");
        onAfterClose = type.GetMethod("OnAfterClose");
        onDestroy = type.GetMethod("OnDestroy");
        lateUpdate = type.GetMethod("LateUpdate");
        onActived = type.GetMethod("OnActived");
        //baseType èŽ·å–çš„æ–¹æ³•ï¼Œæ‰ä¼šæ‰§è¡Œçˆ¶ç±»Logic工程的父类方法,但同时也不会调用子类重写的方法
        dipose = baseType.GetMethod("Dipose", 0);
    }
    public void CloseAllChildWindow()
    {
        CloseSubWindows();
    }
    protected override void OnActived()
    {
        base.OnActived();
        if (onActived != null)
            appDomain.Invoke(onActived, obj);
    }
    protected override void LateUpdate()
    {
        base.LateUpdate();
        if (lateUpdate != null)
            appDomain.Invoke(lateUpdate, obj);
    }
    protected override void BindController()
    {
        base.BindController();
        Init();
        if (bindController != null)
            appDomain.Invoke(bindController, obj);
    }
    protected override void AddListeners()
    {
        base.AddListeners();
        if (addListeners != null)
            appDomain.Invoke(addListeners, obj);
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        if (onPreOpen != null)
            appDomain.Invoke(onPreOpen, obj);
    }
    protected override void OnAfterOpen()
    {
        base.OnAfterOpen();
        if (onAfterOpen != null)
            appDomain.Invoke(onAfterOpen, obj);
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        if (onPreClose != null)
            appDomain.Invoke(onPreClose, obj);
    }
    protected override void OnAfterClose()
    {
        base.OnAfterClose();
        if (onAfterClose != null)
            appDomain.Invoke(onAfterClose, obj);
    }
    private void OnDestroy()
    {
        if (onDestroy != null)
            appDomain?.Invoke(onDestroy, obj);
        if (dipose != null)
            appDomain?.Invoke(dipose, obj);
        bindController = null;
        addListeners = null;
        onPreOpen = null;
        onAfterOpen = null;
        onPreClose = null;
        onAfterClose = null;
        onDestroy = null;
        lateUpdate = null;
        onActived = null;
        obj = null;
    }
}
Assets/ILRuntime/Src/ILOneLevelWindowProxy.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a35321404ae3e28439ce53bec5fd2d55
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/ILRuntimeUtility.cs
New file
@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class ILRuntimeUtility : Singleton<ILRuntimeUtility>
{
    public ILRuntime.Runtime.Enviorment.AppDomain appdomain {
        get {
            return ILLauncherProxy.Instance.appdomain;
        }
    }
    public void AddEvent(string modelName, string eventName, Action action)
    {
        var iType = appdomain.LoadedTypes[modelName];
        var get_Instance = iType.GetMethod("get_Instance", 0);
        var instance = appdomain.Invoke(get_Instance, null);
        var type = iType.ReflectionType;
        var eventInfo = type.GetEvent(eventName);
        eventInfo.AddEventHandler(instance, action);
    }
    public void RemoveEvent(string modelName, string eventName, Action action)
    {
        var iType = appdomain.LoadedTypes[modelName];
        var get_Instance = iType.GetMethod("get_Instance", 0);
        var instance = appdomain.Invoke(get_Instance, null);
        var type = iType.ReflectionType;
        var eventInfo = type.GetEvent(eventName);
        eventInfo.RemoveEventHandler(instance, action);
    }
    public void ModelInvoke(string modelName, string methodName, params object[] p)
    {
        var iType = appdomain.LoadedTypes[modelName];
        var get_Instance = iType.GetMethod("get_Instance", 0);
        var method = iType.GetMethod(methodName, p.Length);
        var instance = appdomain.Invoke(get_Instance, null);
        appdomain.Invoke(method, instance, p);
    }
    public T ModelInvoke<T>(string modelName, string methodName, params object[] p)
    {
        var iType = appdomain.LoadedTypes[modelName];
        var get_Instance = iType.GetMethod("get_Instance", 0);
        var method = iType.GetMethod(methodName, p.Length);
        var instance = appdomain.Invoke(get_Instance, null);
        return (T)appdomain.Invoke(method, instance, p);
    }
}
Assets/ILRuntime/Src/ILRuntimeUtility.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 66f444fc692a2574bb3939b2623c2dd7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/ILWindowProxy.cs
New file
@@ -0,0 +1,115 @@
using ILRuntime.CLR.Method;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using Snxxz.UI;
using UnityEngine;
/// <summary>
/// çƒ­æ›´å·¥ç¨‹ä½¿ç”¨window的基础代理类
/// </summary>
public class ILWindowProxy : Window
{
    ILTypeInstance obj;
    IMethod bindController, addListeners, onPreOpen, onAfterOpen, onPreClose, onAfterClose, onDestroy, lateUpdate, onActived;
    IMethod dipose;
    AppDomain appDomain
    {
        get { return ILLauncherProxy.Instance.appdomain; }
    }
    private void Init()
    {
        InitWidgts();
        //使用与预制同名的代码文件
        var windowName =gameObject.name;
        var baseType = appDomain.LoadedTypes["ILWindow"];
        obj = appDomain.Instantiate(windowName);
        if (obj == null)
        {
            DebugEx.LogErrorFormat("ILWindow çƒ­æ›´ä»£ç ä¸å­˜åœ¨ï¼š{0}", windowName);
            return;
        }
        var setProxy = baseType.GetMethod("SetProxy", 1);
        appDomain.Invoke(setProxy, obj, this);//将当前代理对象传过去
        //此处用type获取的方法,子类不定义是不会执行Logic工程父类的方法
        var type = obj.Type;
        bindController = type.GetMethod("BindController");
        addListeners = type.GetMethod("AddListeners");
        onPreOpen = type.GetMethod("OnPreOpen");
        onAfterOpen = type.GetMethod("OnAfterOpen");
        onPreClose = type.GetMethod("OnPreClose");
        onAfterClose = type.GetMethod("OnAfterClose");
        onDestroy = type.GetMethod("OnDestroy");
        lateUpdate = type.GetMethod("LateUpdate");
        onActived = type.GetMethod("OnActived");
        //baseType èŽ·å–çš„æ–¹æ³•ï¼Œæ‰ä¼šæ‰§è¡Œçˆ¶ç±»Logic工程的父类方法,但同时也不会调用子类重写的方法
        dipose = baseType.GetMethod("Dipose", 0);
    }
    protected override void OnActived()
    {
        if (onActived != null)
            appDomain.Invoke(onActived, obj);
    }
    protected override void LateUpdate()
    {
        if (lateUpdate != null)
            appDomain.Invoke(lateUpdate, obj);
    }
    protected override void BindController()
    {
        Init();
        if (bindController != null)
            appDomain.Invoke(bindController, obj);
    }
    protected override void AddListeners()
    {
        if (addListeners != null)
            appDomain.Invoke(addListeners, obj);
    }
    protected override void OnPreOpen()
    {
        if (onPreOpen != null)
            appDomain.Invoke(onPreOpen, obj);
    }
    protected override void OnAfterOpen()
    {
        if (onAfterOpen != null)
            appDomain.Invoke(onAfterOpen, obj);
    }
    protected override void OnPreClose()
    {
        if (onPreClose != null)
            appDomain.Invoke(onPreClose, obj);
    }
    protected override void OnAfterClose()
    {
        if (onAfterClose != null)
            appDomain.Invoke(onAfterClose, obj);
    }
    private void OnDestroy()
    {
        if (onDestroy != null)
            appDomain?.Invoke(onDestroy, obj);
        if (dipose != null)
            appDomain?.Invoke(dipose, obj);
        bindController = null;
        addListeners = null;
        onPreOpen = null;
        onAfterOpen = null;
        onPreClose = null;
        onAfterClose = null;
        onDestroy = null;
        lateUpdate = null;
        onActived = null;
        obj = null;
    }
}
Assets/ILRuntime/Src/ILWindowProxy.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dfecc37f6c13b544d83e80e8a1dda3f7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Inheritance.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a36d462b97cf6824cb7d430aaeb583f7
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Inheritance/CoroutineAdapter.cs
New file
@@ -0,0 +1,163 @@
using UnityEngine;
using System.Collections.Generic;
using ILRuntime.Other;
using System;
using System.Collections;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
using ILRuntime.CLR.Method;
namespace ILCrossBinding
{
    public class CoroutineAdapter : CrossBindingAdaptor
    {
        public override Type BaseCLRType
        {
            get
            {
                return null;
            }
        }
        public override Type[] BaseCLRTypes
        {
            get
            {
                //跨域继承只能有1个Adapter,因此应该尽量避免一个类同时实现多个外部接口,对于coroutine来说是IEnumerator<object>,IEnumerator和IDisposable,
                //ILRuntime虽然支持,但是一定要小心这种用法,使用不当很容易造成不可预期的问题
                //日常开发如果需要实现多个DLL外部接口,请在Unity这边先做一个基类实现那些个接口,然后继承那个基类
                return new Type[] { typeof(IEnumerator<object>), typeof(IEnumerator), typeof(IDisposable) };
            }
        }
        public override Type AdaptorType
        {
            get
            {
                return typeof(Adaptor);
            }
        }
        public override object CreateCLRInstance(ILRuntime.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
        {
            return new Adaptor(appdomain, instance);
        }
        //Coroutine生成的类实现了IEnumerator<System.Object>, IEnumerator, IDisposable,所以都要实现,这个可以通过reflector之类的IL反编译软件得知
        internal class Adaptor : IEnumerator<System.Object>, IEnumerator, IDisposable, CrossBindingAdaptorType
        {
            ILTypeInstance instance;
            ILRuntime.Runtime.Enviorment.AppDomain appdomain;
            public Adaptor()
            {
            }
            public Adaptor(ILRuntime.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
            {
                this.appdomain = appdomain;
                this.instance = instance;
            }
            public ILTypeInstance ILInstance { get { return instance; } }
            IMethod mCurrentMethod;
            bool mCurrentMethodGot;
            public object Current
            {
                get
                {
                    if (!mCurrentMethodGot)
                    {
                        mCurrentMethod = instance.Type.GetMethod("get_Current", 0);
                        if (mCurrentMethod == null)
                        {
                            //这里写System.Collections.IEnumerator.get_Current而不是直接get_Current是因为coroutine生成的类是显式实现这个接口的,通过Reflector等反编译软件可得知
                            //为了兼容其他只实现了单一Current属性的,所以上面先直接取了get_Current
                            mCurrentMethod = instance.Type.GetMethod("System.Collections.IEnumerator.get_Current", 0);
                        }
                        mCurrentMethodGot = true;
                    }
                    if (mCurrentMethod != null)
                    {
                        var res = appdomain.Invoke(mCurrentMethod, instance, null);
                        return res;
                    }
                    else
                    {
                        return null;
                    }
                }
            }
            IMethod mDisposeMethod;
            bool mDisposeMethodGot;
            public void Dispose()
            {
                if (!mDisposeMethodGot)
                {
                    mDisposeMethod = instance.Type.GetMethod("Dispose", 0);
                    if (mDisposeMethod == null)
                    {
                        mDisposeMethod = instance.Type.GetMethod("System.IDisposable.Dispose", 0);
                    }
                    mDisposeMethodGot = true;
                }
                if (mDisposeMethod != null)
                {
                    appdomain.Invoke(mDisposeMethod, instance, null);
                }
            }
            IMethod mMoveNextMethod;
            bool mMoveNextMethodGot;
            public bool MoveNext()
            {
                if (!mMoveNextMethodGot)
                {
                    mMoveNextMethod = instance.Type.GetMethod("MoveNext", 0);
                    mMoveNextMethodGot = true;
                }
                if (mMoveNextMethod != null)
                {
                    return (bool)appdomain.Invoke(mMoveNextMethod, instance, null);
                }
                else
                {
                    return false;
                }
            }
            IMethod mResetMethod;
            bool mResetMethodGot;
            public void Reset()
            {
                if (!mResetMethodGot)
                {
                    mResetMethod = instance.Type.GetMethod("Reset", 0);
                    mResetMethodGot = true;
                }
                if (mResetMethod != null)
                {
                    appdomain.Invoke(mResetMethod, instance, null);
                }
            }
            public override string ToString()
            {
                IMethod m = appdomain.ObjectType.GetMethod("ToString", 0);
                m = instance.Type.GetVirtualMethod(m);
                if (m == null || m is ILMethod)
                {
                    return instance.ToString();
                }
                else
                    return instance.Type.FullName;
            }
        }
    }
}
Assets/ILRuntime/Src/Inheritance/CoroutineAdapter.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2f8dde6199bfcaa46b09411a7a942d47
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Inheritance/DtcBasicAdapter.cs
New file
@@ -0,0 +1,70 @@
using System;
using ILRuntime.CLR.Method;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
namespace ILCrossBinding
{
    public class DtcBasicAdapter : CrossBindingAdaptor
    {
        static CrossBindingMethodInfo<global::GameNetPackBasic> mDone_0 = new CrossBindingMethodInfo<global::GameNetPackBasic>("Done");
        public override Type BaseCLRType
        {
            get
            {
                return typeof(global::DtcBasic);
            }
        }
        public override Type AdaptorType
        {
            get
            {
                return typeof(Adapter);
            }
        }
        public override object CreateCLRInstance(ILRuntime.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
        {
            return new Adapter(appdomain, instance);
        }
        public class Adapter : global::DtcBasic, CrossBindingAdaptorType
        {
            ILTypeInstance instance;
            ILRuntime.Runtime.Enviorment.AppDomain appdomain;
            public Adapter()
            {
            }
            public Adapter(ILRuntime.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
            {
                this.appdomain = appdomain;
                this.instance = instance;
            }
            public ILTypeInstance ILInstance { get { return instance; } }
            public override void Done(global::GameNetPackBasic vNetPack)
            {
                if (mDone_0.CheckShouldInvokeBase(this.instance))
                    base.Done(vNetPack);
                else
                    mDone_0.Invoke(this.instance, vNetPack);
            }
            public override string ToString()
            {
                IMethod m = appdomain.ObjectType.GetMethod("ToString", 0);
                m = instance.Type.GetVirtualMethod(m);
                if (m == null || m is ILMethod)
                {
                    return instance.ToString();
                }
                else
                    return instance.Type.FullName;
            }
        }
    }
}
Assets/ILRuntime/Src/Inheritance/DtcBasicAdapter.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b3ca5a52e14ab7a4682553c1fb67893d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/ILRuntime/Src/Inheritance/GameNetPackBasicAdapter.cs
New file
@@ -0,0 +1,81 @@
using System;
using ILRuntime.CLR.Method;
using ILRuntime.Runtime.Enviorment;
using ILRuntime.Runtime.Intepreter;
namespace ILCrossBinding
{
    public class GameNetPackBasicAdapter : CrossBindingAdaptor
    {
        static CrossBindingMethodInfo<System.Byte[]> mReadFromBytes_0 = new CrossBindingMethodInfo<System.Byte[]>("ReadFromBytes");
        static CrossBindingMethodInfo mWriteToBytes_1 = new CrossBindingMethodInfo("WriteToBytes");
        public override Type BaseCLRType
        {
            get
            {
                return typeof(global::GameNetPackBasic);
            }
        }
        public override Type AdaptorType
        {
            get
            {
                return typeof(Adapter);
            }
        }
        public override object CreateCLRInstance(ILRuntime.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
        {
            return new Adapter(appdomain, instance);
        }
        public class Adapter : global::GameNetPackBasic, CrossBindingAdaptorType
        {
            ILTypeInstance instance;
            ILRuntime.Runtime.Enviorment.AppDomain appdomain;
            public Adapter()
            {
            }
            public Adapter(ILRuntime.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
            {
                this.appdomain = appdomain;
                this.instance = instance;
            }
            public ILTypeInstance ILInstance { get { return instance; } }
            public override void ReadFromBytes(System.Byte[] vBytes)
            {
                if (mReadFromBytes_0.CheckShouldInvokeBase(this.instance))
                    base.ReadFromBytes(vBytes);
                else
                    mReadFromBytes_0.Invoke(this.instance, vBytes);
            }
            public override void WriteToBytes()
            {
                if (mWriteToBytes_1.CheckShouldInvokeBase(this.instance))
                    base.WriteToBytes();
                else
                    mWriteToBytes_1.Invoke(this.instance);
            }
            public override string ToString()
            {
                IMethod m = appdomain.ObjectType.GetMethod("ToString", 0);
                m = instance.Type.GetVirtualMethod(m);
                if (m == null || m is ILMethod)
                {
                    return instance.ToString();
                }
                else
                    return instance.Type.FullName;
            }
        }
    }
}
Assets/ILRuntime/Src/Inheritance/GameNetPackBasicAdapter.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a94c13742be64f647bd0be7f74f5f2a5
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Plugins/Android/libs/arm64-v8a.meta
File was deleted
Assets/Plugins/Android/libs/arm64-v8a/libxlua.so
Binary files differ
Assets/Plugins/Android/libs/arm64-v8a/libxlua.so.meta
File was deleted
Assets/Plugins/Android/libs/armeabi-v7a/libxlua.so
Binary files differ
Assets/Plugins/Android/libs/armeabi-v7a/libxlua.so.meta
File was deleted
Assets/Plugins/Android/libs/x86/libxlua.so
Binary files differ
Assets/Plugins/Android/libs/x86/libxlua.so.meta
File was deleted
Assets/Plugins/LitJson.meta
File was deleted
Assets/Plugins/LitJson/AssemblyInfo.cs.in
File was deleted
Assets/Plugins/LitJson/AssemblyInfo.cs.in.meta
File was deleted
Assets/Plugins/LitJson/IJsonWrapper.cs
File was deleted
Assets/Plugins/LitJson/IJsonWrapper.cs.meta
File was deleted
Assets/Plugins/LitJson/JsonData.cs
File was deleted
Assets/Plugins/LitJson/JsonData.cs.meta
File was deleted
Assets/Plugins/LitJson/JsonException.cs
File was deleted
Assets/Plugins/LitJson/JsonException.cs.meta
File was deleted
Assets/Plugins/LitJson/JsonMapper.cs
File was deleted
Assets/Plugins/LitJson/JsonMapper.cs.meta
File was deleted
Assets/Plugins/LitJson/JsonMockWrapper.cs
File was deleted
Assets/Plugins/LitJson/JsonMockWrapper.cs.meta
File was deleted
Assets/Plugins/LitJson/JsonReader.cs
File was deleted
Assets/Plugins/LitJson/JsonReader.cs.meta
File was deleted
Assets/Plugins/LitJson/JsonWriter.cs
File was deleted
Assets/Plugins/LitJson/JsonWriter.cs.meta
File was deleted
Assets/Plugins/LitJson/Lexer.cs
File was deleted
Assets/Plugins/LitJson/Lexer.cs.meta
File was deleted
Assets/Plugins/LitJson/Netstandard15Polyfill.cs
File was deleted
Assets/Plugins/LitJson/Netstandard15Polyfill.cs.meta
File was deleted
Assets/Plugins/LitJson/ParserToken.cs
File was deleted
Assets/Plugins/LitJson/ParserToken.cs.meta
File was deleted
Assets/Plugins/WSA/ARM.meta
File was deleted
Assets/Plugins/WSA/ARM/xlua.dll
Binary files differ
Assets/Plugins/WSA/ARM/xlua.dll.meta
File was deleted
Assets/Plugins/WSA/x64.meta
File was deleted
Assets/Plugins/WSA/x64/xlua.dll
Binary files differ
Assets/Plugins/WSA/x64/xlua.dll.meta
File was deleted
Assets/Plugins/WSA/x86.meta
File was deleted
Assets/Plugins/WSA/x86/xlua.dll
Binary files differ
Assets/Plugins/WSA/x86/xlua.dll.meta
File was deleted
Assets/Plugins/WebGL/xlua_webgl.cpp
File was deleted
Assets/Plugins/WebGL/xlua_webgl.cpp.meta
File was deleted
Assets/Plugins/iOS/HotfixFlags.cpp
File was deleted
Assets/Plugins/iOS/HotfixFlags.cpp.meta
File was deleted
Assets/Plugins/iOS/libxlua.a
Binary files differ
Assets/Plugins/iOS/libxlua.a.meta
File was deleted
Assets/Plugins/x86/libxlua.so
Binary files differ
Assets/Plugins/x86/libxlua.so.meta
File was deleted
Assets/Plugins/x86/xlua.dll
Binary files differ
Assets/Plugins/x86/xlua.dll.meta
File was deleted
Assets/Plugins/x86_64/libxlua.so
Binary files differ
Assets/Plugins/x86_64/libxlua.so.meta
File was deleted
Assets/Plugins/x86_64/xlua.dll
Binary files differ
Assets/Plugins/x86_64/xlua.dll.meta
File was deleted
Assets/Plugins/xlua.bundle.meta
File was deleted
Assets/Plugins/xlua.bundle/Contents.meta
File was deleted
Assets/Plugins/xlua.bundle/Contents/Info.plist
File was deleted
Assets/Plugins/xlua.bundle/Contents/Info.plist.meta
File was deleted
Assets/Plugins/xlua.bundle/Contents/MacOS.meta
File was deleted
Assets/Plugins/xlua.bundle/Contents/MacOS/xlua
Binary files differ
Assets/Plugins/xlua.bundle/Contents/MacOS/xlua.meta
File was deleted
Assets/XLua.meta
File was deleted
Assets/XLua/CHANGELOG.txt
File was deleted
Assets/XLua/CHANGELOG.txt.meta
File was deleted
Assets/XLua/Doc.meta
File was deleted
Assets/XLua/Doc/Add_Remove_Lua_Lib.md
File was deleted
Assets/XLua/Doc/Add_Remove_Lua_Lib.md.meta
File was deleted
Assets/XLua/Doc/Configure_EN.md
File was deleted
Assets/XLua/Doc/Configure_EN.md.meta
File was deleted
Assets/XLua/Doc/Custom_Generate_EN.md
File was deleted
Assets/XLua/Doc/Custom_Generate_EN.md.meta
File was deleted
Assets/XLua/Doc/Faq_EN.md
File was deleted
Assets/XLua/Doc/Faq_EN.md.meta
File was deleted
Assets/XLua/Doc/Hotfix_EN.md
File was deleted
Assets/XLua/Doc/Hotfix_EN.md.meta
File was deleted
Assets/XLua/Doc/Materials.meta
File was deleted
Assets/XLua/Doc/Materials/logo.mat
File was deleted
Assets/XLua/Doc/Materials/logo.mat.meta
File was deleted
Assets/XLua/Doc/XLua_API.doc
Binary files differ
Assets/XLua/Doc/XLua_API.doc.meta
File was deleted
Assets/XLua/Doc/XLua_API.md
File was deleted
Assets/XLua/Doc/XLua_API.md.meta
File was deleted
Assets/XLua/Doc/XLua_API_EN.md
File was deleted
Assets/XLua/Doc/XLua_API_EN.md.meta
File was deleted
Assets/XLua/Doc/XLua_Tutorial_EN.md
File was deleted
Assets/XLua/Doc/XLua_Tutorial_EN.md.meta
File was deleted
Assets/XLua/Doc/XLuaÔö¼Óɾ³ýµÚÈý·½lua¿â.doc
Binary files differ
Assets/XLua/Doc/XLuaÔö¼Óɾ³ýµÚÈý·½lua¿â.doc.meta
File was deleted
Assets/XLua/Doc/XLuaÔö¼Óɾ³ýµÚÈý·½lua¿â.md
File was deleted
Assets/XLua/Doc/XLuaÔö¼Óɾ³ýµÚÈý·½lua¿â.md.meta
File was deleted
Assets/XLua/Doc/XLua¸´ÔÓÖµÀàÐÍ£¨struct£©gcÓÅ»¯Ö¸ÄÏ.doc
Binary files differ
Assets/XLua/Doc/XLua¸´ÔÓÖµÀàÐÍ£¨struct£©gcÓÅ»¯Ö¸ÄÏ.doc.meta
File was deleted
Assets/XLua/Doc/XLua¸´ÔÓÖµÀàÐÍ£¨struct£©gcÓÅ»¯Ö¸ÄÏ.md
File was deleted
Assets/XLua/Doc/XLua¸´ÔÓÖµÀàÐÍ£¨struct£©gcÓÅ»¯Ö¸ÄÏ.md.meta
File was deleted
Assets/XLua/Doc/XLuaÐÔÄÜ·ÖÎö¹¤¾ß.doc
Binary files differ
Assets/XLua/Doc/XLuaÐÔÄÜ·ÖÎö¹¤¾ß.doc.meta
File was deleted
Assets/XLua/Doc/XLuaÐÔÄÜ·ÖÎö¹¤¾ß.md
File was deleted
Assets/XLua/Doc/XLuaÐÔÄÜ·ÖÎö¹¤¾ß.md.meta
File was deleted
Assets/XLua/Doc/XLua½Ì³Ì.doc
Binary files differ
Assets/XLua/Doc/XLua½Ì³Ì.doc.meta
File was deleted
Assets/XLua/Doc/XLua½Ì³Ì.md
File was deleted
Assets/XLua/Doc/XLua½Ì³Ì.md.meta
File was deleted
Assets/XLua/Doc/XLuaµÄÅäÖÃ.doc
Binary files differ
Assets/XLua/Doc/XLuaµÄÅäÖÃ.doc.meta
File was deleted
Assets/XLua/Doc/compatible_bytecode.md
File was deleted
Assets/XLua/Doc/compatible_bytecode.md.meta
File was deleted
Assets/XLua/Doc/configure.md
File was deleted
Assets/XLua/Doc/configure.md.meta
File was deleted
Assets/XLua/Doc/custom_generate.md
File was deleted
Assets/XLua/Doc/custom_generate.md.meta
File was deleted
Assets/XLua/Doc/faq.md
File was deleted
Assets/XLua/Doc/faq.md.meta
File was deleted
Assets/XLua/Doc/features.md
File was deleted
Assets/XLua/Doc/features.md.meta
File was deleted
Assets/XLua/Doc/hotfix.md
File was deleted
Assets/XLua/Doc/hotfix.md.meta
File was deleted
Assets/XLua/Doc/logo.png
Binary files differ
Assets/XLua/Doc/logo.png.meta
File was deleted
Assets/XLua/Doc/signature.md
File was deleted
Assets/XLua/Doc/signature.md.meta
File was deleted
Assets/XLua/Doc/xLua.png
Binary files differ
Assets/XLua/Doc/xLua.png.meta
File was deleted
Assets/XLua/Editor.meta
File was deleted
Assets/XLua/Editor/XluaConfig.cs
File was deleted
Assets/XLua/Editor/XluaConfig.cs.meta
File was deleted
Assets/XLua/Resources.meta
File was deleted
Assets/XLua/Resources/perf.meta
File was deleted
Assets/XLua/Resources/perf/memory.lua.txt
File was deleted
Assets/XLua/Resources/perf/memory.lua.txt.meta
File was deleted
Assets/XLua/Resources/perf/profiler.lua.txt
File was deleted
Assets/XLua/Resources/perf/profiler.lua.txt.meta
File was deleted
Assets/XLua/Resources/xlua.meta
File was deleted
Assets/XLua/Resources/xlua/util.lua.txt
File was deleted
Assets/XLua/Resources/xlua/util.lua.txt.meta
File was deleted
Assets/XLua/Src.meta
File was deleted
Assets/XLua/Src/CodeEmit.cs
File was deleted
Assets/XLua/Src/CodeEmit.cs.meta
File was deleted
Assets/XLua/Src/CopyByValue.cs
File was deleted
Assets/XLua/Src/CopyByValue.cs.meta
File was deleted
Assets/XLua/Src/DelegateBridge.cs
File was deleted
Assets/XLua/Src/DelegateBridge.cs.meta
File was deleted
Assets/XLua/Src/Editor.meta
File was deleted
Assets/XLua/Src/Editor/Generator.cs
File was deleted
Assets/XLua/Src/Editor/Generator.cs.meta
File was deleted
Assets/XLua/Src/Editor/Hotfix.cs
File was deleted
Assets/XLua/Src/Editor/Hotfix.cs.meta
File was deleted
Assets/XLua/Src/Editor/LinkXmlGen.meta
File was deleted
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.cs
File was deleted
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.cs.meta
File was deleted
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.tpl.txt
File was deleted
Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaClassWrap.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaClassWrap.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaClassWrapGCM.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaClassWrapGCM.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaDelegateBridge.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaDelegateBridge.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaDelegateWrap.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaDelegateWrap.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaEnumWrap.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaEnumWrap.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaEnumWrapGCM.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaEnumWrapGCM.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaInterfaceBridge.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaInterfaceBridge.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaRegister.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaRegister.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaRegisterGCM.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaRegisterGCM.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/LuaWrapPusher.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/LuaWrapPusher.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/PackUnpack.tpl.txt
File was deleted
Assets/XLua/Src/Editor/Template/PackUnpack.tpl.txt.meta
File was deleted
Assets/XLua/Src/Editor/Template/TemplateCommon.lua.txt
File was deleted
Assets/XLua/Src/Editor/Template/TemplateCommon.lua.txt.meta
File was deleted
Assets/XLua/Src/Editor/TemplateRef.cs
File was deleted
Assets/XLua/Src/Editor/TemplateRef.cs.meta
File was deleted
Assets/XLua/Src/GenAttributes.cs
File was deleted
Assets/XLua/Src/GenAttributes.cs.meta
File was deleted
Assets/XLua/Src/GenericDelegateBridge.cs
File was deleted
Assets/XLua/Src/GenericDelegateBridge.cs.meta
File was deleted
Assets/XLua/Src/InternalGlobals.cs
File was deleted
Assets/XLua/Src/InternalGlobals.cs.meta
File was deleted
Assets/XLua/Src/LuaBase.cs
File was deleted
Assets/XLua/Src/LuaBase.cs.meta
File was deleted
Assets/XLua/Src/LuaDLL.cs
File was deleted
Assets/XLua/Src/LuaDLL.cs.meta
File was deleted
Assets/XLua/Src/LuaEnv.cs
File was deleted
Assets/XLua/Src/LuaEnv.cs.meta
File was deleted
Assets/XLua/Src/LuaException.cs
File was deleted
Assets/XLua/Src/LuaException.cs.meta
File was deleted
Assets/XLua/Src/LuaFunction.cs
File was deleted
Assets/XLua/Src/LuaFunction.cs.meta
File was deleted
Assets/XLua/Src/LuaTable.cs
File was deleted
Assets/XLua/Src/LuaTable.cs.meta
File was deleted
Assets/XLua/Src/MethodWarpsCache.cs
File was deleted
Assets/XLua/Src/MethodWarpsCache.cs.meta
File was deleted
Assets/XLua/Src/ObjectCasters.cs
File was deleted
Assets/XLua/Src/ObjectCasters.cs.meta
File was deleted
Assets/XLua/Src/ObjectPool.cs
File was deleted
Assets/XLua/Src/ObjectPool.cs.meta
File was deleted
Assets/XLua/Src/ObjectTranslator.cs
File was deleted
Assets/XLua/Src/ObjectTranslator.cs.meta
File was deleted
Assets/XLua/Src/ObjectTranslatorPool.cs
File was deleted
Assets/XLua/Src/ObjectTranslatorPool.cs.meta
File was deleted
Assets/XLua/Src/RawObject.cs
File was deleted
Assets/XLua/Src/RawObject.cs.meta
File was deleted
Assets/XLua/Src/SignatureLoader.cs
File was deleted
Assets/XLua/Src/SignatureLoader.cs.meta
File was deleted
Assets/XLua/Src/StaticLuaCallbacks.cs
File was deleted
Assets/XLua/Src/StaticLuaCallbacks.cs.meta
File was deleted
Assets/XLua/Src/TemplateEngine.meta
File was deleted
Assets/XLua/Src/TemplateEngine/TemplateEngine.cs
File was deleted
Assets/XLua/Src/TemplateEngine/TemplateEngine.cs.meta
File was deleted
Assets/XLua/Src/TypeExtensions.cs
File was deleted
Assets/XLua/Src/TypeExtensions.cs.meta
File was deleted
Assets/XLua/Src/Utils.cs
File was deleted
Assets/XLua/Src/Utils.cs.meta
File was deleted
ProjectSettings/PackageManagerSettings.asset
@@ -20,19 +20,26 @@
    m_Url: https://packages.unity.com
    m_Scopes: []
    m_IsDefault: 1
  - m_Id: scoped:ILRuntime
    m_Name: ILRuntime
    m_Url: https://registry.npmjs.org
    m_Scopes:
    - com.ourpalm
    m_IsDefault: 0
  m_UserSelectedRegistryName: 
  m_UserAddingNewScopedRegistry: 0
  m_RegistryInfoDraft:
    m_ErrorMessage: 
    m_Original:
      m_Id:
      m_Name:
      m_Url:
      m_Scopes: []
      m_Id: scoped:ILRuntime
      m_Name: ILRuntime
      m_Url: https://registry.npmjs.org
      m_Scopes:
      - com.ourpalm
      m_IsDefault: 0
    m_Modified: 0
    m_Name:
    m_Url:
    m_Name: ILRuntime
    m_Url: https://registry.npmjs.org
    m_Scopes:
    -
    - com.ourpalm
    m_SelectedScopeIndex: 0
ProjectSettings/ProjectSettings.asset
@@ -791,7 +791,7 @@
  il2cppCompilerConfiguration: {}
  managedStrippingLevel: {}
  incrementalIl2cppBuild: {}
  allowUnsafeCode: 0
  allowUnsafeCode: 1
  additionalIl2CppArgs: 
  scriptingRuntimeVersion: 1
  gcIncremental: 0
Tools/Mono.Cecil.Mdb.dll
Binary files differ
Tools/Mono.Cecil.Pdb.dll
Binary files differ
Tools/Mono.Cecil.dll
Binary files differ
Tools/Mono.Security.dll
Binary files differ
Tools/System.Core.dll
Binary files differ
Tools/System.Core.dll.mdb
Binary files differ
Tools/System.dll
Binary files differ
Tools/System.dll.mdb
Binary files differ
Tools/XLuaHotfixInject.exe
Binary files differ