Răsfoiți Sursa

优化ET使用和代码阅读体验 (#509)

* 保证vs和rider显示工程的完整性

点击ReGenerateProjectFiles时判断工程文件完整性,若没有,则先切换编译再切换回来

* 升级HybridCLR到4.0.12;升级vs和rider包

还有HybridCLR生成文件

* 删除反射调用

com.unity.ide.rider@3.0.26\Rider\Editor\RiderScriptEditor.cs
的SyncAll方法里面就是调用的m_ProjectGeneration.Sync();
故优化掉反射的调用方式

* 优化编辑器下dll加载路径

1.将dll加载路径改成"Assets/Bundles/Code/",避免重启Unity后必须编译才能运行
2.修复初次打开项目时OnGeneratedCSProject的globalConfig会报空的问题
3.加入文档注释和删除旧的无引用代码

* 完善Attribute注释

方便编辑器中查看

* 优化运行指南

加粗重点词语

* optimize

add break in loop
EP-Toushirou 2 ani în urmă
părinte
comite
2df60c8e5c

+ 40 - 42
Book/1.1运行指南.md

@@ -1,59 +1,57 @@
 # 运行步骤  
-01. 不提供visual studio技术支持,用vs的用户请自己研究,不要来问我,我自己也没用过  
+01. **建议使用Rider2023.2**(更新到最新版),需要安装以下内容:
+   - 安装.Net7
+   - Rider的Unity插件
 
-02. 使用Rider2023.2(更新到最新版), 需要安装以下内容:
-   - Rider的Unity插件  
-   - 安装 .net7  
+   若使用VisualStudio2022(更新到最新版),需要安装以下内容:
+   - 安装.Net7
+   - VS的Unity插件
+   - 安装后需要在VS里的"工具 -> 选项 -> 适用于Unity的工具 -> 常规"里,把杂项里的禁止完整生成项目改为False,否则导致你Codes目录里的代码报错
 
-03. master分支必须要unity2021.3.29版(其它版本跑出问题请不要来问我,我也没用过,等你会了再用其它版本)  
+02. master分支必须使用Unity**2021.3.29**(初学者请在此版本用熟后再切换其他版本)
 
-04. 启动Unity, Edit->Preferences->External Tools External ScriptEditor选择VS或者Rider, Generate .csproj files for全部不要勾选,VS需要在"工具-选项-适用于Unity的工具-常规"里,把杂项里的禁止完整生成项目改为False,否则导致你Codes目录里的代码报错。  
+03. 启动UnityHub,打开(Open) -> 选中'ET/Unity'文件夹所在目录后打开工程
 
-05. Unity菜单 File -> Open Project... -> Open 选中ET/Unity文件夹,点击选择文件夹按钮。  
+04. 打开工程后,点击Unity菜单 -> Edit -> Preferences -> External Tools 在下拉框'**External ScriptEditor**'中选择'**Visual Studio**'或者'**Rider**',Generate .csproj files for全部**不要勾选(□)**
 
-06. 点击Unity菜单 Assets -> Open C# Project 启动IDE  
+05. 点击Unity菜单 -> Assets -> Open C# Project 启动IDE
 
-07. 选中Resources/GlobalConfig,把AppType选择Demo(状态同步)或者LockStep(帧同步)  
+06. 在Project视图中选中'Assets/Resources/GlobalConfig',把AppType选择成'**Demo(状态同步)**'或者'**LockStep(帧同步)**'
 
-08. 打开Unity菜单ET/BuildTool CodeMode选择Client Server, 点击ReGenerateProjectFiles。  
+07. 打开Unity菜单 -> ET -> BuildTool,CodeMode选择**Client Server**,然后**点击ReGenerateProjectFiles**
 
-09. 打开ET.sln, 编译Unity.AllHotfix工程,Model Hotfix ModelView HotfixView加载失败没有关系   
+08. 打开ET.sln,**编译Unity.AllHotfix工程**
 
-10. Unity中双击Scenes目录中的Init场景,点击Play即可运行   
+09. Unity中双击'Assets/Scenes'目录中的**Init**场景,点击Play(▶)即可运行   
 
-11. 帧同步默认是一个人匹配,如果需要多人匹配,修改LSConstValue中的MatchCount即可  
+10. 帧同步默认是一个人匹配,如果需要多人匹配,修改**LSConstValue.cs**中的**MatchCount**即可
 
-# 打包过程:
-1.点击HybridCLR->Installer,点击安装,等待安装完成  
-2.用Rider,编译好Unity.AllHotfix  
-3.点击HybridCLR->Generate->all  
-4.点击HybridCLR->CopyAotDlls,这一步会把需要补充元数据的dll复制到Assets/Bundles/AotDlls目录  
-5.打开yooasset菜单,点击assetsbundle builder,勾选copy buildin file option选择clear and copy all,点击构建  
-6.打开Unity菜单ET->BuildTool 点击BuildPackage  
-7.yooasset包管理库,请自己研究 https://www.yooasset.com/  
+# 打包过程:
+1.点击HybridCLR -> Installer,点击安装,等待安装完成
+2.用Rider或VS,编译好Unity.AllHotfix
+3.点击HybridCLR -> Generate -> All
+4.点击HybridCLR -> CopyAotDlls,这一步会把需要补充元数据的dll复制到'Assets/Bundles/AotDlls'目录
+5.打开YooAsset菜单 -> 点击AssetBundle Builder -> 点击下拉框'Copy Buildin File Option' -> 选择'Clear And Copy All' -> 点击'构建'
+6.打开Unity菜单ET -> BuildTool 点击'BuildPackage',Windows下生成的exe在'ET/Release'里面
 
-# ENABLE_DLL模式  
-1. 该模式用于逻辑全热更新,还有热重载, 默认就是使用该模式  
-2. 在Unity菜单ET->ChangeDefines中开启关闭  
-3. 逻辑打成了一个Model.dll跟Hotfix.dll,unity加载dll运行,这样Unity Editor将无法引用逻辑代码。如果Editor需要用到逻辑代码,可以关闭ENABLE_DLL模式  
+另:**请自行研究**YooAsset包管理库的使用方式([YooAsset官网](https://www.yooasset.com/)),若需要升级请自行替换'ET/Unity/Packages/YooAsset'
 
-# 注意事项:
+# ENABLE_DLL模式
+1. 该模式用于**逻辑全热更新**,还有**热重载**,默认就是使用该模式
+2. 在Unity菜单ET -> ChangeDefines -> Remove ENABLE_DLL(关闭) 或 Add ENABLE_DLL(开启)
+3. 逻辑打成了一个Model.dll跟Hotfix.dll,Unity加载dll运行,这样Unity Editor将无法引用逻辑代码。如果Editor需要用到逻辑代码,可以关闭ENABLE_DLL模式
+4. 若需要体验热重载,需要在Unity菜单 -> Edit -> Preferences -> General窗口的ScriptChangesWhilePlaying 中 选择 '**RecompileAfterFinishedPlaying**',运行后修改Hotfix代码然后用Rider或VS编译好Unity.AllHotfix工程,再在状态同步Demo中按'R'键
 
-一. 出错原因都是:  
+# 注意事项:
 
-1. 中文目录。  
-2. VS 版本低
-3. Rider没有安装相关组件
-4. 没安装 .net6
+一、常见出错原因:
+1. 中文目录
+2. Rider或VS没有更新到最新版本
+3. Rider或VS没有安装相关组件
+4. 没安装.Net7
 5. 没编译服务端所有工程
-6. Rider要更新到最新版本  
-7. Unity版本太低
-8. Win7 用户,没有特别设置
-9. *编译过程中如果出现依赖问题,也有可能是 Unity - External Tools - Generate .csproj files for:
-   当中勾选了 
-      1. Registry packages
-      2. Build-in packages
-10. *如果打包报错缺少"StreamingAsset",自己在 ET\Unity\Assets 下新建一个 StreamingAsset 文件夹即可。
-
-
-
+6. Unity版本不兼容
+7. Win7用户,没有特别设置
+8. 编译过程中如果出现依赖问题,也有可能是'Unity菜单 -> Edit -> Preferences -> External Tools -> Generate .csproj files for':
+   当中勾选了:'Registry packages' 或 'Build-in packages', 请记得都**不要勾选(□)**
+9. 如果打包报错缺少"StreamingAsset",自己在 'ET/Unity/Assets' 下新建一个 StreamingAsset 文件夹即可

+ 5 - 0
Unity/Assets/Scripts/Core/Analyzer/ChildOfAttribute.cs

@@ -2,6 +2,11 @@
 
 namespace ET
 {
+    /// <summary>
+    /// 子实体的父级实体类型约束
+    /// 父级实体类型唯一的 标记指定父级实体类型[ChildOf(typeof(parentType)]
+    /// 不唯一则标记[ChildOf]
+    /// </summary>
     [AttributeUsage(AttributeTargets.Class)]
     public class ChildOfAttribute : Attribute
     {

+ 7 - 1
Unity/Assets/Scripts/Core/Analyzer/EntitySystemOf.cs

@@ -2,6 +2,9 @@
 
 namespace ET
 {
+    /// <summary>
+    /// 标记Entity的System静态类 用于自动生成System函数
+    /// </summary>
     [AttributeUsage(AttributeTargets.Class)]
     public class EntitySystemOfAttribute: BaseAttribute
     {
@@ -17,7 +20,10 @@ namespace ET
             this.type = type;
         }
     }
-    
+
+    /// <summary>
+    /// 标记LSEntity的System静态类 用于自动生成System函数
+    /// </summary>
     [AttributeUsage(AttributeTargets.Class)]
     public class LSEntitySystemOfAttribute: BaseAttribute
     {

+ 4 - 1
Unity/Assets/Scripts/Core/Analyzer/FriendOfAttribute.cs

@@ -2,7 +2,10 @@
 
 namespace ET
 {
-    
+    /// <summary>
+    /// 数据修改友好标记, 用于允许修改指定Component或Child数据的类上
+    /// 例如:MoveComponentSystem需要修改MoveComponent的数据, 需要在MoveComponentSystem加上[FriendOf(typeof(MoveComponent))]
+    /// </summary>
     [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
     public class FriendOfAttribute : Attribute
     {

+ 94 - 67
Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs

@@ -1,29 +1,34 @@
 using System;
-using UnityEditor;
-using UnityEngine;
-using System.Xml;
 using System.IO;
+using System.Xml;
+using UnityEditor;
 
 namespace ET
 {
-    public class OnGenerateCSProjectProcessor: AssetPostprocessor
+    public class OnGenerateCSProjectProcessor : AssetPostprocessor
     {
-        private static string[] deleteFile = new string[] 
-        { 
-            "Library/ScriptAssemblies/Unity.AllModel.dll", 
+        /// <summary>
+        /// 被Unity编译完成后需要删除的dll列表
+        /// "Define.EnableDll"模式:运行游戏时由CodeLoader.cs动态加载dll, 故在此模式需要删除以下dll
+        /// "!Define.EnableDll"模式:保留在"Library/ScriptAssemblies"中, Unity会自动加载
+        /// </summary>
+        private static string[] deleteFile = new string[]
+        {
+            "Library/ScriptAssemblies/Unity.AllModel.dll",
             "Library/ScriptAssemblies/Unity.AllHotfix.dll",
-            "Library/ScriptAssemblies/Unity.AllModel.pdb", 
-            "Library/ScriptAssemblies/Unity.AllHotfix.pdb", 
+            "Library/ScriptAssemblies/Unity.AllModel.pdb",
+            "Library/ScriptAssemblies/Unity.AllHotfix.pdb",
         };
-        
+
+        /// <summary>
+        /// 文档:https://learn.microsoft.com/zh-cn/visualstudio/gamedev/unity/extensibility/customize-project-files-created-by-vstu#%E6%A6%82%E8%A7%88
+        /// </summary>
         public static string OnGeneratedCSProject(string path, string content)
         {
             if (path.EndsWith("Unity.Core.csproj"))
             {
-                return GenerateCustomProject(path, content);
+                return GenerateCustomProject(content);
             }
-            
-            GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
 
             if (path.EndsWith("Unity.AllModel.csproj"))
             {
@@ -31,105 +36,127 @@ namespace ET
                 {
                     return content;
                 }
-                if (globalConfig.BuildType == BuildType.Release)
-                {
-                    content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
-                    content = content.Replace(";DEBUG;", ";");
-                }
 
-                string[] files = Array.Empty<string>();
-                switch (globalConfig.CodeMode)
+                GlobalConfig globalConfig = GetGlobalConfig();
+                if (globalConfig != null)
                 {
-                    case CodeMode.Client:
-                        files = new[]
-                        {
+                    if (globalConfig.BuildType == BuildType.Release)
+                    {
+                        content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
+                        content = content.Replace(";DEBUG;", ";");
+                    }
+
+                    string[] files = Array.Empty<string>();
+                    switch (globalConfig.CodeMode)
+                    {
+                        case CodeMode.Client:
+                            files = new[]
+                            {
                             @"Assets\Scripts\Model\Client\**\*.cs Model\Client\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Model\Share\**\*.cs Model\Share\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Model\Generate\Client\**\*.cs Model\Generate\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\ModelView\Client\**\*.cs ModelView\Client\%(RecursiveDir)%(FileName)%(Extension)",
                         };
-                        break;
-                    case CodeMode.ClientServer:
-                        files = new[]
-                        {
+                            break;
+                        case CodeMode.ClientServer:
+                            files = new[]
+                            {
                             @"Assets\Scripts\Model\Server\**\*.cs Model\Server\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Model\Client\**\*.cs Model\Client\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Model\Share\**\*.cs Model\Share\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Model\Generate\ClientServer\**\*.cs Model\Generate\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\ModelView\Client\**\*.cs ModelView\Client\%(RecursiveDir)%(FileName)%(Extension)",
                         };
-                        break;
+                            break;
+                    }
+
+                    content = GenerateCustomProject(content, files);
+                    content = content.Replace("<Target Name=\"AfterBuild\" />",
+                        "   <Target Name=\"PostBuild\" AfterTargets=\"PostBuildEvent\">\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Model.dll.bytes\" ContinueOnError=\"false\" />\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Model.pdb.bytes\" ContinueOnError=\"false\" />\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Model.dll\" ContinueOnError=\"false\" />\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Model.pdb\" ContinueOnError=\"false\" />\n" +
+                        "   </Target>\n");
+                    return content;
                 }
-
-                content = GenerateCustomProject(path, content, files);
-                content = content.Replace("<Target Name=\"AfterBuild\" />",
-                    "   <Target Name=\"PostBuild\" AfterTargets=\"PostBuildEvent\">\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Model.dll.bytes\" ContinueOnError=\"false\" />\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Model.pdb.bytes\" ContinueOnError=\"false\" />\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Model.dll\" ContinueOnError=\"false\" />\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Model.pdb\" ContinueOnError=\"false\" />\n" +
-                    "   </Target>\n");
-                return content;
             }
-            
+
             if (path.EndsWith("Unity.AllHotfix.csproj"))
             {
                 if (!Define.EnableDll)
                 {
                     return content;
                 }
-                
-                if (globalConfig.BuildType == BuildType.Release)
-                {
-                    content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
-                    content = content.Replace(";DEBUG;", ";");
-                }
 
-                string[] files = Array.Empty<string>();
-                switch (globalConfig.CodeMode)
+                GlobalConfig globalConfig = GetGlobalConfig();
+                if (globalConfig != null)
                 {
-                    case CodeMode.Client:
-                        files = new[]
-                        {
+                    if (globalConfig.BuildType == BuildType.Release)
+                    {
+                        content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
+                        content = content.Replace(";DEBUG;", ";");
+                    }
+
+                    string[] files = Array.Empty<string>();
+                    switch (globalConfig.CodeMode)
+                    {
+                        case CodeMode.Client:
+                            files = new[]
+                            {
                             @"Assets\Scripts\Hotfix\Client\**\*.cs Hotfix\Client\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Hotfix\Share\**\*.cs Hotfix\Share\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\HotfixView\Client\**\*.cs HotfixView\Client\%(RecursiveDir)%(FileName)%(Extension)"
                         };
-                        break;
-                    case CodeMode.ClientServer:
-                        files = new[]
-                        {
+                            break;
+                        case CodeMode.ClientServer:
+                            files = new[]
+                            {
                             @"Assets\Scripts\Hotfix\Client\**\*.cs Hotfix\Client\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Hotfix\Server\**\*.cs Hotfix\Server\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\Hotfix\Share\**\*.cs Hotfix\Share\%(RecursiveDir)%(FileName)%(Extension)",
                             @"Assets\Scripts\HotfixView\Client\**\*.cs HotfixView\Client\%(RecursiveDir)%(FileName)%(Extension)"
                         };
-                        break;
+                            break;
+                    }
+
+                    content = GenerateCustomProject(content, files);
+                    content = content.Replace("<Target Name=\"AfterBuild\" />",
+                        "   <Target Name=\"PostBuild\" AfterTargets=\"PostBuildEvent\">\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Hotfix.dll.bytes\" ContinueOnError=\"false\" />\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Hotfix.pdb.bytes\" ContinueOnError=\"false\" />\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Hotfix.dll\" ContinueOnError=\"false\" />\n" +
+                        $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Hotfix.pdb\" ContinueOnError=\"false\" />\n" +
+                        "   </Target>\n");
                 }
-
-                content = GenerateCustomProject(path, content, files);
-                content = content.Replace("<Target Name=\"AfterBuild\" />",
-                    "   <Target Name=\"PostBuild\" AfterTargets=\"PostBuildEvent\">\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Hotfix.dll.bytes\" ContinueOnError=\"false\" />\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.CodeDir}/Hotfix.pdb.bytes\" ContinueOnError=\"false\" />\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).dll\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Hotfix.dll\" ContinueOnError=\"false\" />\n" +
-                    $"       <Copy SourceFiles=\"$(TargetDir)/$(TargetName).pdb\" DestinationFiles=\"$(ProjectDir)/{Define.BuildOutputDir}/Hotfix.pdb\" ContinueOnError=\"false\" />\n" +
-                    "   </Target>\n");
             }
 
-
             foreach (string file in deleteFile)
             {
                 if (File.Exists(file))
                 {
-                    File.Delete(file);    
+                    File.Delete(file);
                 }
             }
 
             return content;
         }
 
-        private static string GenerateCustomProject(string path, string content, params string[] links)
+        /// <summary>
+        /// 获取全局配置
+        /// </summary>
+        private static GlobalConfig GetGlobalConfig()
+        {
+            return AssetDatabase.LoadAssetAtPath<GlobalConfig>("Assets/Resources/GlobalConfig.asset");
+        }
+
+        /// <summary>
+        /// 自定义C#项目配置
+        /// 参考链接:
+        /// https://learn.microsoft.com/zh-cn/visualstudio/ide/reference/build-events-page-project-designer-csharp?view=vs-2022
+        /// https://learn.microsoft.com/zh-cn/visualstudio/ide/how-to-specify-build-events-csharp?view=vs-2022
+        /// </summary>
+        private static string GenerateCustomProject(string content, params string[] links)
         {
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(content);

+ 160 - 156
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -1,175 +1,179 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
+using System.IO;
 using UnityEditor;
-using UnityEditor.Compilation;
 using UnityEngine;
 using YooAsset;
-using Debug = UnityEngine.Debug;
-#pragma warning disable CS0162
 
 namespace ET
 {
-	public enum PlatformType
-	{
-		None,
-		Android,
-		IOS,
-		Windows,
-		MacOS,
-		Linux
-	}
-
-	public class BuildEditor : EditorWindow
-	{
-		private PlatformType activePlatform;
-		private PlatformType platformType;
-		private bool clearFolder;
-		private BuildOptions buildOptions;
-		private BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
-
-		private GlobalConfig globalConfig;
-
-		[MenuItem("ET/Build Tool")]
-		public static void ShowWindow()
-		{
-			GetWindow<BuildEditor>(DockDefine.Types);
-		}
+    public enum PlatformType
+    {
+        None,
+        Android,
+        IOS,
+        Windows,
+        MacOS,
+        Linux
+    }
+
+    public class BuildEditor : EditorWindow
+    {
+        private PlatformType activePlatform;
+        private PlatformType platformType;
+        private bool clearFolder;
+        private BuildOptions buildOptions;
+        private BuildAssetBundleOptions buildAssetBundleOptions = BuildAssetBundleOptions.None;
+
+        private GlobalConfig globalConfig;
+
+        [MenuItem("ET/Build Tool")]
+        public static void ShowWindow()
+        {
+            GetWindow<BuildEditor>(DockDefine.Types);
+        }
 
         private void OnEnable()
-		{
-			globalConfig = AssetDatabase.LoadAssetAtPath<GlobalConfig>("Assets/Resources/GlobalConfig.asset");
-			
+        {
+            globalConfig = AssetDatabase.LoadAssetAtPath<GlobalConfig>("Assets/Resources/GlobalConfig.asset");
+
 #if UNITY_ANDROID
-			activePlatform = PlatformType.Android;
+            activePlatform = PlatformType.Android;
 #elif UNITY_IOS
-			activePlatform = PlatformType.IOS;
+            activePlatform = PlatformType.IOS;
 #elif UNITY_STANDALONE_WIN
-			activePlatform = PlatformType.Windows;
+            activePlatform = PlatformType.Windows;
 #elif UNITY_STANDALONE_OSX
-			activePlatform = PlatformType.MacOS;
+            activePlatform = PlatformType.MacOS;
 #elif UNITY_STANDALONE_LINUX
-			activePlatform = PlatformType.Linux;
+            activePlatform = PlatformType.Linux;
 #else
-			activePlatform = PlatformType.None;
+            activePlatform = PlatformType.None;
 #endif
             platformType = activePlatform;
         }
 
-        private void OnGUI() 
-		{
-			this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
-			this.clearFolder = EditorGUILayout.Toggle("clean folder? ", clearFolder);
-			BuildType codeOptimization = (BuildType)EditorGUILayout.EnumPopup("BuildType ", this.globalConfig.BuildType);
-			
-			if (codeOptimization != this.globalConfig.BuildType)
-			{
-				this.globalConfig.BuildType = codeOptimization;
-				EditorUtility.SetDirty(this.globalConfig);
-				AssetDatabase.SaveAssets();
-			}
-			
-			EditorGUILayout.LabelField("BuildAssetBundleOptions ");
-			this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField(this.buildAssetBundleOptions);
-			
-			switch (this.globalConfig.BuildType)
-			{
-				case BuildType.None:
-				case BuildType.Debug:
-					this.buildOptions = BuildOptions.BuildScriptsOnly;
-					break;
-				case BuildType.Release:
-					this.buildOptions = BuildOptions.BuildScriptsOnly;
-					break;
-			}
-
-			GUILayout.Space(5);
-			
-			if (GUILayout.Button("BuildPackage"))
-			{
-				if (this.platformType == PlatformType.None)
-				{
-					Log.Error("please select platform!");
-					return;
-				}
-				
-				if (this.globalConfig.CodeMode != CodeMode.Client)
-				{
-					Log.Error("build package CodeMode must be CodeMode.Client, please select Client, RegenerateCSProject, then rebuild Hotfix and Model !!!");
-					return;
-				}
-				
-				if (this.globalConfig.EPlayMode == EPlayMode.EditorSimulateMode)
-				{
-					Log.Error("build package EPlayMode must not be EPlayMode.EditorSimulateMode, please select EditorMode");
-					return;
-				}
-				
-				if (platformType != activePlatform)
-				{
-					switch (EditorUtility.DisplayDialogComplex("Warning!", $"current platform is {activePlatform}, if change to {platformType}, may be take a long time", "change", "cancel", "no change"))
-					{
-						case 0:
-							activePlatform = platformType;
-							break;
-						case 1:
-							return;
-						case 2:
-							platformType = activePlatform;
-							break;
-					}
-				}
-				BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.clearFolder);
-				return;
-			}
-			
-			GUILayout.Label("");
-			GUILayout.Label("Code Compile:");
-			EditorGUI.BeginChangeCheck();
-			CodeMode codeMode = (CodeMode)EditorGUILayout.EnumPopup("CodeMode: ", this.globalConfig.CodeMode);
-			if (EditorGUI.EndChangeCheck())
-			{
-				EditorUtility.SetDirty(this.globalConfig);
-				AssetDatabase.SaveAssetIfDirty(this.globalConfig);
-				AssetDatabase.Refresh();
-			}
-
-			if (codeMode != this.globalConfig.CodeMode)
-			{
-				this.globalConfig.CodeMode = codeMode;
-				EditorUtility.SetDirty(this.globalConfig);
-				AssetDatabase.SaveAssets();
-			}
-			
-			EPlayMode ePlayMode = (EPlayMode)EditorGUILayout.EnumPopup("EPlayMode: ", this.globalConfig.EPlayMode);
-			if (ePlayMode != this.globalConfig.EPlayMode)
-			{
-				this.globalConfig.EPlayMode = ePlayMode;
-				EditorUtility.SetDirty(this.globalConfig);
-				AssetDatabase.SaveAssets();
-			}
-
-			if (GUILayout.Button("ReGenerateProjectFiles"))
-			{
-				BuildHelper.ReGenerateProjectFiles();
-				return;
-			}
-			
-			if (GUILayout.Button("ExcelExporter"))
-			{
-				ToolsEditor.ExcelExporter();
-				return;
-			}
-			
-			if (GUILayout.Button("Proto2CS"))
-			{
-				ToolsEditor.Proto2CS();
-				return;
-			}
-
-			GUILayout.Space(5);
-		}
-	}
+        private void OnGUI()
+        {
+            this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
+            this.clearFolder = EditorGUILayout.Toggle("clean folder? ", clearFolder);
+            BuildType codeOptimization = (BuildType)EditorGUILayout.EnumPopup("BuildType ", this.globalConfig.BuildType);
+
+            if (codeOptimization != this.globalConfig.BuildType)
+            {
+                this.globalConfig.BuildType = codeOptimization;
+                EditorUtility.SetDirty(this.globalConfig);
+                AssetDatabase.SaveAssets();
+            }
+
+            EditorGUILayout.LabelField("BuildAssetBundleOptions ");
+            this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField(this.buildAssetBundleOptions);
+
+            switch (this.globalConfig.BuildType)
+            {
+                case BuildType.None:
+                case BuildType.Debug:
+                    this.buildOptions = BuildOptions.BuildScriptsOnly;
+                    break;
+                case BuildType.Release:
+                    this.buildOptions = BuildOptions.BuildScriptsOnly;
+                    break;
+            }
+
+            GUILayout.Space(5);
+
+            if (GUILayout.Button("BuildPackage"))
+            {
+                if (this.platformType == PlatformType.None)
+                {
+                    Log.Error("please select platform!");
+                    return;
+                }
+
+                if (this.globalConfig.CodeMode != CodeMode.Client)
+                {
+                    Log.Error("build package CodeMode must be CodeMode.Client, please select Client, RegenerateCSProject, then rebuild Hotfix and Model !!!");
+                    return;
+                }
+
+                if (this.globalConfig.EPlayMode == EPlayMode.EditorSimulateMode)
+                {
+                    Log.Error("build package EPlayMode must not be EPlayMode.EditorSimulateMode, please select EditorMode");
+                    return;
+                }
+
+                if (platformType != activePlatform)
+                {
+                    switch (EditorUtility.DisplayDialogComplex("Warning!", $"current platform is {activePlatform}, if change to {platformType}, may be take a long time", "change", "cancel", "no change"))
+                    {
+                        case 0:
+                            activePlatform = platformType;
+                            break;
+                        case 1:
+                            return;
+                        case 2:
+                            platformType = activePlatform;
+                            break;
+                    }
+                }
+                BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.clearFolder);
+                return;
+            }
+
+            GUILayout.Label("");
+            GUILayout.Label("Code Compile:");
+            EditorGUI.BeginChangeCheck();
+            CodeMode codeMode = (CodeMode)EditorGUILayout.EnumPopup("CodeMode: ", this.globalConfig.CodeMode);
+            if (EditorGUI.EndChangeCheck())
+            {
+                EditorUtility.SetDirty(this.globalConfig);
+                AssetDatabase.SaveAssetIfDirty(this.globalConfig);
+                AssetDatabase.Refresh();
+            }
+
+            if (codeMode != this.globalConfig.CodeMode)
+            {
+                this.globalConfig.CodeMode = codeMode;
+                EditorUtility.SetDirty(this.globalConfig);
+                AssetDatabase.SaveAssets();
+            }
+
+            EPlayMode ePlayMode = (EPlayMode)EditorGUILayout.EnumPopup("EPlayMode: ", this.globalConfig.EPlayMode);
+            if (ePlayMode != this.globalConfig.EPlayMode)
+            {
+                this.globalConfig.EPlayMode = ePlayMode;
+                EditorUtility.SetDirty(this.globalConfig);
+                AssetDatabase.SaveAssets();
+            }
+
+            if (GUILayout.Button("ReGenerateProjectFiles"))
+            {
+                if (Define.EnableDll)
+                {
+                    // 若没有生成以下工程,则切换到非ENABLE_DLL模式进行编译,编译完再切换回来, 保证代码编辑器正常显示所有项目
+                    if (!File.Exists("./Unity.Hotfix.csproj") || !File.Exists("./Unity.HotfixView.csproj") ||
+                        !File.Exists("./Unity.Model.csproj") || !File.Exists("./Unity.ModelView.csproj"))
+                    {
+                        BuildHelper.EnableDefineSymbols("ENABLE_DLL", false);
+                        BuildHelper.EnableDefineSymbols("ENABLE_DLL", true);
+                    }
+                }
+
+                BuildHelper.ReGenerateProjectFiles();
+                return;
+            }
+
+            if (GUILayout.Button("ExcelExporter"))
+            {
+                ToolsEditor.ExcelExporter();
+                return;
+            }
+
+            if (GUILayout.Button("Proto2CS"))
+            {
+                ToolsEditor.Proto2CS();
+                return;
+            }
+
+            GUILayout.Space(5);
+        }
+    }
 }

+ 10 - 25
Unity/Assets/Scripts/Editor/BuildEditor/BuildHelper.cs

@@ -1,6 +1,5 @@
 using System.IO;
 using System.Linq;
-using System.Reflection;
 using UnityEditor;
 using UnityEngine;
 
@@ -11,26 +10,14 @@ namespace ET
         private const string relativeDirPrefix = "../Release";
 
         public static string BuildFolder = "../Release/{0}/StreamingAssets/";
-        
-        
+
         [InitializeOnLoadMethod]
         public static void ReGenerateProjectFiles()
         {
-            if (Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().Name== "RiderScriptEditor")
-            {
-                FieldInfo generator = Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().GetField("m_ProjectGeneration", BindingFlags.Static | BindingFlags.NonPublic);
-                var syncMethod = generator.FieldType.GetMethod("Sync");
-                syncMethod.Invoke(generator.GetValue(Unity.CodeEditor.CodeEditor.CurrentEditor), null);
-            }
-            else
-            {
-                Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll();
-            }
-            
+            Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll();
             Debug.Log("ReGenerateProjectFiles finished.");
         }
 
-              
 #if ENABLE_DLL
         [MenuItem("ET/ChangeDefine/Remove ENABLE_DLL")]
         public static void RemoveEnableDll()
@@ -60,7 +47,7 @@ namespace ET
 #endif
         public static void EnableDefineSymbols(string symbols, bool enable)
         {
-            Log.Debug($"EnableDefineSymbols {symbols} {enable}");
+            Debug.Log($"EnableDefineSymbols {symbols} {enable}");
             string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
             var ss = defines.Split(';').ToList();
             if (enable)
@@ -79,13 +66,13 @@ namespace ET
                 }
                 ss.Remove(symbols);
             }
-            Log.Debug($"EnableDefineSymbols {symbols} {enable}");
+            Debug.Log($"EnableDefineSymbols {symbols} {enable}");
             defines = string.Join(";", ss);
             PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
             AssetDatabase.SaveAssets();
             AssetDatabase.Refresh();
         }
-        
+
         public static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions, BuildOptions buildOptions, bool clearFolder)
         {
             BuildTarget buildTarget = BuildTarget.StandaloneWindows;
@@ -107,7 +94,6 @@ namespace ET
                 case PlatformType.MacOS:
                     buildTarget = BuildTarget.StandaloneOSX;
                     break;
-                
                 case PlatformType.Linux:
                     buildTarget = BuildTarget.StandaloneLinux64;
                     break;
@@ -121,18 +107,17 @@ namespace ET
             }
             Directory.CreateDirectory(fold);
 
-            UnityEngine.Debug.Log("start build assetbundle");
+            Debug.Log("start build assetbundle");
             BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
-
-            UnityEngine.Debug.Log("finish build assetbundle");
+            Debug.Log("finish build assetbundle");
 
             AssetDatabase.Refresh();
             string[] levels = {
                 "Assets/Scenes/Init.unity",
             };
-            UnityEngine.Debug.Log("start build exe");
+            Debug.Log("start build exe");
             BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
-            UnityEngine.Debug.Log("finish build exe");
+            Debug.Log("finish build exe");
         }
     }
-}
+}

+ 116 - 117
Unity/Assets/Scripts/Loader/CodeLoader.cs

@@ -4,124 +4,123 @@ using System.IO;
 using System.Reflection;
 using HybridCLR;
 using UnityEngine;
-#pragma warning disable CS0162
 
 namespace ET
 {
-	public class CodeLoader: Singleton<CodeLoader>, ISingletonAwake
-	{
-		private Assembly assembly;
-
-		private Dictionary<string, TextAsset> dlls;
-		private Dictionary<string, TextAsset> aotDlls; 
-		
-		public void Awake()
-		{
-		}
-
-		public async ETTask DownloadAsync()
-		{
-			if (!Define.IsEditor)
-			{
-				this.dlls = await ResourcesComponent.Instance.LoadAllAssetsAsync<TextAsset>($"Assets/Bundles/Code/Model.dll.bytes");
-				this.aotDlls = await ResourcesComponent.Instance.LoadAllAssetsAsync<TextAsset>($"Assets/Bundles/AotDlls/mscorlib.dll.bytes");
-			}
-		}
-
-		public void Start()
-		{
-			if (!Define.EnableDll)
-			{
-				GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
-				if (globalConfig.CodeMode != CodeMode.ClientServer)
-				{
-					throw new Exception("!ENABLE_CODES mode must use ClientServer code mode!");
-				}
-				
-				Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
-				
-				foreach (Assembly ass in assemblies)
-				{
-					string name = ass.GetName().Name;
-					if (name == "Unity.Model")
-					{
-						this.assembly = ass;
-					}
-				}
-				
-				World.Instance.AddSingleton<CodeTypes, Assembly[]>(assemblies);
-			}
-			else
-			{
-				byte[] assBytes;
-				byte[] pdbBytes;
-				if (!Define.IsEditor)
-				{
-					assBytes = this.dlls["Model.dll"].bytes;
-					pdbBytes = this.dlls["Model.pdb"].bytes;
-					
-					// 这里为了方便做测试,直接加载了Unity/Temp/Bin/Debug/Model.dll,真正打包要还原使用上面注释的代码
-					//assBytes = File.ReadAllBytes(Path.Combine("../Unity", Define.BuildOutputDir, "Model.dll"));
-					//pdbBytes = File.ReadAllBytes(Path.Combine("../Unity", Define.BuildOutputDir, "Model.pdb"));
-
-					if (Define.EnableIL2CPP)
-					{
-						foreach (var kv in this.aotDlls)
-						{
-							TextAsset textAsset = kv.Value;
-							RuntimeApi.LoadMetadataForAOTAssembly(textAsset.bytes, HomologousImageMode.SuperSet);
-						}
-					}
-				}
-				else
-				{
-					assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Model.dll"));
-					pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Model.pdb"));
-				}
-			
-				this.assembly = Assembly.Load(assBytes, pdbBytes);
-
-				Assembly hotfixAssembly = this.LoadHotfix();
-				
-				World.Instance.AddSingleton<CodeTypes, Assembly[]>(new []{typeof (World).Assembly, typeof(Init).Assembly, this.assembly, hotfixAssembly});
-			}
-			
-			IStaticMethod start = new StaticMethod(this.assembly, "ET.Entry", "Start");
-			start.Run();
-		}
-
-		private Assembly LoadHotfix()
-		{
-			byte[] assBytes;
-			byte[] pdbBytes;
-			if (!Define.IsEditor)
-			{
-				assBytes = this.dlls["Hotfix.dll"].bytes;
-				pdbBytes = this.dlls["Hotfix.pdb"].bytes;
-					
-				// 这里为了方便做测试,直接加载了Unity/Temp/Bin/Debug/Hotfix.dll,真正打包要还原使用上面注释的代码
-				//assBytes = File.ReadAllBytes(Path.Combine("../Unity", Define.BuildOutputDir, "Hotfix.dll"));
-				//pdbBytes = File.ReadAllBytes(Path.Combine("../Unity", Define.BuildOutputDir, "Hotfix.pdb"));
-			}
-			else
-			{
-				assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Hotfix.dll"));
-				pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Hotfix.pdb"));
-			}
-			
-			Assembly hotfixAssembly = Assembly.Load(assBytes, pdbBytes);
-
-			return hotfixAssembly;
-		}
-
-		public void Reload()
-		{
-			Assembly hotfixAssembly = this.LoadHotfix();
-
-			CodeTypes codeTypes = World.Instance.AddSingleton<CodeTypes, Assembly[]>(new []{typeof (World).Assembly, typeof(Init).Assembly, this.assembly, hotfixAssembly});
-			codeTypes.CreateCode();
-
-			Log.Debug($"reload dll finish!");
-		}
-	}
+    public class CodeLoader : Singleton<CodeLoader>, ISingletonAwake
+    {
+        private Assembly assembly;
+
+        private Dictionary<string, TextAsset> dlls;
+        private Dictionary<string, TextAsset> aotDlls;
+
+        public void Awake()
+        {
+        }
+
+        public async ETTask DownloadAsync()
+        {
+            if (!Define.IsEditor)
+            {
+                this.dlls = await ResourcesComponent.Instance.LoadAllAssetsAsync<TextAsset>($"Assets/Bundles/Code/Model.dll.bytes");
+                this.aotDlls = await ResourcesComponent.Instance.LoadAllAssetsAsync<TextAsset>($"Assets/Bundles/AotDlls/mscorlib.dll.bytes");
+            }
+        }
+
+        public void Start()
+        {
+            if (!Define.EnableDll)
+            {
+                GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+                if (globalConfig.CodeMode != CodeMode.ClientServer)
+                {
+                    throw new Exception("!ENABLE_DLL mode must use ClientServer code mode!");
+                }
+
+                Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
+
+                foreach (Assembly ass in assemblies)
+                {
+                    string name = ass.GetName().Name;
+                    if (name == "Unity.Model")
+                    {
+                        this.assembly = ass;
+                        break;
+                    }
+                }
+
+                World.Instance.AddSingleton<CodeTypes, Assembly[]>(assemblies);
+            }
+            else
+            {
+                byte[] assBytes;
+                byte[] pdbBytes;
+                if (!Define.IsEditor)
+                {
+                    assBytes = this.dlls["Model.dll"].bytes;
+                    pdbBytes = this.dlls["Model.pdb"].bytes;
+
+                    // 如果需要测试,可替换成下面注释的代码直接加载Assets/Bundles/Code/Model.dll.bytes,但真正打包时必须使用上面的代码
+                    //assBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Model.dll.bytes"));
+                    //pdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Model.pdb.bytes"));
+
+                    if (Define.EnableIL2CPP)
+                    {
+                        foreach (var kv in this.aotDlls)
+                        {
+                            TextAsset textAsset = kv.Value;
+                            RuntimeApi.LoadMetadataForAOTAssembly(textAsset.bytes, HomologousImageMode.SuperSet);
+                        }
+                    }
+                }
+                else
+                {
+                    assBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Model.dll.bytes"));
+                    pdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Model.pdb.bytes"));
+                }
+
+                this.assembly = Assembly.Load(assBytes, pdbBytes);
+
+                Assembly hotfixAssembly = this.LoadHotfix();
+
+                World.Instance.AddSingleton<CodeTypes, Assembly[]>(new[] { typeof(World).Assembly, typeof(Init).Assembly, this.assembly, hotfixAssembly });
+            }
+
+            IStaticMethod start = new StaticMethod(this.assembly, "ET.Entry", "Start");
+            start.Run();
+        }
+
+        private Assembly LoadHotfix()
+        {
+            byte[] assBytes;
+            byte[] pdbBytes;
+            if (!Define.IsEditor)
+            {
+                assBytes = this.dlls["Hotfix.dll"].bytes;
+                pdbBytes = this.dlls["Hotfix.pdb"].bytes;
+
+                // 如果需要测试,可替换成下面注释的代码直接加载Assets/Bundles/Code/Hotfix.dll.bytes,但真正打包时必须使用上面的代码
+                //assBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Hotfix.dll.bytes"));
+                //pdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Hotfix.pdb.bytes"));
+            }
+            else
+            {
+                assBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Hotfix.dll.bytes"));
+                pdbBytes = File.ReadAllBytes(Path.Combine(Define.CodeDir, "Hotfix.pdb.bytes"));
+            }
+
+            Assembly hotfixAssembly = Assembly.Load(assBytes, pdbBytes);
+            return hotfixAssembly;
+        }
+
+        public void Reload()
+        {
+            Assembly hotfixAssembly = this.LoadHotfix();
+
+            CodeTypes codeTypes = World.Instance.AddSingleton<CodeTypes, Assembly[]>(new[] { typeof(World).Assembly, typeof(Init).Assembly, this.assembly, hotfixAssembly });
+            codeTypes.CreateCode();
+
+            Log.Debug($"reload dll finish!");
+        }
+    }
 }

+ 27 - 46
Unity/Assets/Scripts/Loader/Define.cs

@@ -1,70 +1,51 @@
 namespace ET
 {
-	public static class Define
-	{
-		public const string CodeDir = "Assets/Bundles/Code/";
-		public const string BuildOutputDir = "Temp/Bin/Debug";
+    public static class Define
+    {
+        /// <summary>
+        /// 编辑器下加载热更dll的目录
+        /// </summary>
+        public const string CodeDir = "Assets/Bundles/Code/";
+
+        /// <summary>
+        /// VS或Rider工程生成dll的所在目录, 使用HybridCLR打包时需要使用
+        /// </summary>
+        public const string BuildOutputDir = "Temp/Bin/Debug";
+
 #if DEBUG
-		public static bool IsDebug = true;
+        public static bool IsDebug = true;
 #else
-		public static bool IsDebug = false;
+        public static bool IsDebug = false;
 #endif
-		
+
 #if UNITY_EDITOR && !ASYNC
-		public static bool IsAsync = false;
+        public static bool IsAsync = false;
 #else
         public static bool IsAsync = true;
 #endif
-		
+
 #if UNITY_EDITOR
-		public static bool IsEditor = true;
+        public static bool IsEditor = true;
 #else
         public static bool IsEditor = false;
 #endif
-		
+
 #if ENABLE_DLL
-		public static bool EnableDll = true;
+        public static bool EnableDll = true;
 #else
         public static bool EnableDll = false;
 #endif
-		
+
 #if ENABLE_VIEW
-		public static bool EnableView = true;
+        public static bool EnableView = true;
 #else
-		public static bool EnableView = false;
+        public static bool EnableView = false;
 #endif
-		
+
 #if ENABLE_IL2CPP
-		public static bool EnableIL2CPP = true;
+        public static bool EnableIL2CPP = true;
 #else
-		public static bool EnableIL2CPP = false;
+        public static bool EnableIL2CPP = false;
 #endif
-		
-		public static UnityEngine.Object LoadAssetAtPath(string s)
-		{
-#if UNITY_EDITOR	
-			return UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(s);
-#else
-			return null;
-#endif
-		}
-		
-		public static string[] GetAssetPathsFromAssetBundle(string assetBundleName)
-		{
-#if UNITY_EDITOR	
-			return UnityEditor.AssetDatabase.GetAssetPathsFromAssetBundle(assetBundleName);
-#else
-			return new string[0];
-#endif
-		}
-		
-		public static string[] GetAssetBundleDependencies(string assetBundleName, bool v)
-		{
-#if UNITY_EDITOR	
-			return UnityEditor.AssetDatabase.GetAssetBundleDependencies(assetBundleName, v);
-#else
-			return new string[0];
-#endif
-		}
-	}
+    }
 }

+ 420 - 25
Unity/Assets/Scripts/Loader/Plugins/HybridCLR/Generated/AOTGenericReferences.cs

@@ -6,6 +6,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 	public static readonly IReadOnlyList<string> PatchedAOTAssemblyList = new List<string>
 	{
 		"MemoryPack.dll",
+		"MongoDB.Bson.dll",
 		"System.Core.dll",
 		"System.Runtime.CompilerServices.Unsafe.dll",
 		"System.dll",
@@ -13,6 +14,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 		"Unity.Loader.dll",
 		"Unity.ThirdParty.dll",
 		"UnityEngine.CoreModule.dll",
+		"YooAsset.dll",
 		"mscorlib.dll",
 	};
 	// }}
@@ -27,6 +29,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 	// ET.AEvent<object,ET.Client.AfterCreateCurrentScene>
 	// ET.AEvent<object,ET.Client.AfterUnitCreate>
 	// ET.AEvent<object,ET.Client.AppStartInitFinish>
+	// ET.AEvent<object,ET.Client.EnterMapFinish>
 	// ET.AEvent<object,ET.Client.LSSceneChangeStart>
 	// ET.AEvent<object,ET.Client.LSSceneInitFinish>
 	// ET.AEvent<object,ET.Client.LoginFinish>
@@ -34,12 +37,15 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 	// ET.AEvent<object,ET.Client.SceneChangeStart>
 	// ET.AEvent<object,ET.EntryEvent1>
 	// ET.AEvent<object,ET.EntryEvent3>
+	// ET.AEvent<object,ET.MoveStart>
+	// ET.AEvent<object,ET.MoveStop>
 	// ET.AEvent<object,ET.NumbericChange>
 	// ET.AInvokeHandler<ET.FiberInit,object>
 	// ET.AInvokeHandler<ET.MailBoxInvoker>
-	// ET.AInvokeHandler<ET.NetOuterComponentOnRead>
+	// ET.AInvokeHandler<ET.NetComponentOnRead>
+	// ET.AInvokeHandler<ET.TimerCallback>
 	// ET.ATimer<object>
-	// ET.AwakeSystem<object,System.Net.Sockets.AddressFamily>
+	// ET.AwakeSystem<object,int,int>
 	// ET.AwakeSystem<object,int>
 	// ET.AwakeSystem<object,object,int>
 	// ET.AwakeSystem<object,object,object>
@@ -68,15 +74,33 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 	// ET.ETTask<object>
 	// ET.ETTask<uint>
 	// ET.EntityRef<object>
-	// ET.IAwake<System.Net.Sockets.AddressFamily>
+	// ET.IAwake<int,int>
 	// ET.IAwake<int>
 	// ET.IAwake<object,int>
+	// ET.IAwake<object,object,object>
 	// ET.IAwake<object,object>
 	// ET.IAwake<object>
+	// ET.IAwakeSystem<int,int>
+	// ET.IAwakeSystem<int>
+	// ET.IAwakeSystem<object,int>
+	// ET.IAwakeSystem<object,object,object>
+	// ET.IAwakeSystem<object,object>
+	// ET.IAwakeSystem<object>
 	// ET.LateUpdateSystem<object>
 	// ET.ListComponent<Unity.Mathematics.float3>
-	// ET.ListComponent<object>
 	// ET.Singleton<object>
+	// ET.StateMachineWrap<object>
+	// ET.StructBsonSerialize<ET.LSInput>
+	// ET.StructBsonSerialize<TrueSync.FP>
+	// ET.StructBsonSerialize<TrueSync.TSQuaternion>
+	// ET.StructBsonSerialize<TrueSync.TSVector2>
+	// ET.StructBsonSerialize<TrueSync.TSVector4>
+	// ET.StructBsonSerialize<TrueSync.TSVector>
+	// ET.StructBsonSerialize<Unity.Mathematics.float2>
+	// ET.StructBsonSerialize<Unity.Mathematics.float3>
+	// ET.StructBsonSerialize<Unity.Mathematics.float4>
+	// ET.StructBsonSerialize<Unity.Mathematics.quaternion>
+	// ET.StructBsonSerialize<object>
 	// ET.UnOrderMultiMap<object,object>
 	// ET.UpdateSystem<object>
 	// MemoryPack.Formatters.ArrayFormatter<ET.LSInput>
@@ -87,75 +111,390 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 	// MemoryPack.Formatters.ListFormatter<Unity.Mathematics.float3>
 	// MemoryPack.Formatters.ListFormatter<long>
 	// MemoryPack.Formatters.ListFormatter<object>
+	// MemoryPack.IMemoryPackFormatter<Unity.Mathematics.float3>
+	// MemoryPack.IMemoryPackFormatter<long>
+	// MemoryPack.IMemoryPackFormatter<object>
 	// MemoryPack.IMemoryPackable<ET.LSInput>
 	// MemoryPack.IMemoryPackable<object>
 	// MemoryPack.MemoryPackFormatter<ET.LSInput>
+	// MemoryPack.MemoryPackFormatter<System.UIntPtr>
 	// MemoryPack.MemoryPackFormatter<object>
-	// System.Action<long,ET.ActorId,object>
+	// MongoDB.Bson.Serialization.IBsonSerializer<object>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<ET.LSInput>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<TrueSync.FP>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<TrueSync.TSQuaternion>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<TrueSync.TSVector2>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<TrueSync.TSVector4>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<TrueSync.TSVector>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<Unity.Mathematics.float2>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<Unity.Mathematics.float3>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<Unity.Mathematics.float4>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<Unity.Mathematics.quaternion>
+	// MongoDB.Bson.Serialization.Serializers.SerializerBase<object>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<ET.LSInput>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<TrueSync.FP>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<TrueSync.TSQuaternion>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<TrueSync.TSVector2>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<TrueSync.TSVector4>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<TrueSync.TSVector>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<Unity.Mathematics.float2>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<Unity.Mathematics.float3>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<Unity.Mathematics.float4>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<Unity.Mathematics.quaternion>
+	// MongoDB.Bson.Serialization.Serializers.StructSerializerBase<object>
+	// System.Action<DotRecast.Detour.StraightPathItem>
+	// System.Action<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Action<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Action<Unity.Mathematics.float3>
+	// System.Action<byte>
 	// System.Action<long,int>
 	// System.Action<long,object>
+	// System.Action<long>
+	// System.Action<object,long>
+	// System.Action<object,object>
+	// System.Action<object>
+	// System.ArraySegment.Enumerator<byte>
+	// System.ArraySegment<byte>
+	// System.ByReference<byte>
+	// System.Collections.Concurrent.ConcurrentDictionary.<GetEnumerator>d__35<object,object>
+	// System.Collections.Concurrent.ConcurrentDictionary.DictionaryEnumerator<object,object>
+	// System.Collections.Concurrent.ConcurrentDictionary.Node<object,object>
+	// System.Collections.Concurrent.ConcurrentDictionary.Tables<object,object>
+	// System.Collections.Concurrent.ConcurrentDictionary<object,object>
+	// System.Collections.Concurrent.ConcurrentQueue.<Enumerate>d__28<object>
+	// System.Collections.Concurrent.ConcurrentQueue.Segment<object>
+	// System.Collections.Concurrent.ConcurrentQueue<object>
+	// System.Collections.Generic.ArraySortHelper<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.ArraySortHelper<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.ArraySortHelper<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.ArraySortHelper<Unity.Mathematics.float3>
+	// System.Collections.Generic.ArraySortHelper<long>
+	// System.Collections.Generic.ArraySortHelper<object>
+	// System.Collections.Generic.Comparer<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.Comparer<ET.ActorId>
+	// System.Collections.Generic.Comparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.Comparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.Comparer<Unity.Mathematics.float3>
+	// System.Collections.Generic.Comparer<int>
+	// System.Collections.Generic.Comparer<long>
+	// System.Collections.Generic.Comparer<object>
+	// System.Collections.Generic.Comparer<uint>
+	// System.Collections.Generic.Comparer<ushort>
+	// System.Collections.Generic.ComparisonComparer<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.ComparisonComparer<ET.ActorId>
+	// System.Collections.Generic.ComparisonComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.ComparisonComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.ComparisonComparer<Unity.Mathematics.float3>
+	// System.Collections.Generic.ComparisonComparer<int>
+	// System.Collections.Generic.ComparisonComparer<long>
+	// System.Collections.Generic.ComparisonComparer<object>
+	// System.Collections.Generic.ComparisonComparer<uint>
+	// System.Collections.Generic.ComparisonComparer<ushort>
+	// System.Collections.Generic.Dictionary.Enumerator<int,ET.RpcInfo>
 	// System.Collections.Generic.Dictionary.Enumerator<int,long>
 	// System.Collections.Generic.Dictionary.Enumerator<int,object>
+	// System.Collections.Generic.Dictionary.Enumerator<long,ET.EntityRef<object>>
 	// System.Collections.Generic.Dictionary.Enumerator<long,ET.LSInput>
+	// System.Collections.Generic.Dictionary.Enumerator<long,object>
+	// System.Collections.Generic.Dictionary.Enumerator<object,long>
 	// System.Collections.Generic.Dictionary.Enumerator<object,object>
+	// System.Collections.Generic.Dictionary.Enumerator<ushort,object>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<int,ET.RpcInfo>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<int,long>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<int,object>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<long,ET.EntityRef<object>>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<long,ET.LSInput>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<long,object>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<object,long>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<object,object>
+	// System.Collections.Generic.Dictionary.KeyCollection.Enumerator<ushort,object>
+	// System.Collections.Generic.Dictionary.KeyCollection<int,ET.RpcInfo>
+	// System.Collections.Generic.Dictionary.KeyCollection<int,long>
+	// System.Collections.Generic.Dictionary.KeyCollection<int,object>
+	// System.Collections.Generic.Dictionary.KeyCollection<long,ET.EntityRef<object>>
+	// System.Collections.Generic.Dictionary.KeyCollection<long,ET.LSInput>
+	// System.Collections.Generic.Dictionary.KeyCollection<long,object>
+	// System.Collections.Generic.Dictionary.KeyCollection<object,long>
+	// System.Collections.Generic.Dictionary.KeyCollection<object,object>
+	// System.Collections.Generic.Dictionary.KeyCollection<ushort,object>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<int,ET.RpcInfo>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<int,long>
 	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<int,object>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<long,ET.EntityRef<object>>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<long,ET.LSInput>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<long,object>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<object,long>
 	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<object,object>
+	// System.Collections.Generic.Dictionary.ValueCollection.Enumerator<ushort,object>
+	// System.Collections.Generic.Dictionary.ValueCollection<int,ET.RpcInfo>
+	// System.Collections.Generic.Dictionary.ValueCollection<int,long>
 	// System.Collections.Generic.Dictionary.ValueCollection<int,object>
+	// System.Collections.Generic.Dictionary.ValueCollection<long,ET.EntityRef<object>>
+	// System.Collections.Generic.Dictionary.ValueCollection<long,ET.LSInput>
+	// System.Collections.Generic.Dictionary.ValueCollection<long,object>
+	// System.Collections.Generic.Dictionary.ValueCollection<object,long>
 	// System.Collections.Generic.Dictionary.ValueCollection<object,object>
+	// System.Collections.Generic.Dictionary.ValueCollection<ushort,object>
 	// System.Collections.Generic.Dictionary<int,ET.RpcInfo>
 	// System.Collections.Generic.Dictionary<int,long>
 	// System.Collections.Generic.Dictionary<int,object>
 	// System.Collections.Generic.Dictionary<long,ET.EntityRef<object>>
 	// System.Collections.Generic.Dictionary<long,ET.LSInput>
-	// System.Collections.Generic.Dictionary<object,int>
+	// System.Collections.Generic.Dictionary<long,object>
+	// System.Collections.Generic.Dictionary<object,long>
 	// System.Collections.Generic.Dictionary<object,object>
 	// System.Collections.Generic.Dictionary<ushort,object>
+	// System.Collections.Generic.EqualityComparer<ET.ActorId>
+	// System.Collections.Generic.EqualityComparer<ET.EntityRef<object>>
+	// System.Collections.Generic.EqualityComparer<ET.LSInput>
+	// System.Collections.Generic.EqualityComparer<ET.RpcInfo>
+	// System.Collections.Generic.EqualityComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.EqualityComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.EqualityComparer<int>
+	// System.Collections.Generic.EqualityComparer<long>
+	// System.Collections.Generic.EqualityComparer<object>
+	// System.Collections.Generic.EqualityComparer<uint>
+	// System.Collections.Generic.EqualityComparer<ushort>
 	// System.Collections.Generic.HashSet.Enumerator<object>
+	// System.Collections.Generic.HashSet.Enumerator<ushort>
 	// System.Collections.Generic.HashSet<object>
 	// System.Collections.Generic.HashSet<ushort>
+	// System.Collections.Generic.HashSetEqualityComparer<object>
+	// System.Collections.Generic.HashSetEqualityComparer<ushort>
+	// System.Collections.Generic.ICollection<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.ICollection<ET.RpcInfo>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<int,ET.RpcInfo>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<int,long>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<long,ET.EntityRef<object>>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<long,ET.LSInput>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<object,long>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<object,object>>
+	// System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<ushort,object>>
+	// System.Collections.Generic.ICollection<Unity.Mathematics.float3>
+	// System.Collections.Generic.ICollection<long>
+	// System.Collections.Generic.ICollection<object>
+	// System.Collections.Generic.ICollection<ushort>
+	// System.Collections.Generic.IComparer<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.IComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.IComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.IComparer<Unity.Mathematics.float3>
+	// System.Collections.Generic.IComparer<int>
+	// System.Collections.Generic.IComparer<long>
+	// System.Collections.Generic.IComparer<object>
+	// System.Collections.Generic.IDictionary<object,object>
+	// System.Collections.Generic.IEnumerable<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.IEnumerable<ET.RpcInfo>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<int,ET.RpcInfo>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<int,long>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<long,ET.EntityRef<object>>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<long,ET.LSInput>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<object,long>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<object,object>>
+	// System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<ushort,object>>
+	// System.Collections.Generic.IEnumerable<Unity.Mathematics.float3>
+	// System.Collections.Generic.IEnumerable<long>
+	// System.Collections.Generic.IEnumerable<object>
+	// System.Collections.Generic.IEnumerable<ushort>
+	// System.Collections.Generic.IEnumerator<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.IEnumerator<ET.RpcInfo>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<int,ET.RpcInfo>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<int,long>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<long,ET.EntityRef<object>>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<long,ET.LSInput>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<object,long>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<object,object>>
+	// System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<ushort,object>>
+	// System.Collections.Generic.IEnumerator<Unity.Mathematics.float3>
+	// System.Collections.Generic.IEnumerator<long>
+	// System.Collections.Generic.IEnumerator<object>
+	// System.Collections.Generic.IEnumerator<ushort>
+	// System.Collections.Generic.IEqualityComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.IEqualityComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.IEqualityComparer<int>
+	// System.Collections.Generic.IEqualityComparer<long>
+	// System.Collections.Generic.IEqualityComparer<object>
+	// System.Collections.Generic.IEqualityComparer<ushort>
+	// System.Collections.Generic.IList<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.IList<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.IList<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.IList<Unity.Mathematics.float3>
+	// System.Collections.Generic.IList<long>
+	// System.Collections.Generic.IList<object>
+	// System.Collections.Generic.KeyValuePair<int,ET.RpcInfo>
 	// System.Collections.Generic.KeyValuePair<int,long>
 	// System.Collections.Generic.KeyValuePair<int,object>
+	// System.Collections.Generic.KeyValuePair<long,ET.EntityRef<object>>
 	// System.Collections.Generic.KeyValuePair<long,ET.LSInput>
 	// System.Collections.Generic.KeyValuePair<long,object>
-	// System.Collections.Generic.KeyValuePair<object,int>
+	// System.Collections.Generic.KeyValuePair<object,long>
 	// System.Collections.Generic.KeyValuePair<object,object>
+	// System.Collections.Generic.KeyValuePair<ushort,object>
+	// System.Collections.Generic.List.Enumerator<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.List.Enumerator<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.List.Enumerator<System.Collections.Generic.KeyValuePair<long,object>>
 	// System.Collections.Generic.List.Enumerator<Unity.Mathematics.float3>
 	// System.Collections.Generic.List.Enumerator<long>
 	// System.Collections.Generic.List.Enumerator<object>
+	// System.Collections.Generic.List<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<long,object>>
 	// System.Collections.Generic.List<Unity.Mathematics.float3>
 	// System.Collections.Generic.List<long>
 	// System.Collections.Generic.List<object>
+	// System.Collections.Generic.ObjectComparer<DotRecast.Detour.StraightPathItem>
+	// System.Collections.Generic.ObjectComparer<ET.ActorId>
+	// System.Collections.Generic.ObjectComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.ObjectComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.ObjectComparer<Unity.Mathematics.float3>
+	// System.Collections.Generic.ObjectComparer<int>
+	// System.Collections.Generic.ObjectComparer<long>
+	// System.Collections.Generic.ObjectComparer<object>
+	// System.Collections.Generic.ObjectComparer<uint>
+	// System.Collections.Generic.ObjectComparer<ushort>
+	// System.Collections.Generic.ObjectEqualityComparer<ET.ActorId>
+	// System.Collections.Generic.ObjectEqualityComparer<ET.EntityRef<object>>
+	// System.Collections.Generic.ObjectEqualityComparer<ET.LSInput>
+	// System.Collections.Generic.ObjectEqualityComparer<ET.RpcInfo>
+	// System.Collections.Generic.ObjectEqualityComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.ObjectEqualityComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.ObjectEqualityComparer<int>
+	// System.Collections.Generic.ObjectEqualityComparer<long>
+	// System.Collections.Generic.ObjectEqualityComparer<object>
+	// System.Collections.Generic.ObjectEqualityComparer<uint>
+	// System.Collections.Generic.ObjectEqualityComparer<ushort>
+	// System.Collections.Generic.Queue.Enumerator<object>
+	// System.Collections.Generic.Queue<object>
+	// System.Collections.Generic.SortedDictionary.<>c__DisplayClass34_0<int,object>
+	// System.Collections.Generic.SortedDictionary.<>c__DisplayClass34_0<long,object>
+	// System.Collections.Generic.SortedDictionary.<>c__DisplayClass34_1<int,object>
+	// System.Collections.Generic.SortedDictionary.<>c__DisplayClass34_1<long,object>
+	// System.Collections.Generic.SortedDictionary.Enumerator<int,object>
 	// System.Collections.Generic.SortedDictionary.Enumerator<long,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection.<>c__DisplayClass5_0<int,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection.<>c__DisplayClass5_0<long,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection.<>c__DisplayClass6_0<int,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection.<>c__DisplayClass6_0<long,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection.Enumerator<int,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection.Enumerator<long,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection<int,object>
+	// System.Collections.Generic.SortedDictionary.KeyCollection<long,object>
+	// System.Collections.Generic.SortedDictionary.KeyValuePairComparer<int,object>
+	// System.Collections.Generic.SortedDictionary.KeyValuePairComparer<long,object>
+	// System.Collections.Generic.SortedDictionary.ValueCollection.<>c__DisplayClass5_0<int,object>
+	// System.Collections.Generic.SortedDictionary.ValueCollection.<>c__DisplayClass5_0<long,object>
+	// System.Collections.Generic.SortedDictionary.ValueCollection.<>c__DisplayClass6_0<int,object>
+	// System.Collections.Generic.SortedDictionary.ValueCollection.<>c__DisplayClass6_0<long,object>
 	// System.Collections.Generic.SortedDictionary.ValueCollection.Enumerator<int,object>
+	// System.Collections.Generic.SortedDictionary.ValueCollection.Enumerator<long,object>
 	// System.Collections.Generic.SortedDictionary.ValueCollection<int,object>
+	// System.Collections.Generic.SortedDictionary.ValueCollection<long,object>
 	// System.Collections.Generic.SortedDictionary<int,object>
 	// System.Collections.Generic.SortedDictionary<long,object>
-	// System.Func<System.Collections.Generic.KeyValuePair<object,int>,int>
-	// System.Func<System.Collections.Generic.KeyValuePair<object,int>,object>
+	// System.Collections.Generic.SortedSet.<>c__DisplayClass52_0<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.<>c__DisplayClass52_0<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.<>c__DisplayClass53_0<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.<>c__DisplayClass53_0<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.<>c__DisplayClass85_0<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.<>c__DisplayClass85_0<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.<Reverse>d__94<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.<Reverse>d__94<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.Enumerator<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.Enumerator<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.Node<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.Node<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.TreeSubSet.<>c__DisplayClass9_0<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.TreeSubSet.<>c__DisplayClass9_0<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet.TreeSubSet<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet.TreeSubSet<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSet<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSet<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.SortedSetEqualityComparer<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.SortedSetEqualityComparer<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.Stack.Enumerator<object>
+	// System.Collections.Generic.Stack<object>
+	// System.Collections.Generic.TreeSet<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.TreeSet<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.Generic.TreeWalkPredicate<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.Generic.TreeWalkPredicate<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.ObjectModel.ReadOnlyCollection<DotRecast.Detour.StraightPathItem>
+	// System.Collections.ObjectModel.ReadOnlyCollection<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Collections.ObjectModel.ReadOnlyCollection<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Collections.ObjectModel.ReadOnlyCollection<Unity.Mathematics.float3>
+	// System.Collections.ObjectModel.ReadOnlyCollection<long>
+	// System.Collections.ObjectModel.ReadOnlyCollection<object>
+	// System.Comparison<DotRecast.Detour.StraightPathItem>
+	// System.Comparison<ET.ActorId>
+	// System.Comparison<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Comparison<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Comparison<Unity.Mathematics.float3>
+	// System.Comparison<int>
+	// System.Comparison<long>
+	// System.Comparison<object>
+	// System.Comparison<uint>
+	// System.Comparison<ushort>
+	// System.Func<object,byte>
+	// System.Func<object,object,object>
+	// System.Func<object,object>
 	// System.Func<object>
+	// System.Linq.Buffer<ET.RpcInfo>
+	// System.Linq.Buffer<object>
+	// System.Predicate<DotRecast.Detour.StraightPathItem>
+	// System.Predicate<System.Collections.Generic.KeyValuePair<int,object>>
+	// System.Predicate<System.Collections.Generic.KeyValuePair<long,object>>
+	// System.Predicate<Unity.Mathematics.float3>
+	// System.Predicate<long>
+	// System.Predicate<object>
+	// System.Predicate<ushort>
+	// System.ReadOnlySpan.Enumerator<byte>
+	// System.ReadOnlySpan<byte>
+	// System.Runtime.CompilerServices.ConditionalWeakTable.<>c<object,object>
+	// System.Runtime.CompilerServices.ConditionalWeakTable.CreateValueCallback<object,object>
+	// System.Runtime.CompilerServices.ConditionalWeakTable.Enumerator<object,object>
+	// System.Runtime.CompilerServices.ConditionalWeakTable<object,object>
+	// System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter<object>
+	// System.Runtime.CompilerServices.ConfiguredTaskAwaitable<object>
 	// System.Runtime.CompilerServices.TaskAwaiter<object>
+	// System.Span.Enumerator<byte>
+	// System.Span<byte>
+	// System.Threading.Tasks.ContinuationTaskFromResultTask<object>
 	// System.Threading.Tasks.Task<object>
+	// System.Threading.Tasks.TaskFactory.<>c<object>
+	// System.Threading.Tasks.TaskFactory.<>c__DisplayClass32_0<object>
+	// System.Threading.Tasks.TaskFactory.<>c__DisplayClass35_0<object>
+	// System.Threading.Tasks.TaskFactory<object>
+	// System.ValueTuple<ET.ActorId,object>
 	// System.ValueTuple<uint,object>
 	// System.ValueTuple<uint,uint>
+	// System.ValueTuple<ushort,object>
 	// }}
 
 	public void RefMethods()
 	{
 		// System.Void ET.ETAsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<ET.ETTaskCompleted,object>(ET.ETTaskCompleted&,object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,object>(System.Runtime.CompilerServices.TaskAwaiter&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter<object>,object>(System.Runtime.CompilerServices.TaskAwaiter<object>&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<object,object>(object&,object&)
-		// System.Void ET.ETAsyncTaskMethodBuilder<ET.Client.WaitType.Wait_Room2C_Start>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
-		// System.Void ET.ETAsyncTaskMethodBuilder<ET.Client.Wait_CreateMyUnit>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
-		// System.Void ET.ETAsyncTaskMethodBuilder<ET.Client.Wait_SceneChangeFinish>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
-		// System.Void ET.ETAsyncTaskMethodBuilder<ET.Client.Wait_UnitStop>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<System.ValueTuple<uint,object>>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<byte>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<int>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<long>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<object>.AwaitUnsafeOnCompleted<ET.ETTaskCompleted,object>(ET.ETTaskCompleted&,object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder<object>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,object>(System.Runtime.CompilerServices.TaskAwaiter&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<object>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter<object>,object>(System.Runtime.CompilerServices.TaskAwaiter<object>&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<object>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<uint>.AwaitUnsafeOnCompleted<object,object>(object&,object&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.Start<ET.EventSystem.<PublishAsync>d__4<object,ET.Client.AppStartInitFinish>>(ET.EventSystem.<PublishAsync>d__4<object,ET.Client.AppStartInitFinish>&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.Start<ET.EventSystem.<PublishAsync>d__4<object,ET.Client.LSSceneChangeStart>>(ET.EventSystem.<PublishAsync>d__4<object,ET.Client.LSSceneChangeStart>&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.Start<ET.EventSystem.<PublishAsync>d__4<object,ET.Client.LoginFinish>>(ET.EventSystem.<PublishAsync>d__4<object,ET.Client.LoginFinish>&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.Start<ET.EventSystem.<PublishAsync>d__4<object,ET.EntryEvent1>>(ET.EventSystem.<PublishAsync>d__4<object,ET.EntryEvent1>&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.Start<ET.EventSystem.<PublishAsync>d__4<object,ET.EntryEvent2>>(ET.EventSystem.<PublishAsync>d__4<object,ET.EntryEvent2>&)
+		// System.Void ET.ETAsyncTaskMethodBuilder.Start<ET.EventSystem.<PublishAsync>d__4<object,ET.EntryEvent3>>(ET.EventSystem.<PublishAsync>d__4<object,ET.EntryEvent3>&)
 		// System.Void ET.ETAsyncTaskMethodBuilder.Start<object>(object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<ET.Client.WaitType.Wait_Room2C_Start>.Start<object>(object&)
 		// System.Void ET.ETAsyncTaskMethodBuilder<ET.Client.Wait_CreateMyUnit>.Start<object>(object&)
@@ -169,19 +508,33 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 		// System.Void ET.ETAsyncTaskMethodBuilder<uint>.Start<object>(object&)
 		// object ET.Entity.AddChild<object,object,object>(object,object,bool)
 		// object ET.Entity.AddChildWithId<object,int>(long,int,bool)
+		// object ET.Entity.AddChildWithId<object,object,object,object>(long,object,object,object,bool)
+		// object ET.Entity.AddChildWithId<object,object,object>(long,object,object,bool)
 		// object ET.Entity.AddChildWithId<object,object>(long,object,bool)
 		// object ET.Entity.AddChildWithId<object>(long,bool)
-		// object ET.Entity.AddComponent<object,ET.MailBoxType>(ET.MailBoxType,bool)
-		// object ET.Entity.AddComponent<object,System.Net.Sockets.AddressFamily>(System.Net.Sockets.AddressFamily,bool)
+		// object ET.Entity.AddComponent<object,int,int>(int,int,bool)
+		// object ET.Entity.AddComponent<object,int>(int,bool)
 		// object ET.Entity.AddComponent<object,object,int>(object,int,bool)
 		// object ET.Entity.AddComponent<object>(bool)
+		// object ET.Entity.AddComponentWithId<object,int,int>(long,int,int,bool)
+		// object ET.Entity.AddComponentWithId<object,int>(long,int,bool)
+		// object ET.Entity.AddComponentWithId<object,object,int>(long,object,int,bool)
+		// object ET.Entity.AddComponentWithId<object,object,object,object>(long,object,object,object,bool)
+		// object ET.Entity.AddComponentWithId<object,object,object>(long,object,object,bool)
+		// object ET.Entity.AddComponentWithId<object,object>(long,object,bool)
 		// object ET.Entity.AddComponentWithId<object>(long,bool)
 		// object ET.Entity.GetChild<object>(long)
 		// object ET.Entity.GetComponent<object>()
 		// object ET.Entity.GetParent<object>()
 		// System.Void ET.Entity.RemoveComponent<object>()
-		// ET.SceneType ET.EnumHelper.FromString<ET.SceneType>(string)
-		// System.Void ET.EventSystem.Invoke<ET.NetOuterComponentOnRead>(long,ET.NetOuterComponentOnRead)
+		// System.Void ET.EntitySystemSingleton.Awake<int,int>(ET.Entity,int,int)
+		// System.Void ET.EntitySystemSingleton.Awake<int>(ET.Entity,int)
+		// System.Void ET.EntitySystemSingleton.Awake<object,int>(ET.Entity,object,int)
+		// System.Void ET.EntitySystemSingleton.Awake<object,object,object>(ET.Entity,object,object,object)
+		// System.Void ET.EntitySystemSingleton.Awake<object,object>(ET.Entity,object,object)
+		// System.Void ET.EntitySystemSingleton.Awake<object>(ET.Entity,object)
+		// long ET.EnumHelper.FromString<long>(string)
+		// System.Void ET.EventSystem.Invoke<ET.NetComponentOnRead>(long,ET.NetComponentOnRead)
 		// System.Void ET.EventSystem.Publish<object,ET.ChangePosition>(object,ET.ChangePosition)
 		// System.Void ET.EventSystem.Publish<object,ET.ChangeRotation>(object,ET.ChangeRotation)
 		// System.Void ET.EventSystem.Publish<object,ET.Client.AfterCreateCurrentScene>(object,ET.Client.AfterCreateCurrentScene)
@@ -200,19 +553,23 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 		// ET.ETTask ET.EventSystem.PublishAsync<object,ET.EntryEvent2>(object,ET.EntryEvent2)
 		// ET.ETTask ET.EventSystem.PublishAsync<object,ET.EntryEvent3>(object,ET.EntryEvent3)
 		// object ET.MongoHelper.FromJson<object>(string)
-		// System.Void ET.MongoHelper.RegisterStruct<ET.LSInput>()
 		// System.Void ET.ObjectHelper.Swap<object>(object&,object&)
 		// object ET.ObjectPool.Fetch<object>()
 		// System.Void ET.RandomGenerator.BreakRank<object>(System.Collections.Generic.List<object>)
-		// string ET.StringHelper.ArrayToString<float>(float[])
 		// object ET.World.AddSingleton<object>()
 		// System.Collections.Generic.List<object> MemoryPack.Formatters.ListFormatter.DeserializePackable<object>(MemoryPack.MemoryPackReader&)
 		// System.Void MemoryPack.Formatters.ListFormatter.DeserializePackable<object>(MemoryPack.MemoryPackReader&,System.Collections.Generic.List<object>&)
 		// System.Void MemoryPack.Formatters.ListFormatter.SerializePackable<object>(MemoryPack.MemoryPackWriter&,System.Collections.Generic.List<object>&)
+		// byte[] MemoryPack.Internal.MemoryMarshalEx.AllocateUninitializedArray<byte>(int,bool)
+		// byte& MemoryPack.Internal.MemoryMarshalEx.GetArrayDataReference<byte>(byte[])
+		// MemoryPack.MemoryPackFormatter<object> MemoryPack.MemoryPackFormatterProvider.GetFormatter<object>()
 		// bool MemoryPack.MemoryPackFormatterProvider.IsRegistered<ET.LSInput>()
 		// bool MemoryPack.MemoryPackFormatterProvider.IsRegistered<object>()
 		// System.Void MemoryPack.MemoryPackFormatterProvider.Register<ET.LSInput>(MemoryPack.MemoryPackFormatter<ET.LSInput>)
 		// System.Void MemoryPack.MemoryPackFormatterProvider.Register<object>(MemoryPack.MemoryPackFormatter<object>)
+		// System.Void MemoryPack.MemoryPackReader.DangerousReadUnmanagedArray<byte>(byte[]&)
+		// byte[] MemoryPack.MemoryPackReader.DangerousReadUnmanagedArray<byte>()
+		// MemoryPack.IMemoryPackFormatter<object> MemoryPack.MemoryPackReader.GetFormatter<object>()
 		// System.Void MemoryPack.MemoryPackReader.ReadPackable<object>(object&)
 		// object MemoryPack.MemoryPackReader.ReadPackable<object>()
 		// System.Void MemoryPack.MemoryPackReader.ReadUnmanaged<ET.ActorId>(ET.ActorId&)
@@ -244,6 +601,8 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 		// byte[] MemoryPack.MemoryPackReader.ReadUnmanagedArray<byte>()
 		// System.Void MemoryPack.MemoryPackReader.ReadValue<object>(object&)
 		// object MemoryPack.MemoryPackReader.ReadValue<object>()
+		// System.Void MemoryPack.MemoryPackWriter.DangerousWriteUnmanagedArray<byte>(byte[])
+		// MemoryPack.IMemoryPackFormatter<object> MemoryPack.MemoryPackWriter.GetFormatter<object>()
 		// System.Void MemoryPack.MemoryPackWriter.WritePackable<object>(object&)
 		// System.Void MemoryPack.MemoryPackWriter.WriteUnmanaged<ET.LSInput>(ET.LSInput&)
 		// System.Void MemoryPack.MemoryPackWriter.WriteUnmanaged<Unity.Mathematics.quaternion,int>(Unity.Mathematics.quaternion&,int&)
@@ -266,22 +625,58 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
 		// System.Void MemoryPack.MemoryPackWriter.WriteUnmanagedWithObjectHeader<byte,uint>(byte,byte&,uint&)
 		// System.Void MemoryPack.MemoryPackWriter.WriteUnmanagedWithObjectHeader<byte>(byte,byte&)
 		// System.Void MemoryPack.MemoryPackWriter.WriteValue<object>(object&)
+		// object MongoDB.Bson.Serialization.BsonSerializer.Deserialize<object>(MongoDB.Bson.IO.IBsonReader,System.Action<MongoDB.Bson.Serialization.BsonDeserializationContext.Builder>)
+		// object MongoDB.Bson.Serialization.BsonSerializer.Deserialize<object>(string,System.Action<MongoDB.Bson.Serialization.BsonDeserializationContext.Builder>)
+		// MongoDB.Bson.Serialization.IBsonSerializer<object> MongoDB.Bson.Serialization.BsonSerializer.LookupSerializer<object>()
+		// object MongoDB.Bson.Serialization.IBsonSerializerExtensions.Deserialize<object>(MongoDB.Bson.Serialization.IBsonSerializer<object>,MongoDB.Bson.Serialization.BsonDeserializationContext)
 		// object ReferenceCollector.Get<object>(string)
-		// ET.Client.WaitType.Wait_Room2C_Start System.Activator.CreateInstance<ET.Client.WaitType.Wait_Room2C_Start>()
-		// ET.Client.Wait_CreateMyUnit System.Activator.CreateInstance<ET.Client.Wait_CreateMyUnit>()
-		// ET.Client.Wait_SceneChangeFinish System.Activator.CreateInstance<ET.Client.Wait_SceneChangeFinish>()
-		// ET.Client.Wait_UnitStop System.Activator.CreateInstance<ET.Client.Wait_UnitStop>()
+		// object System.Activator.CreateInstance<object>()
+		// byte[] System.Array.Empty<byte>()
 		// object[] System.Array.Empty<object>()
 		// int System.HashCode.Combine<TrueSync.TSVector2,int>(TrueSync.TSVector2,int)
 		// int System.HashCode.Combine<object>(object)
-		// System.Linq.IOrderedEnumerable<System.Collections.Generic.KeyValuePair<object,int>> System.Linq.Enumerable.OrderBy<System.Collections.Generic.KeyValuePair<object,int>,int>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<object,int>>,System.Func<System.Collections.Generic.KeyValuePair<object,int>,int>)
-		// System.Collections.Generic.IEnumerable<object> System.Linq.Enumerable.Select<System.Collections.Generic.KeyValuePair<object,int>,object>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<object,int>>,System.Func<System.Collections.Generic.KeyValuePair<object,int>,object>)
 		// ET.RpcInfo[] System.Linq.Enumerable.ToArray<ET.RpcInfo>(System.Collections.Generic.IEnumerable<ET.RpcInfo>)
 		// object[] System.Linq.Enumerable.ToArray<object>(System.Collections.Generic.IEnumerable<object>)
+		// System.Span<byte> System.MemoryExtensions.AsSpan<byte>(byte[])
+		// byte& System.Runtime.CompilerServices.Unsafe.Add<byte>(byte&,int)
+		// byte& System.Runtime.CompilerServices.Unsafe.As<byte,byte>(byte&)
 		// object& System.Runtime.CompilerServices.Unsafe.AsRef<object>(object&)
+		// ET.ActorId System.Runtime.CompilerServices.Unsafe.ReadUnaligned<ET.ActorId>(byte&)
+		// ET.LSInput System.Runtime.CompilerServices.Unsafe.ReadUnaligned<ET.LSInput>(byte&)
+		// TrueSync.TSQuaternion System.Runtime.CompilerServices.Unsafe.ReadUnaligned<TrueSync.TSQuaternion>(byte&)
+		// TrueSync.TSVector System.Runtime.CompilerServices.Unsafe.ReadUnaligned<TrueSync.TSVector>(byte&)
+		// Unity.Mathematics.float3 System.Runtime.CompilerServices.Unsafe.ReadUnaligned<Unity.Mathematics.float3>(byte&)
+		// Unity.Mathematics.quaternion System.Runtime.CompilerServices.Unsafe.ReadUnaligned<Unity.Mathematics.quaternion>(byte&)
+		// byte System.Runtime.CompilerServices.Unsafe.ReadUnaligned<byte>(byte&)
+		// int System.Runtime.CompilerServices.Unsafe.ReadUnaligned<int>(byte&)
+		// long System.Runtime.CompilerServices.Unsafe.ReadUnaligned<long>(byte&)
+		// uint System.Runtime.CompilerServices.Unsafe.ReadUnaligned<uint>(byte&)
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<ET.ActorId>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<ET.LSInput>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<TrueSync.TSQuaternion>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<TrueSync.TSVector>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<Unity.Mathematics.float3>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<Unity.Mathematics.quaternion>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<byte>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<int>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<long>()
+		// int System.Runtime.CompilerServices.Unsafe.SizeOf<uint>()
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<ET.ActorId>(byte&,ET.ActorId)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<ET.LSInput>(byte&,ET.LSInput)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<TrueSync.TSQuaternion>(byte&,TrueSync.TSQuaternion)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<TrueSync.TSVector>(byte&,TrueSync.TSVector)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<Unity.Mathematics.float3>(byte&,Unity.Mathematics.float3)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<Unity.Mathematics.quaternion>(byte&,Unity.Mathematics.quaternion)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<byte>(byte&,byte)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<int>(byte&,int)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<long>(byte&,long)
+		// System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned<uint>(byte&,uint)
+		// byte& System.Runtime.InteropServices.MemoryMarshal.GetReference<byte>(System.Span<byte>)
 		// System.Threading.Tasks.Task<object> System.Threading.Tasks.TaskFactory.StartNew<object>(System.Func<object>,System.Threading.CancellationToken)
 		// object UnityEngine.GameObject.GetComponent<object>()
 		// object UnityEngine.Object.Instantiate<object>(object,UnityEngine.Transform)
 		// object UnityEngine.Object.Instantiate<object>(object,UnityEngine.Transform,bool)
+		// YooAsset.AllAssetsOperationHandle YooAsset.ResourcePackage.LoadAllAssetsAsync<object>(string)
+		// YooAsset.AssetOperationHandle YooAsset.ResourcePackage.LoadAssetAsync<object>(string)
 	}
 }

+ 42 - 26
Unity/Assets/Scripts/Loader/Plugins/HybridCLR/Generated/link.xml

@@ -21,6 +21,14 @@
     <type fullname="MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptionsAttribute" preserve="all" />
     <type fullname="MongoDB.Bson.Serialization.Attributes.BsonElementAttribute" preserve="all" />
     <type fullname="MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.BsonClassMap" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.BsonSerializer" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Conventions.ConventionPack" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Conventions.ConventionRegistry" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Conventions.IConvention" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Conventions.IConventionPack" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.Conventions.IgnoreExtraElementsConvention" preserve="all" />
+    <type fullname="MongoDB.Bson.Serialization.IBsonSerializer" preserve="all" />
     <type fullname="MongoDB.Bson.Serialization.Options.DictionaryRepresentation" preserve="all" />
   </assembly>
   <assembly fullname="System">
@@ -32,16 +40,11 @@
     <type fullname="System.Net.IPAddress" preserve="all" />
     <type fullname="System.Net.IPEndPoint" preserve="all" />
     <type fullname="System.Net.Sockets.AddressFamily" preserve="all" />
-    <type fullname="System.Net.Sockets.ProtocolType" preserve="all" />
-    <type fullname="System.Net.Sockets.Socket" preserve="all" />
-    <type fullname="System.Net.Sockets.SocketFlags" preserve="all" />
-    <type fullname="System.Net.Sockets.SocketType" preserve="all" />
   </assembly>
   <assembly fullname="System.Core">
     <type fullname="System.Collections.Generic.HashSet`1" preserve="all" />
     <type fullname="System.Collections.Generic.HashSet`1/Enumerator" preserve="all" />
     <type fullname="System.Linq.Enumerable" preserve="all" />
-    <type fullname="System.Linq.IOrderedEnumerable`1" preserve="all" />
   </assembly>
   <assembly fullname="System.Net.Http">
     <type fullname="System.Net.Http.HttpClient" preserve="all" />
@@ -92,7 +95,6 @@
     <type fullname="ET.EventSystem" preserve="all" />
     <type fullname="ET.Fiber" preserve="all" />
     <type fullname="ET.FiberInit" preserve="all" />
-    <type fullname="ET.FiberLog" preserve="all" />
     <type fullname="ET.FiberManager" preserve="all" />
     <type fullname="ET.FriendOfAttribute" preserve="all" />
     <type fullname="ET.IAwake" preserve="all" />
@@ -101,6 +103,7 @@
     <type fullname="ET.IAwake`3" preserve="all" />
     <type fullname="ET.IConfig" preserve="all" />
     <type fullname="ET.IDestroy" preserve="all" />
+    <type fullname="ET.IKcpTransport" preserve="all" />
     <type fullname="ET.ILateUpdate" preserve="all" />
     <type fullname="ET.ILocationMessage" preserve="all" />
     <type fullname="ET.ILocationRequest" preserve="all" />
@@ -135,10 +138,12 @@
     <type fullname="ET.MessageHelper" preserve="all" />
     <type fullname="ET.MessageObject" preserve="all" />
     <type fullname="ET.MessageQueue" preserve="all" />
+    <type fullname="ET.MessageSerializeHelper" preserve="all" />
     <type fullname="ET.MongoHelper" preserve="all" />
     <type fullname="ET.NavmeshComponent" preserve="all" />
     <type fullname="ET.NetServices" preserve="all" />
     <type fullname="ET.NetworkHelper" preserve="all" />
+    <type fullname="ET.NetworkProtocol" preserve="all" />
     <type fullname="ET.Object" preserve="all" />
     <type fullname="ET.ObjectHelper" preserve="all" />
     <type fullname="ET.ObjectPool" preserve="all" />
@@ -157,6 +162,7 @@
     <type fullname="ET.Singleton`1" preserve="all" />
     <type fullname="ET.StringHashHelper" preserve="all" />
     <type fullname="ET.StringHelper" preserve="all" />
+    <type fullname="ET.StructBsonSerialize`1" preserve="all" />
     <type fullname="ET.TimeInfo" preserve="all" />
     <type fullname="ET.TimerComponent" preserve="all" />
     <type fullname="ET.TimerComponentSystem" preserve="all" />
@@ -170,20 +176,28 @@
   </assembly>
   <assembly fullname="Unity.Loader">
     <type fullname="ET.CodeLoader" preserve="all" />
-    <type fullname="ET.CoroutineHelper" preserve="all" />
-    <type fullname="ET.Define" preserve="all" />
     <type fullname="ET.GlobalComponent" preserve="all" />
     <type fullname="ET.GlobalConfig" preserve="all" />
-    <type fullname="ET.PathHelper" preserve="all" />
     <type fullname="ET.UILayer" preserve="all" />
     <type fullname="ReferenceCollector" preserve="all" />
   </assembly>
   <assembly fullname="Unity.Mathematics">
+    <type fullname="Unity.Mathematics.float2" preserve="all" />
     <type fullname="Unity.Mathematics.float3" preserve="all" />
+    <type fullname="Unity.Mathematics.float4" preserve="all" />
     <type fullname="Unity.Mathematics.math" preserve="all" />
     <type fullname="Unity.Mathematics.quaternion" preserve="all" />
   </assembly>
   <assembly fullname="Unity.ThirdParty">
+    <type fullname="DotRecast.Core.RcVec3f" preserve="all" />
+    <type fullname="DotRecast.Detour.DtFindPathOption" preserve="all" />
+    <type fullname="DotRecast.Detour.DtNavMesh" preserve="all" />
+    <type fullname="DotRecast.Detour.DtNavMeshQuery" preserve="all" />
+    <type fullname="DotRecast.Detour.DtQueryDefaultFilter" preserve="all" />
+    <type fullname="DotRecast.Detour.DtStatus" preserve="all" />
+    <type fullname="DotRecast.Detour.IDtQueryFilter" preserve="all" />
+    <type fullname="DotRecast.Detour.Io.DtMeshSetReader" preserve="all" />
+    <type fullname="DotRecast.Detour.StraightPathItem" preserve="all" />
     <type fullname="ET.ETAsyncTaskMethodBuilder" preserve="all" />
     <type fullname="ET.ETAsyncTaskMethodBuilder`1" preserve="all" />
     <type fullname="ET.ETCancellationToken" preserve="all" />
@@ -191,13 +205,13 @@
     <type fullname="ET.ETTaskCompleted" preserve="all" />
     <type fullname="ET.ETTaskHelper" preserve="all" />
     <type fullname="ET.ETTask`1" preserve="all" />
-    <type fullname="ET.Recast" preserve="all" />
     <type fullname="TrueSync.FP" preserve="all" />
     <type fullname="TrueSync.TSMatrix" preserve="all" />
     <type fullname="TrueSync.TSQuaternion" preserve="all" />
     <type fullname="TrueSync.TSRandom" preserve="all" />
     <type fullname="TrueSync.TSVector" preserve="all" />
     <type fullname="TrueSync.TSVector2" preserve="all" />
+    <type fullname="TrueSync.TSVector4" preserve="all" />
   </assembly>
   <assembly fullname="UnityEngine.AnimationModule">
     <type fullname="UnityEngine.AnimationClip" preserve="all" />
@@ -205,14 +219,7 @@
     <type fullname="UnityEngine.AnimatorControllerParameter" preserve="all" />
     <type fullname="UnityEngine.RuntimeAnimatorController" preserve="all" />
   </assembly>
-  <assembly fullname="UnityEngine.AssetBundleModule">
-    <type fullname="UnityEngine.AssetBundle" preserve="all" />
-    <type fullname="UnityEngine.AssetBundleCreateRequest" preserve="all" />
-    <type fullname="UnityEngine.AssetBundleManifest" preserve="all" />
-    <type fullname="UnityEngine.AssetBundleRequest" preserve="all" />
-  </assembly>
   <assembly fullname="UnityEngine.CoreModule">
-    <type fullname="UnityEngine.AsyncOperation" preserve="all" />
     <type fullname="UnityEngine.Camera" preserve="all" />
     <type fullname="UnityEngine.Component" preserve="all" />
     <type fullname="UnityEngine.Events.UnityAction" preserve="all" />
@@ -224,7 +231,7 @@
     <type fullname="UnityEngine.Object" preserve="all" />
     <type fullname="UnityEngine.Quaternion" preserve="all" />
     <type fullname="UnityEngine.Ray" preserve="all" />
-    <type fullname="UnityEngine.SceneManagement.SceneManager" preserve="all" />
+    <type fullname="UnityEngine.SceneManagement.LoadSceneMode" preserve="all" />
     <type fullname="UnityEngine.Time" preserve="all" />
     <type fullname="UnityEngine.Transform" preserve="all" />
     <type fullname="UnityEngine.Vector2" preserve="all" />
@@ -243,16 +250,26 @@
     <type fullname="UnityEngine.UI.InputField" preserve="all" />
     <type fullname="UnityEngine.UI.Text" preserve="all" />
   </assembly>
+  <assembly fullname="YooAsset">
+    <type fullname="YooAsset.AllAssetsOperationHandle" preserve="all" />
+    <type fullname="YooAsset.AssetOperationHandle" preserve="all" />
+    <type fullname="YooAsset.OperationHandleBase" preserve="all" />
+    <type fullname="YooAsset.RawFileOperationHandle" preserve="all" />
+    <type fullname="YooAsset.ResourcePackage" preserve="all" />
+    <type fullname="YooAsset.SceneOperationHandle" preserve="all" />
+    <type fullname="YooAsset.SubAssetsOperationHandle" preserve="all" />
+    <type fullname="YooAsset.UnloadSceneOperation" preserve="all" />
+    <type fullname="YooAsset.YooAssets" preserve="all" />
+  </assembly>
   <assembly fullname="mscorlib">
     <type fullname="System.Action" preserve="all" />
+    <type fullname="System.Action`1" preserve="all" />
     <type fullname="System.Action`2" preserve="all" />
-    <type fullname="System.Action`3" preserve="all" />
     <type fullname="System.Activator" preserve="all" />
     <type fullname="System.Array" preserve="all" />
     <type fullname="System.Attribute" preserve="all" />
     <type fullname="System.AttributeTargets" preserve="all" />
     <type fullname="System.AttributeUsageAttribute" preserve="all" />
-    <type fullname="System.BitConverter" preserve="all" />
     <type fullname="System.Byte" preserve="all" />
     <type fullname="System.Collections.Generic.Dictionary`2" preserve="all" />
     <type fullname="System.Collections.Generic.Dictionary`2/Enumerator" preserve="all" />
@@ -276,19 +293,21 @@
     <type fullname="System.Func`2" preserve="all" />
     <type fullname="System.HashCode" preserve="all" />
     <type fullname="System.IDisposable" preserve="all" />
+    <type fullname="System.IO.BinaryReader" preserve="all" />
     <type fullname="System.IO.File" preserve="all" />
     <type fullname="System.IO.MemoryStream" preserve="all" />
-    <type fullname="System.IO.Path" preserve="all" />
     <type fullname="System.IO.SeekOrigin" preserve="all" />
     <type fullname="System.IO.Stream" preserve="all" />
     <type fullname="System.IO.TextReader" preserve="all" />
     <type fullname="System.Int32" preserve="all" />
     <type fullname="System.Int64" preserve="all" />
-    <type fullname="System.IntPtr" preserve="all" />
     <type fullname="System.Math" preserve="all" />
     <type fullname="System.Object" preserve="all" />
+    <type fullname="System.Reflection.BindingFlags" preserve="all" />
     <type fullname="System.Reflection.DefaultMemberAttribute" preserve="all" />
     <type fullname="System.Reflection.MemberInfo" preserve="all" />
+    <type fullname="System.Reflection.MethodBase" preserve="all" />
+    <type fullname="System.Reflection.MethodInfo" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.AsyncStateMachineAttribute" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.CompilationRelaxationsAttribute" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.CompilerGeneratedAttribute" preserve="all" />
@@ -296,10 +315,8 @@
     <type fullname="System.Runtime.CompilerServices.IAsyncStateMachine" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.IsReadOnlyAttribute" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.RuntimeCompatibilityAttribute" preserve="all" />
-    <type fullname="System.Runtime.CompilerServices.RuntimeHelpers" preserve="all" />
+    <type fullname="System.Runtime.CompilerServices.TaskAwaiter" preserve="all" />
     <type fullname="System.Runtime.CompilerServices.TaskAwaiter`1" preserve="all" />
-    <type fullname="System.Runtime.Versioning.TargetFrameworkAttribute" preserve="all" />
-    <type fullname="System.RuntimeFieldHandle" preserve="all" />
     <type fullname="System.RuntimeTypeHandle" preserve="all" />
     <type fullname="System.Security.Permissions.SecurityAction" preserve="all" />
     <type fullname="System.Security.Permissions.SecurityPermissionAttribute" preserve="all" />
@@ -307,7 +324,6 @@
     <type fullname="System.Single" preserve="all" />
     <type fullname="System.String" preserve="all" />
     <type fullname="System.StringSplitOptions" preserve="all" />
-    <type fullname="System.Text.StringBuilder" preserve="all" />
     <type fullname="System.Threading.CancellationToken" preserve="all" />
     <type fullname="System.Threading.CancellationTokenSource" preserve="all" />
     <type fullname="System.Threading.Tasks.Task" preserve="all" />

+ 2 - 2
Unity/Packages/manifest.json

@@ -3,8 +3,8 @@
     "com.code-philosophy.hybridclr": "https://gitee.com/focus-creative-games/hybridclr_unity.git",
     "com.cysharp.memorypack": "https://github.com/Cysharp/MemoryPack.git?path=src/MemoryPack.Unity/Assets/Plugins/MemoryPack",
     "com.gwiazdorrr.betterstreamingassets": "https://github.com/gwiazdorrr/BetterStreamingAssets.git",
-    "com.unity.ide.rider": "3.0.24",
-    "com.unity.ide.visualstudio": "2.0.18",
+    "com.unity.ide.rider": "3.0.26",
+    "com.unity.ide.visualstudio": "2.0.22",
     "com.unity.ide.vscode": "1.2.5",
     "com.unity.render-pipelines.universal": "12.1.12",
     "com.unity.textmeshpro": "3.0.6",

+ 3 - 3
Unity/Packages/packages-lock.json

@@ -5,7 +5,7 @@
       "depth": 0,
       "source": "git",
       "dependencies": {},
-      "hash": "216d09f7b65fadc5d8fcd0bba82e5ac50ca58f06"
+      "hash": "febff1c658fa9d76726f3aa25f26ec6d35c1e2e6"
     },
     "com.cysharp.memorypack": {
       "version": "https://github.com/Cysharp/MemoryPack.git?path=src/MemoryPack.Unity/Assets/Plugins/MemoryPack",
@@ -48,7 +48,7 @@
       "url": "https://packages.unity.com"
     },
     "com.unity.ide.rider": {
-      "version": "3.0.24",
+      "version": "3.0.26",
       "depth": 0,
       "source": "registry",
       "dependencies": {
@@ -57,7 +57,7 @@
       "url": "https://packages.unity.com"
     },
     "com.unity.ide.visualstudio": {
-      "version": "2.0.18",
+      "version": "2.0.22",
       "depth": 0,
       "source": "registry",
       "dependencies": {