Jelajahi Sumber

合并0GC分支

# Conflicts:
#	DotNet/ThirdParty/DotNet.ThirdParty.csproj
#	Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorHandleHelper.cs
#	Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.Codes.asmdef
#	Unity/Assets/Scripts/Codes/Model/Share/Module/Message/OpcodeHelper.cs
#	Unity/Assets/Scripts/Codes/Model/Share/Module/Message/Session.cs
#	Unity/Assets/Scripts/Core/Module/Entity/Scene.cs
#	Unity/Assets/Scripts/Loader/MonoBehaviour/Init.cs
#	Unity/Directory.Build.props
#	Unity/Packages/packages-lock.json
tanghai 2 tahun lalu
induk
melakukan
b40a964e78
88 mengubah file dengan 1892 tambahan dan 603 penghapusan
  1. 2 0
      .gitignore
  2. 1 1
      DotNet/App/DotNet.App.csproj
  3. 1 1
      DotNet/Hotfix/DotNet.Hotfix.csproj
  4. 1 0
      DotNet/Loader/CodeLoader.cs
  5. 1 1
      DotNet/Loader/DotNet.Loader.csproj
  6. 1 1
      DotNet/Model/DotNet.Model.csproj
  7. 6 1
      DotNet/ThirdParty/DotNet.ThirdParty.csproj
  8. 45 0
      ET.sln
  9. 7 2
      Share/Tool/Proto2CS/Proto2CS.cs
  10. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs
  11. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/AMActorHandler.cs
  12. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/AMActorRpcHandler.cs
  13. 2 2
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorHandleHelper.cs
  14. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorMessageDispatcherComponentSystem.cs
  15. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/ActorLocation/AMActorLocationHandler.cs
  16. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/ActorLocation/AMActorLocationRpcHandler.cs
  17. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Share/Module/Move/MoveComponentSystem.cs
  18. 2 4
      Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.Codes.asmdef
  19. 2 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/ChangePosition_SyncGameObjectPos.cs
  20. 3 4
      Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.Codes.asmdef
  21. 164 36
      Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/OuterMessage_C_10001.cs
  22. 122 23
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/InnerMessage_S_20001.cs
  23. 164 36
      Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/OuterMessage_C_10001.cs
  24. 122 23
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/InnerMessage_S_20001.cs
  25. 164 36
      Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/OuterMessage_C_10001.cs
  26. 6 2
      Unity/Assets/Scripts/Codes/Model/Share/Entry.cs
  27. 1 1
      Unity/Assets/Scripts/Codes/Model/Share/Module/Message/AMHandler.cs
  28. 1 1
      Unity/Assets/Scripts/Codes/Model/Share/Module/Message/OpcodeTypeComponent.cs
  29. 1 1
      Unity/Assets/Scripts/Codes/Model/Share/Module/Message/Session.cs
  30. 4 5
      Unity/Assets/Scripts/Codes/Model/Unity.Model.Codes.asmdef
  31. 16 1
      Unity/Assets/Scripts/Codes/ModelView/Client/Demo/Unit/GameObjectComponent.cs
  32. 1 3
      Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.Codes.asmdef
  33. 2 2
      Unity/Assets/Scripts/Core/Module/Config/ConfigComponent.cs
  34. 20 20
      Unity/Assets/Scripts/Core/Module/Entity/Entity.cs
  35. 1 93
      Unity/Assets/Scripts/Core/Module/Entity/Scene.cs
  36. 2 2
      Unity/Assets/Scripts/Core/Module/EventSystem/EventSystem.cs
  37. 29 11
      Unity/Assets/Scripts/Core/Module/Network/AService.cs
  38. 27 12
      Unity/Assets/Scripts/Core/Module/Network/KChannel.cs
  39. 14 6
      Unity/Assets/Scripts/Core/Module/Network/KService.cs
  40. 65 0
      Unity/Assets/Scripts/Core/Module/Network/MessagePool.cs
  41. 11 0
      Unity/Assets/Scripts/Core/Module/Network/MessagePool.cs.meta
  42. 2 18
      Unity/Assets/Scripts/Core/Module/Network/MessageSerializeHelper.cs
  43. 271 155
      Unity/Assets/Scripts/Core/Module/Network/NetServices.cs
  44. 2 2
      Unity/Assets/Scripts/Core/Module/Network/PacketParser.cs
  45. 6 2
      Unity/Assets/Scripts/Core/Module/Network/TChannel.cs
  46. 3 3
      Unity/Assets/Scripts/Core/Module/Network/TService.cs
  47. 15 10
      Unity/Assets/Scripts/Core/Module/Network/WChannel.cs
  48. 2 3
      Unity/Assets/Scripts/Core/Module/Network/WService.cs
  49. 1 1
      Unity/Assets/Scripts/Core/Module/ObjectPool/ObjectPool.cs
  50. 1 1
      Unity/Assets/Scripts/Core/Module/Timer/TimerComponent.cs
  51. 45 2
      Unity/Assets/Scripts/Core/MultiMap.cs
  52. 10 0
      Unity/Assets/Scripts/Core/Object/MessageObject.cs
  53. 11 0
      Unity/Assets/Scripts/Core/Object/MessageObject.cs.meta
  54. 69 0
      Unity/Assets/Scripts/Core/Serialize/MemoryBuffer.cs
  55. 3 0
      Unity/Assets/Scripts/Core/Serialize/MemoryBuffer.cs.meta
  56. 79 0
      Unity/Assets/Scripts/Core/Serialize/MemoryPackHelper.cs
  57. 3 0
      Unity/Assets/Scripts/Core/Serialize/MemoryPackHelper.cs.meta
  58. 1 0
      Unity/Assets/Scripts/Core/Serialize/MongoHelper.cs
  59. 51 13
      Unity/Assets/Scripts/Core/Serialize/SerializeHelper.cs
  60. 71 0
      Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs
  61. 4 6
      Unity/Assets/Scripts/Editor/BuildEditor/BuildAssembliesHelper.cs
  62. 15 1
      Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs
  63. 8 0
      Unity/Assets/Scripts/Empty/AllCodes.meta
  64. 1 0
      Unity/Assets/Scripts/Empty/AllCodes/Empty.cs
  65. 11 0
      Unity/Assets/Scripts/Empty/AllCodes/Empty.cs.meta
  66. 20 0
      Unity/Assets/Scripts/Empty/AllCodes/Unity.AllCodes.asmdef
  67. 7 0
      Unity/Assets/Scripts/Empty/AllCodes/Unity.AllCodes.asmdef.meta
  68. 8 0
      Unity/Assets/Scripts/Empty/AllHotfix.meta
  69. 1 0
      Unity/Assets/Scripts/Empty/AllHotfix/Empty.cs
  70. 11 0
      Unity/Assets/Scripts/Empty/AllHotfix/Empty.cs.meta
  71. 21 0
      Unity/Assets/Scripts/Empty/AllHotfix/Unity.AllHotfix.asmdef
  72. 7 0
      Unity/Assets/Scripts/Empty/AllHotfix/Unity.AllHotfix.asmdef.meta
  73. 8 0
      Unity/Assets/Scripts/Empty/AllModel.meta
  74. 1 0
      Unity/Assets/Scripts/Empty/AllModel/Empty.cs
  75. 11 0
      Unity/Assets/Scripts/Empty/AllModel/Empty.cs.meta
  76. 20 0
      Unity/Assets/Scripts/Empty/AllModel/Unity.AllModel.asmdef
  77. 7 0
      Unity/Assets/Scripts/Empty/AllModel/Unity.AllModel.asmdef.meta
  78. 3 4
      Unity/Assets/Scripts/Empty/Hotfix/Unity.Hotfix.asmdef
  79. 3 4
      Unity/Assets/Scripts/Empty/HotfixView/Unity.HotfixView.asmdef
  80. 3 4
      Unity/Assets/Scripts/Empty/Model/Unity.Model.asmdef
  81. 3 4
      Unity/Assets/Scripts/Empty/ModelView/Unity.ModelView.asmdef
  82. 14 2
      Unity/Assets/Scripts/Loader/CodeLoader.cs
  83. 8 2
      Unity/Assets/Scripts/Loader/Define.cs
  84. 0 25
      Unity/Assets/Scripts/Loader/MonoBehaviour/Init.cs
  85. 1 1
      Unity/Directory.Build.props
  86. 16 0
      Unity/ProjectSettings/BurstAotSettings_Android.json
  87. 15 0
      Unity/ProjectSettings/BurstAotSettings_iOS.json
  88. 1 1
      Unity/ProjectSettings/ProjectSettings.asset

+ 2 - 0
.gitignore

@@ -89,3 +89,5 @@ Publish/
 /Unity/Assets/Bundles/AotDlls.meta
 /Unity/Assets/Bundles/AotDlls.meta
 /Unity/HybridCLRData
 /Unity/HybridCLRData
 /Unity/Assembly-CSharp-firstpass.csproj
 /Unity/Assembly-CSharp-firstpass.csproj
+
+/Unity/*.csproj

+ 1 - 1
DotNet/App/DotNet.App.csproj

@@ -4,7 +4,7 @@
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
     <TargetFramework>net7.0</TargetFramework>
     <TargetFramework>net7.0</TargetFramework>
     <RootNamespace>ET</RootNamespace>
     <RootNamespace>ET</RootNamespace>
-    <LangVersion>10</LangVersion>
+    <LangVersion>11</LangVersion>
     <AssemblyName>App</AssemblyName>
     <AssemblyName>App</AssemblyName>
   </PropertyGroup>
   </PropertyGroup>
 
 

+ 1 - 1
DotNet/Hotfix/DotNet.Hotfix.csproj

@@ -2,7 +2,7 @@
     <PropertyGroup>
     <PropertyGroup>
         <TargetFramework>net7.0</TargetFramework> 
         <TargetFramework>net7.0</TargetFramework> 
         <RootNamespace>ET</RootNamespace>
         <RootNamespace>ET</RootNamespace>
-        <LangVersion>10</LangVersion>
+        <LangVersion>11</LangVersion>
         <AssemblyName>Hotfix</AssemblyName>
         <AssemblyName>Hotfix</AssemblyName>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup>
     <PropertyGroup>

+ 1 - 0
DotNet/Loader/CodeLoader.cs

@@ -6,6 +6,7 @@ using System.Runtime.Loader;
 
 
 namespace ET
 namespace ET
 {
 {
+   
     public class CodeLoader: Singleton<CodeLoader>
     public class CodeLoader: Singleton<CodeLoader>
     {
     {
         private AssemblyLoadContext assemblyLoadContext;
         private AssemblyLoadContext assemblyLoadContext;

+ 1 - 1
DotNet/Loader/DotNet.Loader.csproj

@@ -2,7 +2,7 @@
     <PropertyGroup>
     <PropertyGroup>
         <TargetFramework>net7.0</TargetFramework>
         <TargetFramework>net7.0</TargetFramework>
         <RootNamespace>ET</RootNamespace>
         <RootNamespace>ET</RootNamespace>
-        <LangVersion>10</LangVersion>
+        <LangVersion>11</LangVersion>
         <AssemblyName>Loader</AssemblyName>
         <AssemblyName>Loader</AssemblyName>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup>
     <PropertyGroup>

+ 1 - 1
DotNet/Model/DotNet.Model.csproj

@@ -2,7 +2,7 @@
     <PropertyGroup>
     <PropertyGroup>
         <TargetFramework>net7.0</TargetFramework>
         <TargetFramework>net7.0</TargetFramework>
         <RootNamespace>ET</RootNamespace>
         <RootNamespace>ET</RootNamespace>
-        <LangVersion>10</LangVersion>
+        <LangVersion>11</LangVersion>
         <AssemblyName>Model</AssemblyName>
         <AssemblyName>Model</AssemblyName>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup>
     <PropertyGroup>

+ 6 - 1
DotNet/ThirdParty/DotNet.ThirdParty.csproj

@@ -3,7 +3,7 @@
     <PropertyGroup>
     <PropertyGroup>
         <TargetFramework>net7.0</TargetFramework>
         <TargetFramework>net7.0</TargetFramework>
         <Nullable>disable</Nullable>
         <Nullable>disable</Nullable>
-        <LangVersion>10</LangVersion>
+        <LangVersion>11</LangVersion>
         <RootNamespace>ET</RootNamespace>
         <RootNamespace>ET</RootNamespace>
         <AssemblyName>ThirdParty</AssemblyName>
         <AssemblyName>ThirdParty</AssemblyName>
     </PropertyGroup>
     </PropertyGroup>
@@ -49,6 +49,7 @@
     <Compile Include="..\..\Unity\Library\PackageCache\com.unity.mathematics*\Unity.Mathematics\**\*.cs">
     <Compile Include="..\..\Unity\Library\PackageCache\com.unity.mathematics*\Unity.Mathematics\**\*.cs">
         <Link>Unity.Mathematics/$([System.String]::new(%(RecursiveDir)).Substring($([System.String]::new(%(RecursiveDir)).Indexof("Unity.Mathematics"))).Replace("Unity.Mathematics", ""))/%(FileName)%(Extension)</Link>
         <Link>Unity.Mathematics/$([System.String]::new(%(RecursiveDir)).Substring($([System.String]::new(%(RecursiveDir)).Indexof("Unity.Mathematics"))).Replace("Unity.Mathematics", ""))/%(FileName)%(Extension)</Link>
     </Compile>
     </Compile>
+        
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
@@ -76,11 +77,15 @@
         <Link>runtimes\win\native\RecastDll.dll</Link>
         <Link>runtimes\win\native\RecastDll.dll</Link>
         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       </Content>
       </Content>
+      <Compile Include="..\..\Unity\Assets\Scripts\ThirdParty\TrueSync\**\*.cs">
+          <Link>TrueSync/%(RecursiveDir)%(FileName)%(Extension)</Link>
+      </Compile>
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
       <PackageReference Include="CommandLineParser" Version="2.8.0" />
       <PackageReference Include="CommandLineParser" Version="2.8.0" />
       <PackageReference Include="EPPlus" Version="5.8.8" />
       <PackageReference Include="EPPlus" Version="5.8.8" />
+
       <PackageReference Include="MemoryPack" Version="1.9.13" />
       <PackageReference Include="MemoryPack" Version="1.9.13" />
       <PackageReference Include="MongoDB.Driver" Version="2.17.1" />
       <PackageReference Include="MongoDB.Driver" Version="2.17.1" />
       <PackageReference Include="NLog" Version="4.7.15" />
       <PackageReference Include="NLog" Version="4.7.15" />

+ 45 - 0
ET.sln

@@ -53,6 +53,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Loader", "Unity\Unity
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNet.Loader", "DotNet\Loader\DotNet.Loader.csproj", "{1D5E890A-C9D5-45DF-B098-73DBE39EB311}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNet.Loader", "DotNet\Loader\DotNet.Loader.csproj", "{1D5E890A-C9D5-45DF-B098-73DBE39EB311}"
 EndProject
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.AllCodes", "Unity\Unity.AllCodes.csproj", "{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.AllModel", "Unity\Unity.AllModel.csproj", "{B274D5FA-24BE-0EF2-8374-77D88F882F8D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.AllHotfix", "Unity\Unity.AllHotfix.csproj", "{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}"
+EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|Any CPU = Debug|Any CPU
@@ -315,6 +321,42 @@ Global
 		{1D5E890A-C9D5-45DF-B098-73DBE39EB311}.Release|x64.Build.0 = Release|Any CPU
 		{1D5E890A-C9D5-45DF-B098-73DBE39EB311}.Release|x64.Build.0 = Release|Any CPU
 		{1D5E890A-C9D5-45DF-B098-73DBE39EB311}.Release|x86.ActiveCfg = Release|Any CPU
 		{1D5E890A-C9D5-45DF-B098-73DBE39EB311}.Release|x86.ActiveCfg = Release|Any CPU
 		{1D5E890A-C9D5-45DF-B098-73DBE39EB311}.Release|x86.Build.0 = Release|Any CPU
 		{1D5E890A-C9D5-45DF-B098-73DBE39EB311}.Release|x86.Build.0 = Release|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Debug|x64.Build.0 = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Debug|x86.Build.0 = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Release|x64.ActiveCfg = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Release|x64.Build.0 = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Release|x86.ActiveCfg = Debug|Any CPU
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152}.Release|x86.Build.0 = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Debug|x64.Build.0 = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Debug|x86.Build.0 = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Release|x64.ActiveCfg = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Release|x64.Build.0 = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Release|x86.ActiveCfg = Debug|Any CPU
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D}.Release|x86.Build.0 = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Debug|x64.Build.0 = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Debug|x86.Build.0 = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Release|x64.ActiveCfg = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Release|x64.Build.0 = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Release|x86.ActiveCfg = Debug|Any CPU
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A}.Release|x86.Build.0 = Debug|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE
@@ -342,6 +384,9 @@ Global
 		{DE4513D3-889B-5C52-8E9C-744C99AE7509} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
 		{DE4513D3-889B-5C52-8E9C-744C99AE7509} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
 		{9498BFB4-D9F5-C441-13E3-3F26F7700E29} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
 		{9498BFB4-D9F5-C441-13E3-3F26F7700E29} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
 		{C109842F-01DA-64D4-DBF2-00C6449E459E} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
 		{C109842F-01DA-64D4-DBF2-00C6449E459E} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
+		{BC8AF236-3AA6-2FE6-DCCB-E412FEC3C152} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
+		{B274D5FA-24BE-0EF2-8374-77D88F882F8D} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
+		{152061A0-80F4-0ADA-C8E3-F8EAEC23405A} = {914C77C9-212A-4DD0-8D9A-074620E77FAA}
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {EABC01E3-3EB5-47EF-B46E-AAD8BB3585F1}
 		SolutionGuid = {EABC01E3-3EB5-47EF-B46E-AAD8BB3585F1}

+ 7 - 2
Share/Tool/Proto2CS/Proto2CS.cs

@@ -76,6 +76,7 @@ namespace ET
             StringBuilder sb = new StringBuilder();
             StringBuilder sb = new StringBuilder();
             sb.Append("using ET;\n");
             sb.Append("using ET;\n");
             sb.Append("using ProtoBuf;\n");
             sb.Append("using ProtoBuf;\n");
+            sb.Append("using MemoryPack;\n");
             sb.Append("using System.Collections.Generic;\n");
             sb.Append("using System.Collections.Generic;\n");
             sb.Append($"namespace {ns}\n");
             sb.Append($"namespace {ns}\n");
             sb.Append("{\n");
             sb.Append("{\n");
@@ -119,7 +120,8 @@ namespace ET
 
 
                     sb.Append($"\t[Message({protoName}.{msgName})]\n");
                     sb.Append($"\t[Message({protoName}.{msgName})]\n");
                     sb.Append($"\t[ProtoContract]\n");
                     sb.Append($"\t[ProtoContract]\n");
-                    sb.Append($"\tpublic partial class {msgName}: ProtoObject");
+                    sb.Append($"\t[MemoryPackable]\n");
+                    sb.Append($"\tpublic partial class {msgName}: MessageObject");
                     if (parentClass == "IActorMessage" || parentClass == "IActorRequest" || parentClass == "IActorResponse")
                     if (parentClass == "IActorMessage" || parentClass == "IActorRequest" || parentClass == "IActorResponse")
                     {
                     {
                         sb.Append($", {parentClass}\n");
                         sb.Append($", {parentClass}\n");
@@ -225,10 +227,11 @@ namespace ET
             string tail = newline.Substring(end + 1);
             string tail = newline.Substring(end + 1);
             ss = tail.Trim().Replace(";", "").Split(" ");
             ss = tail.Trim().Replace(";", "").Split(" ");
             string v = ss[0];
             string v = ss[0];
-            string n = ss[2];
+            int n = int.Parse(ss[2]);
             
             
             sb.Append("\t\t[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]\n");
             sb.Append("\t\t[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]\n");
             sb.Append($"\t\t[ProtoMember({n})]\n");
             sb.Append($"\t\t[ProtoMember({n})]\n");
+            sb.Append($"\t\t[MemoryPackOrder({n - 1})]\n");
             sb.Append($"\t\tpublic Dictionary<{keyType}, {valueType}> {v} {{ get; set; }}\n");
             sb.Append($"\t\tpublic Dictionary<{keyType}, {valueType}> {v} {{ get; set; }}\n");
         }
         }
         
         
@@ -245,6 +248,7 @@ namespace ET
                 int n = int.Parse(ss[4]);
                 int n = int.Parse(ss[4]);
 
 
                 sb.Append($"\t\t[ProtoMember({n})]\n");
                 sb.Append($"\t\t[ProtoMember({n})]\n");
+                sb.Append($"\t\t[MemoryPackOrder({n - 1})]\n");
                 sb.Append($"\t\tpublic List<{type}> {name} {{ get; set; }}\n\n");
                 sb.Append($"\t\tpublic List<{type}> {name} {{ get; set; }}\n\n");
             }
             }
             catch (Exception e)
             catch (Exception e)
@@ -303,6 +307,7 @@ namespace ET
                 string typeCs = ConvertType(type);
                 string typeCs = ConvertType(type);
 
 
                 sb.Append($"\t\t[ProtoMember({n})]\n");
                 sb.Append($"\t\t[ProtoMember({n})]\n");
+                sb.Append($"\t\t[MemoryPackOrder({n - 1})]\n");
                 sb.Append($"\t\tpublic {typeCs} {name} {{ get; set; }}\n\n");
                 sb.Append($"\t\tpublic {typeCs} {name} {{ get; set; }}\n\n");
             }
             }
             catch (Exception e)
             catch (Exception e)

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs

@@ -40,7 +40,7 @@ namespace ET.Server
             }
             }
             catch (Exception e)
             catch (Exception e)
             {
             {
-                Log.Error($"InnerMessageDispatcher error: {args.Message.GetType().Name}\n{e}");
+                Log.Error($"InnerMessageDispatcher error: {args.Message.GetType().FullName}\n{e}");
             }
             }
 
 
             await ETTask.CompletedTask;
             await ETTask.CompletedTask;

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/AMActorHandler.cs

@@ -17,7 +17,7 @@ namespace ET.Server
 
 
             if (entity is not E e)
             if (entity is not E e)
             {
             {
-                Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof (E).Name} --{typeof (Message).Name}");
+                Log.Error($"Actor类型转换错误: {entity.GetType().FullName} to {typeof (E).Name} --{typeof (Message).FullName}");
                 return;
                 return;
             }
             }
 
 

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/AMActorRpcHandler.cs

@@ -19,7 +19,7 @@ namespace ET.Server
 
 
                 if (entity is not E ee)
                 if (entity is not E ee)
                 {
                 {
-                    Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof (E).Name} --{typeof (Request).Name}");
+                    Log.Error($"Actor类型转换错误: {entity.GetType().FullName} to {typeof (E).FullName} --{typeof (Request).FullName}");
                     return;
                     return;
                 }
                 }
 
 

+ 2 - 2
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorHandleHelper.cs

@@ -45,7 +45,7 @@ namespace ET.Server
             MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
             MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
             if (mailBoxComponent == null)
             if (mailBoxComponent == null)
             {
             {
-                Log.Warning($"actor not found mailbox: {entity.GetType().Name} {actorId} {iActorRequest}");
+                Log.Warning($"actor not found mailbox: {entity.GetType().FullName} {actorId} {iActorRequest}");
                 IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
                 IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
                 Reply(fromProcess, response);
                 Reply(fromProcess, response);
                 return;
                 return;
@@ -93,7 +93,7 @@ namespace ET.Server
             MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
             MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
             if (mailBoxComponent == null)
             if (mailBoxComponent == null)
             {
             {
-                Log.Error($"actor not found mailbox: {entity.GetType().Name} {actorId} {iActorMessage}");
+                Log.Error($"actor not found mailbox: {entity.GetType().FullName} {actorId} {iActorMessage}");
                 return;
                 return;
             }
             }
 
 

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Actor/ActorMessageDispatcherComponentSystem.cs

@@ -98,7 +98,7 @@ namespace ET.Server
             List<ActorMessageDispatcherInfo> list;
             List<ActorMessageDispatcherInfo> list;
             if (!self.ActorMessageHandlers.TryGetValue(message.GetType(), out list))
             if (!self.ActorMessageHandlers.TryGetValue(message.GetType(), out list))
             {
             {
-                throw new Exception($"not found message handler: {message} {entity.GetType().Name}");
+                throw new Exception($"not found message handler: {message} {entity.GetType().FullName}");
             }
             }
 
 
             SceneType sceneType = entity.Domain.SceneType;
             SceneType sceneType = entity.Domain.SceneType;

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/ActorLocation/AMActorLocationHandler.cs

@@ -17,7 +17,7 @@ namespace ET.Server
 
 
             if (entity is not E e)
             if (entity is not E e)
             {
             {
-                Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof (E).Name} --{typeof (Message).Name}");
+                Log.Error($"Actor类型转换错误: {entity.GetType().FullName} to {typeof (E).FullName} --{typeof (Message).FullName}");
                 return;
                 return;
             }
             }
             
             

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/ActorLocation/AMActorLocationRpcHandler.cs

@@ -19,7 +19,7 @@ namespace ET.Server
 
 
                 if (entity is not E ee)
                 if (entity is not E ee)
                 {
                 {
-                    Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof (E).Name} --{typeof (Request).Name}");
+                    Log.Error($"Actor类型转换错误: {entity.GetType().FullName} to {typeof (E).FullName} --{typeof (Request).FullName}");
                     return;
                     return;
                 }
                 }
 
 

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Share/Module/Move/MoveComponentSystem.cs

@@ -28,7 +28,7 @@ namespace ET
         {
         {
             protected override void Destroy(MoveComponent self)
             protected override void Destroy(MoveComponent self)
             {
             {
-                self.MoveFinish(true);
+                self.MoveFinish(false);
             }
             }
         }
         }
 
 

+ 2 - 4
Unity/Assets/Scripts/Codes/Hotfix/Unity.Hotfix.Codes.asmdef

@@ -9,9 +9,7 @@
         "Unity.Loader",
         "Unity.Loader",
         "MemoryPack"
         "MemoryPack"
     ],
     ],
-    "includePlatforms": [
-        "Editor"
-    ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,
@@ -21,5 +19,5 @@
         "ENABLE_CODES"
         "ENABLE_CODES"
     ],
     ],
     "versionDefines": [],
     "versionDefines": [],
-    "noEngineReferences": true
+    "noEngineReferences": false
 }
 }

+ 2 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/ChangePosition_SyncGameObjectPos.cs

@@ -13,7 +13,8 @@ namespace ET.Client
             {
             {
                 return;
                 return;
             }
             }
-            Transform transform = gameObjectComponent.GameObject.transform;
+
+            Transform transform = gameObjectComponent.Transform;
             transform.position = unit.Position;
             transform.position = unit.Position;
             await ETTask.CompletedTask;
             await ETTask.CompletedTask;
         }
         }

+ 3 - 4
Unity/Assets/Scripts/Codes/HotfixView/Unity.HotfixView.Codes.asmdef

@@ -8,11 +8,10 @@
         "Unity.Hotfix.Codes",
         "Unity.Hotfix.Codes",
         "Unity.ModelView.Codes",
         "Unity.ModelView.Codes",
         "Unity.Mathematics",
         "Unity.Mathematics",
-        "Unity.Loader"
-    ],
-    "includePlatforms": [
-        "Editor"
+        "Unity.Loader",
+        "MemoryPack"
     ],
     ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,

+ 164 - 36
Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/OuterMessage_C_10001.cs

@@ -1,28 +1,35 @@
 using ET;
 using ET;
 using ProtoBuf;
 using ProtoBuf;
+using MemoryPack;
 using System.Collections.Generic;
 using System.Collections.Generic;
 namespace ET
 namespace ET
 {
 {
 	[Message(OuterMessage.HttpGetRouterResponse)]
 	[Message(OuterMessage.HttpGetRouterResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class HttpGetRouterResponse: ProtoObject
+	[MemoryPackable]
+	public partial class HttpGetRouterResponse: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<string> Realms { get; set; }
 		public List<string> Realms { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public List<string> Routers { get; set; }
 		public List<string> Routers { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.RouterSync)]
 	[Message(OuterMessage.RouterSync)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class RouterSync: ProtoObject
+	[MemoryPackable]
+	public partial class RouterSync: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public uint ConnectId { get; set; }
 		public uint ConnectId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
@@ -30,30 +37,38 @@ namespace ET
 	[ResponseType(nameof(M2C_TestResponse))]
 	[ResponseType(nameof(M2C_TestResponse))]
 	[Message(OuterMessage.C2M_TestRequest)]
 	[Message(OuterMessage.C2M_TestRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRequest: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TestRequest: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string request { get; set; }
 		public string request { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestResponse)]
 	[Message(OuterMessage.M2C_TestResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class M2C_TestResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public string response { get; set; }
 		public string response { get; set; }
 
 
 	}
 	}
@@ -61,27 +76,34 @@ namespace ET
 	[ResponseType(nameof(Actor_TransferResponse))]
 	[ResponseType(nameof(Actor_TransferResponse))]
 	[Message(OuterMessage.Actor_TransferRequest)]
 	[Message(OuterMessage.Actor_TransferRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class Actor_TransferRequest: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class Actor_TransferRequest: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int MapIndex { get; set; }
 		public int MapIndex { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.Actor_TransferResponse)]
 	[Message(OuterMessage.Actor_TransferResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class Actor_TransferResponse: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class Actor_TransferResponse: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -89,163 +111,205 @@ namespace ET
 	[ResponseType(nameof(G2C_EnterMap))]
 	[ResponseType(nameof(G2C_EnterMap))]
 	[Message(OuterMessage.C2G_EnterMap)]
 	[Message(OuterMessage.C2G_EnterMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_EnterMap: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_EnterMap: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_EnterMap)]
 	[Message(OuterMessage.G2C_EnterMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_EnterMap: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_EnterMap: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 // 自己unitId
 // 自己unitId
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long MyId { get; set; }
 		public long MyId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.MoveInfo)]
 	[Message(OuterMessage.MoveInfo)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class MoveInfo: ProtoObject
+	[MemoryPackable]
+	public partial class MoveInfo: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
 		public List<Unity.Mathematics.float3> Points { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public int TurnSpeed { get; set; }
 		public int TurnSpeed { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.UnitInfo)]
 	[Message(OuterMessage.UnitInfo)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class UnitInfo: ProtoObject
+	[MemoryPackable]
+	public partial class UnitInfo: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long UnitId { get; set; }
 		public long UnitId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int ConfigId { get; set; }
 		public int ConfigId { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public Unity.Mathematics.float3 Forward { get; set; }
 		public Unity.Mathematics.float3 Forward { get; set; }
 
 
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[ProtoMember(6)]
 		[ProtoMember(6)]
+		[MemoryPackOrder(5)]
 		public Dictionary<int, long> KV { get; set; }
 		public Dictionary<int, long> KV { get; set; }
 		[ProtoMember(7)]
 		[ProtoMember(7)]
+		[MemoryPackOrder(6)]
 		public MoveInfo MoveInfo { get; set; }
 		public MoveInfo MoveInfo { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_CreateUnits)]
 	[Message(OuterMessage.M2C_CreateUnits)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_CreateUnits: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_CreateUnits: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<UnitInfo> Units { get; set; }
 		public List<UnitInfo> Units { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_CreateMyUnit)]
 	[Message(OuterMessage.M2C_CreateMyUnit)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_CreateMyUnit: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_CreateMyUnit: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public UnitInfo Unit { get; set; }
 		public UnitInfo Unit { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_StartSceneChange)]
 	[Message(OuterMessage.M2C_StartSceneChange)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_StartSceneChange: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_StartSceneChange: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long SceneInstanceId { get; set; }
 		public long SceneInstanceId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string SceneName { get; set; }
 		public string SceneName { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_RemoveUnits)]
 	[Message(OuterMessage.M2C_RemoveUnits)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_RemoveUnits: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_RemoveUnits: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<long> Units { get; set; }
 		public List<long> Units { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_PathfindingResult)]
 	[Message(OuterMessage.C2M_PathfindingResult)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_PathfindingResult: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_PathfindingResult: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_Stop)]
 	[Message(OuterMessage.C2M_Stop)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_Stop: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_Stop: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_PathfindingResult)]
 	[Message(OuterMessage.M2C_PathfindingResult)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_PathfindingResult: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_PathfindingResult: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
 		public List<Unity.Mathematics.float3> Points { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_Stop)]
 	[Message(OuterMessage.M2C_Stop)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_Stop: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_Stop: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 
 
 	}
 	}
@@ -253,64 +317,80 @@ namespace ET
 	[ResponseType(nameof(G2C_Ping))]
 	[ResponseType(nameof(G2C_Ping))]
 	[Message(OuterMessage.C2G_Ping)]
 	[Message(OuterMessage.C2G_Ping)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_Ping: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_Ping: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Ping)]
 	[Message(OuterMessage.G2C_Ping)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Ping: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_Ping: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long Time { get; set; }
 		public long Time { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Test)]
 	[Message(OuterMessage.G2C_Test)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Test: ProtoObject, IMessage
+	[MemoryPackable]
+	public partial class G2C_Test: MessageObject, IMessage
 	{
 	{
 	}
 	}
 
 
 	[ResponseType(nameof(M2C_Reload))]
 	[ResponseType(nameof(M2C_Reload))]
 	[Message(OuterMessage.C2M_Reload)]
 	[Message(OuterMessage.C2M_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_Reload: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2M_Reload: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Password { get; set; }
 		public string Password { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_Reload)]
 	[Message(OuterMessage.M2C_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_Reload: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class M2C_Reload: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -318,39 +398,50 @@ namespace ET
 	[ResponseType(nameof(R2C_Login))]
 	[ResponseType(nameof(R2C_Login))]
 	[Message(OuterMessage.C2R_Login)]
 	[Message(OuterMessage.C2R_Login)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2R_Login: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2R_Login: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Password { get; set; }
 		public string Password { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.R2C_Login)]
 	[Message(OuterMessage.R2C_Login)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class R2C_Login: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class R2C_Login: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(6)]
 		[ProtoMember(6)]
+		[MemoryPackOrder(5)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
@@ -358,42 +449,53 @@ namespace ET
 	[ResponseType(nameof(G2C_LoginGate))]
 	[ResponseType(nameof(G2C_LoginGate))]
 	[Message(OuterMessage.C2G_LoginGate)]
 	[Message(OuterMessage.C2G_LoginGate)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_LoginGate: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_LoginGate: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_LoginGate)]
 	[Message(OuterMessage.G2C_LoginGate)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_LoginGate: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_LoginGate: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long PlayerId { get; set; }
 		public long PlayerId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_TestHotfixMessage)]
 	[Message(OuterMessage.G2C_TestHotfixMessage)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_TestHotfixMessage: ProtoObject, IMessage
+	[MemoryPackable]
+	public partial class G2C_TestHotfixMessage: MessageObject, IMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public string Info { get; set; }
 		public string Info { get; set; }
 
 
 	}
 	}
@@ -401,54 +503,68 @@ namespace ET
 	[ResponseType(nameof(M2C_TestRobotCase))]
 	[ResponseType(nameof(M2C_TestRobotCase))]
 	[Message(OuterMessage.C2M_TestRobotCase)]
 	[Message(OuterMessage.C2M_TestRobotCase)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRobotCase: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TestRobotCase: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestRobotCase)]
 	[Message(OuterMessage.M2C_TestRobotCase)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestRobotCase: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class M2C_TestRobotCase: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_TestRobotCase2)]
 	[Message(OuterMessage.C2M_TestRobotCase2)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRobotCase2: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestRobotCase2)]
 	[Message(OuterMessage.M2C_TestRobotCase2)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestRobotCase2: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class M2C_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
@@ -456,24 +572,30 @@ namespace ET
 	[ResponseType(nameof(M2C_TransferMap))]
 	[ResponseType(nameof(M2C_TransferMap))]
 	[Message(OuterMessage.C2M_TransferMap)]
 	[Message(OuterMessage.C2M_TransferMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TransferMap: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TransferMap: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TransferMap)]
 	[Message(OuterMessage.M2C_TransferMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TransferMap: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class M2C_TransferMap: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -481,24 +603,30 @@ namespace ET
 	[ResponseType(nameof(G2C_Benchmark))]
 	[ResponseType(nameof(G2C_Benchmark))]
 	[Message(OuterMessage.C2G_Benchmark)]
 	[Message(OuterMessage.C2G_Benchmark)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_Benchmark: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_Benchmark: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Benchmark)]
 	[Message(OuterMessage.G2C_Benchmark)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Benchmark: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_Benchmark: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}

+ 122 - 23
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/InnerMessage_S_20001.cs

@@ -1,5 +1,6 @@
 using ET;
 using ET;
 using ProtoBuf;
 using ProtoBuf;
+using MemoryPack;
 using System.Collections.Generic;
 using System.Collections.Generic;
 namespace ET
 namespace ET
 {
 {
@@ -7,15 +8,19 @@ namespace ET
 	[ResponseType(nameof(ObjectQueryResponse))]
 	[ResponseType(nameof(ObjectQueryResponse))]
 	[Message(InnerMessage.ObjectQueryRequest)]
 	[Message(InnerMessage.ObjectQueryRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectQueryRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectQueryRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
@@ -23,24 +28,30 @@ namespace ET
 	[ResponseType(nameof(A2M_Reload))]
 	[ResponseType(nameof(A2M_Reload))]
 	[Message(InnerMessage.M2A_Reload)]
 	[Message(InnerMessage.M2A_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2A_Reload: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class M2A_Reload: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.A2M_Reload)]
 	[Message(InnerMessage.A2M_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class A2M_Reload: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class A2M_Reload: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -48,30 +59,38 @@ namespace ET
 	[ResponseType(nameof(G2G_LockResponse))]
 	[ResponseType(nameof(G2G_LockResponse))]
 	[Message(InnerMessage.G2G_LockRequest)]
 	[Message(InnerMessage.G2G_LockRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class G2G_LockRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2G_LockResponse)]
 	[Message(InnerMessage.G2G_LockResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class G2G_LockResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -79,30 +98,38 @@ namespace ET
 	[ResponseType(nameof(G2G_LockReleaseResponse))]
 	[ResponseType(nameof(G2G_LockReleaseResponse))]
 	[Message(InnerMessage.G2G_LockReleaseRequest)]
 	[Message(InnerMessage.G2G_LockReleaseRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockReleaseRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class G2G_LockReleaseRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2G_LockReleaseResponse)]
 	[Message(InnerMessage.G2G_LockReleaseResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockReleaseResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class G2G_LockReleaseResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -110,33 +137,42 @@ namespace ET
 	[ResponseType(nameof(ObjectAddResponse))]
 	[ResponseType(nameof(ObjectAddResponse))]
 	[Message(InnerMessage.ObjectAddRequest)]
 	[Message(InnerMessage.ObjectAddRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectAddRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectAddRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectAddResponse)]
 	[Message(InnerMessage.ObjectAddResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectAddResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectAddResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -144,36 +180,46 @@ namespace ET
 	[ResponseType(nameof(ObjectLockResponse))]
 	[ResponseType(nameof(ObjectLockResponse))]
 	[Message(InnerMessage.ObjectLockRequest)]
 	[Message(InnerMessage.ObjectLockRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectLockRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectLockRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public int Time { get; set; }
 		public int Time { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectLockResponse)]
 	[Message(InnerMessage.ObjectLockResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectLockResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectLockResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -181,36 +227,46 @@ namespace ET
 	[ResponseType(nameof(ObjectUnLockResponse))]
 	[ResponseType(nameof(ObjectUnLockResponse))]
 	[Message(InnerMessage.ObjectUnLockRequest)]
 	[Message(InnerMessage.ObjectUnLockRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectUnLockRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectUnLockRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long OldInstanceId { get; set; }
 		public long OldInstanceId { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectUnLockResponse)]
 	[Message(InnerMessage.ObjectUnLockResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectUnLockResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectUnLockResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -218,30 +274,38 @@ namespace ET
 	[ResponseType(nameof(ObjectRemoveResponse))]
 	[ResponseType(nameof(ObjectRemoveResponse))]
 	[Message(InnerMessage.ObjectRemoveRequest)]
 	[Message(InnerMessage.ObjectRemoveRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectRemoveRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectRemoveRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectRemoveResponse)]
 	[Message(InnerMessage.ObjectRemoveResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectRemoveResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectRemoveResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -249,36 +313,46 @@ namespace ET
 	[ResponseType(nameof(ObjectGetResponse))]
 	[ResponseType(nameof(ObjectGetResponse))]
 	[Message(InnerMessage.ObjectGetRequest)]
 	[Message(InnerMessage.ObjectGetRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectGetRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectGetRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectGetResponse)]
 	[Message(InnerMessage.ObjectGetResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectGetResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectGetResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
@@ -286,60 +360,76 @@ namespace ET
 	[ResponseType(nameof(G2R_GetLoginKey))]
 	[ResponseType(nameof(G2R_GetLoginKey))]
 	[Message(InnerMessage.R2G_GetLoginKey)]
 	[Message(InnerMessage.R2G_GetLoginKey)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class R2G_GetLoginKey: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class R2G_GetLoginKey: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2R_GetLoginKey)]
 	[Message(InnerMessage.G2R_GetLoginKey)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2R_GetLoginKey: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class G2R_GetLoginKey: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2M_SessionDisconnect)]
 	[Message(InnerMessage.G2M_SessionDisconnect)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2M_SessionDisconnect: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class G2M_SessionDisconnect: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectQueryResponse)]
 	[Message(InnerMessage.ObjectQueryResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectQueryResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectQueryResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public byte[] Entity { get; set; }
 		public byte[] Entity { get; set; }
 
 
 	}
 	}
@@ -347,33 +437,42 @@ namespace ET
 	[ResponseType(nameof(M2M_UnitTransferResponse))]
 	[ResponseType(nameof(M2M_UnitTransferResponse))]
 	[Message(InnerMessage.M2M_UnitTransferRequest)]
 	[Message(InnerMessage.M2M_UnitTransferRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2M_UnitTransferRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class M2M_UnitTransferRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long OldInstanceId { get; set; }
 		public long OldInstanceId { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public byte[] Unit { get; set; }
 		public byte[] Unit { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public List<byte[]> Entitys { get; set; }
 		public List<byte[]> Entitys { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.M2M_UnitTransferResponse)]
 	[Message(InnerMessage.M2M_UnitTransferResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2M_UnitTransferResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class M2M_UnitTransferResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}

+ 164 - 36
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/OuterMessage_C_10001.cs

@@ -1,28 +1,35 @@
 using ET;
 using ET;
 using ProtoBuf;
 using ProtoBuf;
+using MemoryPack;
 using System.Collections.Generic;
 using System.Collections.Generic;
 namespace ET
 namespace ET
 {
 {
 	[Message(OuterMessage.HttpGetRouterResponse)]
 	[Message(OuterMessage.HttpGetRouterResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class HttpGetRouterResponse: ProtoObject
+	[MemoryPackable]
+	public partial class HttpGetRouterResponse: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<string> Realms { get; set; }
 		public List<string> Realms { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public List<string> Routers { get; set; }
 		public List<string> Routers { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.RouterSync)]
 	[Message(OuterMessage.RouterSync)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class RouterSync: ProtoObject
+	[MemoryPackable]
+	public partial class RouterSync: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public uint ConnectId { get; set; }
 		public uint ConnectId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
@@ -30,30 +37,38 @@ namespace ET
 	[ResponseType(nameof(M2C_TestResponse))]
 	[ResponseType(nameof(M2C_TestResponse))]
 	[Message(OuterMessage.C2M_TestRequest)]
 	[Message(OuterMessage.C2M_TestRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRequest: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TestRequest: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string request { get; set; }
 		public string request { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestResponse)]
 	[Message(OuterMessage.M2C_TestResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class M2C_TestResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public string response { get; set; }
 		public string response { get; set; }
 
 
 	}
 	}
@@ -61,27 +76,34 @@ namespace ET
 	[ResponseType(nameof(Actor_TransferResponse))]
 	[ResponseType(nameof(Actor_TransferResponse))]
 	[Message(OuterMessage.Actor_TransferRequest)]
 	[Message(OuterMessage.Actor_TransferRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class Actor_TransferRequest: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class Actor_TransferRequest: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int MapIndex { get; set; }
 		public int MapIndex { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.Actor_TransferResponse)]
 	[Message(OuterMessage.Actor_TransferResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class Actor_TransferResponse: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class Actor_TransferResponse: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -89,163 +111,205 @@ namespace ET
 	[ResponseType(nameof(G2C_EnterMap))]
 	[ResponseType(nameof(G2C_EnterMap))]
 	[Message(OuterMessage.C2G_EnterMap)]
 	[Message(OuterMessage.C2G_EnterMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_EnterMap: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_EnterMap: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_EnterMap)]
 	[Message(OuterMessage.G2C_EnterMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_EnterMap: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_EnterMap: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 // 自己unitId
 // 自己unitId
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long MyId { get; set; }
 		public long MyId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.MoveInfo)]
 	[Message(OuterMessage.MoveInfo)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class MoveInfo: ProtoObject
+	[MemoryPackable]
+	public partial class MoveInfo: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
 		public List<Unity.Mathematics.float3> Points { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public int TurnSpeed { get; set; }
 		public int TurnSpeed { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.UnitInfo)]
 	[Message(OuterMessage.UnitInfo)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class UnitInfo: ProtoObject
+	[MemoryPackable]
+	public partial class UnitInfo: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long UnitId { get; set; }
 		public long UnitId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int ConfigId { get; set; }
 		public int ConfigId { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public Unity.Mathematics.float3 Forward { get; set; }
 		public Unity.Mathematics.float3 Forward { get; set; }
 
 
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[ProtoMember(6)]
 		[ProtoMember(6)]
+		[MemoryPackOrder(5)]
 		public Dictionary<int, long> KV { get; set; }
 		public Dictionary<int, long> KV { get; set; }
 		[ProtoMember(7)]
 		[ProtoMember(7)]
+		[MemoryPackOrder(6)]
 		public MoveInfo MoveInfo { get; set; }
 		public MoveInfo MoveInfo { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_CreateUnits)]
 	[Message(OuterMessage.M2C_CreateUnits)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_CreateUnits: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_CreateUnits: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<UnitInfo> Units { get; set; }
 		public List<UnitInfo> Units { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_CreateMyUnit)]
 	[Message(OuterMessage.M2C_CreateMyUnit)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_CreateMyUnit: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_CreateMyUnit: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public UnitInfo Unit { get; set; }
 		public UnitInfo Unit { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_StartSceneChange)]
 	[Message(OuterMessage.M2C_StartSceneChange)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_StartSceneChange: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_StartSceneChange: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long SceneInstanceId { get; set; }
 		public long SceneInstanceId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string SceneName { get; set; }
 		public string SceneName { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_RemoveUnits)]
 	[Message(OuterMessage.M2C_RemoveUnits)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_RemoveUnits: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_RemoveUnits: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<long> Units { get; set; }
 		public List<long> Units { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_PathfindingResult)]
 	[Message(OuterMessage.C2M_PathfindingResult)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_PathfindingResult: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_PathfindingResult: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_Stop)]
 	[Message(OuterMessage.C2M_Stop)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_Stop: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_Stop: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_PathfindingResult)]
 	[Message(OuterMessage.M2C_PathfindingResult)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_PathfindingResult: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_PathfindingResult: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
 		public List<Unity.Mathematics.float3> Points { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_Stop)]
 	[Message(OuterMessage.M2C_Stop)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_Stop: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_Stop: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 
 
 	}
 	}
@@ -253,64 +317,80 @@ namespace ET
 	[ResponseType(nameof(G2C_Ping))]
 	[ResponseType(nameof(G2C_Ping))]
 	[Message(OuterMessage.C2G_Ping)]
 	[Message(OuterMessage.C2G_Ping)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_Ping: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_Ping: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Ping)]
 	[Message(OuterMessage.G2C_Ping)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Ping: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_Ping: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long Time { get; set; }
 		public long Time { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Test)]
 	[Message(OuterMessage.G2C_Test)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Test: ProtoObject, IMessage
+	[MemoryPackable]
+	public partial class G2C_Test: MessageObject, IMessage
 	{
 	{
 	}
 	}
 
 
 	[ResponseType(nameof(M2C_Reload))]
 	[ResponseType(nameof(M2C_Reload))]
 	[Message(OuterMessage.C2M_Reload)]
 	[Message(OuterMessage.C2M_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_Reload: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2M_Reload: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Password { get; set; }
 		public string Password { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_Reload)]
 	[Message(OuterMessage.M2C_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_Reload: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class M2C_Reload: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -318,39 +398,50 @@ namespace ET
 	[ResponseType(nameof(R2C_Login))]
 	[ResponseType(nameof(R2C_Login))]
 	[Message(OuterMessage.C2R_Login)]
 	[Message(OuterMessage.C2R_Login)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2R_Login: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2R_Login: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Password { get; set; }
 		public string Password { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.R2C_Login)]
 	[Message(OuterMessage.R2C_Login)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class R2C_Login: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class R2C_Login: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(6)]
 		[ProtoMember(6)]
+		[MemoryPackOrder(5)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
@@ -358,42 +449,53 @@ namespace ET
 	[ResponseType(nameof(G2C_LoginGate))]
 	[ResponseType(nameof(G2C_LoginGate))]
 	[Message(OuterMessage.C2G_LoginGate)]
 	[Message(OuterMessage.C2G_LoginGate)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_LoginGate: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_LoginGate: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_LoginGate)]
 	[Message(OuterMessage.G2C_LoginGate)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_LoginGate: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_LoginGate: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long PlayerId { get; set; }
 		public long PlayerId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_TestHotfixMessage)]
 	[Message(OuterMessage.G2C_TestHotfixMessage)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_TestHotfixMessage: ProtoObject, IMessage
+	[MemoryPackable]
+	public partial class G2C_TestHotfixMessage: MessageObject, IMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public string Info { get; set; }
 		public string Info { get; set; }
 
 
 	}
 	}
@@ -401,54 +503,68 @@ namespace ET
 	[ResponseType(nameof(M2C_TestRobotCase))]
 	[ResponseType(nameof(M2C_TestRobotCase))]
 	[Message(OuterMessage.C2M_TestRobotCase)]
 	[Message(OuterMessage.C2M_TestRobotCase)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRobotCase: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TestRobotCase: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestRobotCase)]
 	[Message(OuterMessage.M2C_TestRobotCase)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestRobotCase: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class M2C_TestRobotCase: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_TestRobotCase2)]
 	[Message(OuterMessage.C2M_TestRobotCase2)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRobotCase2: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestRobotCase2)]
 	[Message(OuterMessage.M2C_TestRobotCase2)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestRobotCase2: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class M2C_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
@@ -456,24 +572,30 @@ namespace ET
 	[ResponseType(nameof(M2C_TransferMap))]
 	[ResponseType(nameof(M2C_TransferMap))]
 	[Message(OuterMessage.C2M_TransferMap)]
 	[Message(OuterMessage.C2M_TransferMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TransferMap: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TransferMap: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TransferMap)]
 	[Message(OuterMessage.M2C_TransferMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TransferMap: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class M2C_TransferMap: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -481,24 +603,30 @@ namespace ET
 	[ResponseType(nameof(G2C_Benchmark))]
 	[ResponseType(nameof(G2C_Benchmark))]
 	[Message(OuterMessage.C2G_Benchmark)]
 	[Message(OuterMessage.C2G_Benchmark)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_Benchmark: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_Benchmark: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Benchmark)]
 	[Message(OuterMessage.G2C_Benchmark)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Benchmark: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_Benchmark: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}

+ 122 - 23
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/InnerMessage_S_20001.cs

@@ -1,5 +1,6 @@
 using ET;
 using ET;
 using ProtoBuf;
 using ProtoBuf;
+using MemoryPack;
 using System.Collections.Generic;
 using System.Collections.Generic;
 namespace ET
 namespace ET
 {
 {
@@ -7,15 +8,19 @@ namespace ET
 	[ResponseType(nameof(ObjectQueryResponse))]
 	[ResponseType(nameof(ObjectQueryResponse))]
 	[Message(InnerMessage.ObjectQueryRequest)]
 	[Message(InnerMessage.ObjectQueryRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectQueryRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectQueryRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
@@ -23,24 +28,30 @@ namespace ET
 	[ResponseType(nameof(A2M_Reload))]
 	[ResponseType(nameof(A2M_Reload))]
 	[Message(InnerMessage.M2A_Reload)]
 	[Message(InnerMessage.M2A_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2A_Reload: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class M2A_Reload: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.A2M_Reload)]
 	[Message(InnerMessage.A2M_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class A2M_Reload: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class A2M_Reload: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -48,30 +59,38 @@ namespace ET
 	[ResponseType(nameof(G2G_LockResponse))]
 	[ResponseType(nameof(G2G_LockResponse))]
 	[Message(InnerMessage.G2G_LockRequest)]
 	[Message(InnerMessage.G2G_LockRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class G2G_LockRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2G_LockResponse)]
 	[Message(InnerMessage.G2G_LockResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class G2G_LockResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -79,30 +98,38 @@ namespace ET
 	[ResponseType(nameof(G2G_LockReleaseResponse))]
 	[ResponseType(nameof(G2G_LockReleaseResponse))]
 	[Message(InnerMessage.G2G_LockReleaseRequest)]
 	[Message(InnerMessage.G2G_LockReleaseRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockReleaseRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class G2G_LockReleaseRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2G_LockReleaseResponse)]
 	[Message(InnerMessage.G2G_LockReleaseResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2G_LockReleaseResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class G2G_LockReleaseResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -110,33 +137,42 @@ namespace ET
 	[ResponseType(nameof(ObjectAddResponse))]
 	[ResponseType(nameof(ObjectAddResponse))]
 	[Message(InnerMessage.ObjectAddRequest)]
 	[Message(InnerMessage.ObjectAddRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectAddRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectAddRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectAddResponse)]
 	[Message(InnerMessage.ObjectAddResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectAddResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectAddResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -144,36 +180,46 @@ namespace ET
 	[ResponseType(nameof(ObjectLockResponse))]
 	[ResponseType(nameof(ObjectLockResponse))]
 	[Message(InnerMessage.ObjectLockRequest)]
 	[Message(InnerMessage.ObjectLockRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectLockRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectLockRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public int Time { get; set; }
 		public int Time { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectLockResponse)]
 	[Message(InnerMessage.ObjectLockResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectLockResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectLockResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -181,36 +227,46 @@ namespace ET
 	[ResponseType(nameof(ObjectUnLockResponse))]
 	[ResponseType(nameof(ObjectUnLockResponse))]
 	[Message(InnerMessage.ObjectUnLockRequest)]
 	[Message(InnerMessage.ObjectUnLockRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectUnLockRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectUnLockRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long OldInstanceId { get; set; }
 		public long OldInstanceId { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectUnLockResponse)]
 	[Message(InnerMessage.ObjectUnLockResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectUnLockResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectUnLockResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -218,30 +274,38 @@ namespace ET
 	[ResponseType(nameof(ObjectRemoveResponse))]
 	[ResponseType(nameof(ObjectRemoveResponse))]
 	[Message(InnerMessage.ObjectRemoveRequest)]
 	[Message(InnerMessage.ObjectRemoveRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectRemoveRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectRemoveRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectRemoveResponse)]
 	[Message(InnerMessage.ObjectRemoveResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectRemoveResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectRemoveResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -249,36 +313,46 @@ namespace ET
 	[ResponseType(nameof(ObjectGetResponse))]
 	[ResponseType(nameof(ObjectGetResponse))]
 	[Message(InnerMessage.ObjectGetRequest)]
 	[Message(InnerMessage.ObjectGetRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectGetRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class ObjectGetRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectGetResponse)]
 	[Message(InnerMessage.ObjectGetResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectGetResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectGetResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long InstanceId { get; set; }
 		public long InstanceId { get; set; }
 
 
 	}
 	}
@@ -286,60 +360,76 @@ namespace ET
 	[ResponseType(nameof(G2R_GetLoginKey))]
 	[ResponseType(nameof(G2R_GetLoginKey))]
 	[Message(InnerMessage.R2G_GetLoginKey)]
 	[Message(InnerMessage.R2G_GetLoginKey)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class R2G_GetLoginKey: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class R2G_GetLoginKey: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2R_GetLoginKey)]
 	[Message(InnerMessage.G2R_GetLoginKey)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2R_GetLoginKey: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class G2R_GetLoginKey: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.G2M_SessionDisconnect)]
 	[Message(InnerMessage.G2M_SessionDisconnect)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2M_SessionDisconnect: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class G2M_SessionDisconnect: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.ObjectQueryResponse)]
 	[Message(InnerMessage.ObjectQueryResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class ObjectQueryResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class ObjectQueryResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public byte[] Entity { get; set; }
 		public byte[] Entity { get; set; }
 
 
 	}
 	}
@@ -347,33 +437,42 @@ namespace ET
 	[ResponseType(nameof(M2M_UnitTransferResponse))]
 	[ResponseType(nameof(M2M_UnitTransferResponse))]
 	[Message(InnerMessage.M2M_UnitTransferRequest)]
 	[Message(InnerMessage.M2M_UnitTransferRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2M_UnitTransferRequest: ProtoObject, IActorRequest
+	[MemoryPackable]
+	public partial class M2M_UnitTransferRequest: MessageObject, IActorRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long OldInstanceId { get; set; }
 		public long OldInstanceId { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public byte[] Unit { get; set; }
 		public byte[] Unit { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public List<byte[]> Entitys { get; set; }
 		public List<byte[]> Entitys { get; set; }
 
 
 	}
 	}
 
 
 	[Message(InnerMessage.M2M_UnitTransferResponse)]
 	[Message(InnerMessage.M2M_UnitTransferResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2M_UnitTransferResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class M2M_UnitTransferResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}

+ 164 - 36
Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/OuterMessage_C_10001.cs

@@ -1,28 +1,35 @@
 using ET;
 using ET;
 using ProtoBuf;
 using ProtoBuf;
+using MemoryPack;
 using System.Collections.Generic;
 using System.Collections.Generic;
 namespace ET
 namespace ET
 {
 {
 	[Message(OuterMessage.HttpGetRouterResponse)]
 	[Message(OuterMessage.HttpGetRouterResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class HttpGetRouterResponse: ProtoObject
+	[MemoryPackable]
+	public partial class HttpGetRouterResponse: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<string> Realms { get; set; }
 		public List<string> Realms { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public List<string> Routers { get; set; }
 		public List<string> Routers { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.RouterSync)]
 	[Message(OuterMessage.RouterSync)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class RouterSync: ProtoObject
+	[MemoryPackable]
+	public partial class RouterSync: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public uint ConnectId { get; set; }
 		public uint ConnectId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 	}
 	}
@@ -30,30 +37,38 @@ namespace ET
 	[ResponseType(nameof(M2C_TestResponse))]
 	[ResponseType(nameof(M2C_TestResponse))]
 	[Message(OuterMessage.C2M_TestRequest)]
 	[Message(OuterMessage.C2M_TestRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRequest: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TestRequest: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string request { get; set; }
 		public string request { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestResponse)]
 	[Message(OuterMessage.M2C_TestResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestResponse: ProtoObject, IActorResponse
+	[MemoryPackable]
+	public partial class M2C_TestResponse: MessageObject, IActorResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public string response { get; set; }
 		public string response { get; set; }
 
 
 	}
 	}
@@ -61,27 +76,34 @@ namespace ET
 	[ResponseType(nameof(Actor_TransferResponse))]
 	[ResponseType(nameof(Actor_TransferResponse))]
 	[Message(OuterMessage.Actor_TransferRequest)]
 	[Message(OuterMessage.Actor_TransferRequest)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class Actor_TransferRequest: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class Actor_TransferRequest: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int MapIndex { get; set; }
 		public int MapIndex { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.Actor_TransferResponse)]
 	[Message(OuterMessage.Actor_TransferResponse)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class Actor_TransferResponse: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class Actor_TransferResponse: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -89,163 +111,205 @@ namespace ET
 	[ResponseType(nameof(G2C_EnterMap))]
 	[ResponseType(nameof(G2C_EnterMap))]
 	[Message(OuterMessage.C2G_EnterMap)]
 	[Message(OuterMessage.C2G_EnterMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_EnterMap: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_EnterMap: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_EnterMap)]
 	[Message(OuterMessage.G2C_EnterMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_EnterMap: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_EnterMap: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 // 自己unitId
 // 自己unitId
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long MyId { get; set; }
 		public long MyId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.MoveInfo)]
 	[Message(OuterMessage.MoveInfo)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class MoveInfo: ProtoObject
+	[MemoryPackable]
+	public partial class MoveInfo: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
 		public List<Unity.Mathematics.float3> Points { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public int TurnSpeed { get; set; }
 		public int TurnSpeed { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.UnitInfo)]
 	[Message(OuterMessage.UnitInfo)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class UnitInfo: ProtoObject
+	[MemoryPackable]
+	public partial class UnitInfo: MessageObject
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long UnitId { get; set; }
 		public long UnitId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int ConfigId { get; set; }
 		public int ConfigId { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public int Type { get; set; }
 		public int Type { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public Unity.Mathematics.float3 Forward { get; set; }
 		public Unity.Mathematics.float3 Forward { get; set; }
 
 
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[ProtoMember(6)]
 		[ProtoMember(6)]
+		[MemoryPackOrder(5)]
 		public Dictionary<int, long> KV { get; set; }
 		public Dictionary<int, long> KV { get; set; }
 		[ProtoMember(7)]
 		[ProtoMember(7)]
+		[MemoryPackOrder(6)]
 		public MoveInfo MoveInfo { get; set; }
 		public MoveInfo MoveInfo { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_CreateUnits)]
 	[Message(OuterMessage.M2C_CreateUnits)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_CreateUnits: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_CreateUnits: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<UnitInfo> Units { get; set; }
 		public List<UnitInfo> Units { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_CreateMyUnit)]
 	[Message(OuterMessage.M2C_CreateMyUnit)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_CreateMyUnit: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_CreateMyUnit: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public UnitInfo Unit { get; set; }
 		public UnitInfo Unit { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_StartSceneChange)]
 	[Message(OuterMessage.M2C_StartSceneChange)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_StartSceneChange: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_StartSceneChange: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long SceneInstanceId { get; set; }
 		public long SceneInstanceId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string SceneName { get; set; }
 		public string SceneName { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_RemoveUnits)]
 	[Message(OuterMessage.M2C_RemoveUnits)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_RemoveUnits: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_RemoveUnits: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public List<long> Units { get; set; }
 		public List<long> Units { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_PathfindingResult)]
 	[Message(OuterMessage.C2M_PathfindingResult)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_PathfindingResult: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_PathfindingResult: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_Stop)]
 	[Message(OuterMessage.C2M_Stop)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_Stop: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_Stop: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_PathfindingResult)]
 	[Message(OuterMessage.M2C_PathfindingResult)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_PathfindingResult: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_PathfindingResult: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
 		public List<Unity.Mathematics.float3> Points { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_Stop)]
 	[Message(OuterMessage.M2C_Stop)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_Stop: ProtoObject, IActorMessage
+	[MemoryPackable]
+	public partial class M2C_Stop: MessageObject, IActorMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Id { get; set; }
 		public long Id { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public Unity.Mathematics.float3 Position { get; set; }
 		public Unity.Mathematics.float3 Position { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 		public Unity.Mathematics.quaternion Rotation { get; set; }
 
 
 	}
 	}
@@ -253,64 +317,80 @@ namespace ET
 	[ResponseType(nameof(G2C_Ping))]
 	[ResponseType(nameof(G2C_Ping))]
 	[Message(OuterMessage.C2G_Ping)]
 	[Message(OuterMessage.C2G_Ping)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_Ping: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_Ping: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Ping)]
 	[Message(OuterMessage.G2C_Ping)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Ping: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_Ping: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long Time { get; set; }
 		public long Time { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Test)]
 	[Message(OuterMessage.G2C_Test)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Test: ProtoObject, IMessage
+	[MemoryPackable]
+	public partial class G2C_Test: MessageObject, IMessage
 	{
 	{
 	}
 	}
 
 
 	[ResponseType(nameof(M2C_Reload))]
 	[ResponseType(nameof(M2C_Reload))]
 	[Message(OuterMessage.C2M_Reload)]
 	[Message(OuterMessage.C2M_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_Reload: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2M_Reload: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Password { get; set; }
 		public string Password { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_Reload)]
 	[Message(OuterMessage.M2C_Reload)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_Reload: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class M2C_Reload: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -318,39 +398,50 @@ namespace ET
 	[ResponseType(nameof(R2C_Login))]
 	[ResponseType(nameof(R2C_Login))]
 	[Message(OuterMessage.C2R_Login)]
 	[Message(OuterMessage.C2R_Login)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2R_Login: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2R_Login: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public string Account { get; set; }
 		public string Account { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Password { get; set; }
 		public string Password { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.R2C_Login)]
 	[Message(OuterMessage.R2C_Login)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class R2C_Login: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class R2C_Login: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public string Address { get; set; }
 		public string Address { get; set; }
 
 
 		[ProtoMember(5)]
 		[ProtoMember(5)]
+		[MemoryPackOrder(4)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(6)]
 		[ProtoMember(6)]
+		[MemoryPackOrder(5)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
@@ -358,42 +449,53 @@ namespace ET
 	[ResponseType(nameof(G2C_LoginGate))]
 	[ResponseType(nameof(G2C_LoginGate))]
 	[Message(OuterMessage.C2G_LoginGate)]
 	[Message(OuterMessage.C2G_LoginGate)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_LoginGate: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_LoginGate: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public long Key { get; set; }
 		public long Key { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public long GateId { get; set; }
 		public long GateId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_LoginGate)]
 	[Message(OuterMessage.G2C_LoginGate)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_LoginGate: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_LoginGate: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public long PlayerId { get; set; }
 		public long PlayerId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_TestHotfixMessage)]
 	[Message(OuterMessage.G2C_TestHotfixMessage)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_TestHotfixMessage: ProtoObject, IMessage
+	[MemoryPackable]
+	public partial class G2C_TestHotfixMessage: MessageObject, IMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public string Info { get; set; }
 		public string Info { get; set; }
 
 
 	}
 	}
@@ -401,54 +503,68 @@ namespace ET
 	[ResponseType(nameof(M2C_TestRobotCase))]
 	[ResponseType(nameof(M2C_TestRobotCase))]
 	[Message(OuterMessage.C2M_TestRobotCase)]
 	[Message(OuterMessage.C2M_TestRobotCase)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRobotCase: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TestRobotCase: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestRobotCase)]
 	[Message(OuterMessage.M2C_TestRobotCase)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestRobotCase: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class M2C_TestRobotCase: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 		[ProtoMember(4)]
 		[ProtoMember(4)]
+		[MemoryPackOrder(3)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.C2M_TestRobotCase2)]
 	[Message(OuterMessage.C2M_TestRobotCase2)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TestRobotCase2: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class C2M_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TestRobotCase2)]
 	[Message(OuterMessage.M2C_TestRobotCase2)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TestRobotCase2: ProtoObject, IActorLocationMessage
+	[MemoryPackable]
+	public partial class M2C_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int N { get; set; }
 		public int N { get; set; }
 
 
 	}
 	}
@@ -456,24 +572,30 @@ namespace ET
 	[ResponseType(nameof(M2C_TransferMap))]
 	[ResponseType(nameof(M2C_TransferMap))]
 	[Message(OuterMessage.C2M_TransferMap)]
 	[Message(OuterMessage.C2M_TransferMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2M_TransferMap: ProtoObject, IActorLocationRequest
+	[MemoryPackable]
+	public partial class C2M_TransferMap: MessageObject, IActorLocationRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.M2C_TransferMap)]
 	[Message(OuterMessage.M2C_TransferMap)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class M2C_TransferMap: ProtoObject, IActorLocationResponse
+	[MemoryPackable]
+	public partial class M2C_TransferMap: MessageObject, IActorLocationResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}
@@ -481,24 +603,30 @@ namespace ET
 	[ResponseType(nameof(G2C_Benchmark))]
 	[ResponseType(nameof(G2C_Benchmark))]
 	[Message(OuterMessage.C2G_Benchmark)]
 	[Message(OuterMessage.C2G_Benchmark)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class C2G_Benchmark: ProtoObject, IRequest
+	[MemoryPackable]
+	public partial class C2G_Benchmark: MessageObject, IRequest
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 	}
 	}
 
 
 	[Message(OuterMessage.G2C_Benchmark)]
 	[Message(OuterMessage.G2C_Benchmark)]
 	[ProtoContract]
 	[ProtoContract]
-	public partial class G2C_Benchmark: ProtoObject, IResponse
+	[MemoryPackable]
+	public partial class G2C_Benchmark: MessageObject, IResponse
 	{
 	{
 		[ProtoMember(1)]
 		[ProtoMember(1)]
+		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
 		public int RpcId { get; set; }
 
 
 		[ProtoMember(2)]
 		[ProtoMember(2)]
+		[MemoryPackOrder(1)]
 		public int Error { get; set; }
 		public int Error { get; set; }
 
 
 		[ProtoMember(3)]
 		[ProtoMember(3)]
+		[MemoryPackOrder(2)]
 		public string Message { get; set; }
 		public string Message { get; set; }
 
 
 	}
 	}

+ 6 - 2
Unity/Assets/Scripts/Codes/Model/Share/Entry.cs

@@ -1,4 +1,7 @@
-namespace ET
+using System.IO;
+using MemoryPack;
+
+namespace ET
 {
 {
     namespace EventType
     namespace EventType
     {
     {
@@ -33,7 +36,8 @@
             
             
             MongoHelper.Init();
             MongoHelper.Init();
             ProtobufHelper.Init();
             ProtobufHelper.Init();
-            
+            MemoryPackHelper.Init();
+
             Game.AddSingleton<NetServices>();
             Game.AddSingleton<NetServices>();
             Game.AddSingleton<Root>();
             Game.AddSingleton<Root>();
             Game.AddSingleton<LSSington>();
             Game.AddSingleton<LSSington>();

+ 1 - 1
Unity/Assets/Scripts/Codes/Model/Share/Module/Message/AMHandler.cs

@@ -11,7 +11,7 @@ namespace ET
             Message message = msg as Message;
             Message message = msg as Message;
             if (message == null)
             if (message == null)
             {
             {
-                Log.Error($"消息类型转换错误: {msg.GetType().Name} to {typeof (Message).Name}");
+                Log.Error($"消息类型转换错误: {msg.GetType().FullName} to {typeof (Message).Name}");
                 return;
                 return;
             }
             }
 
 

+ 1 - 1
Unity/Assets/Scripts/Codes/Model/Share/Module/Message/OpcodeTypeComponent.cs

@@ -77,7 +77,7 @@ namespace ET
         {
         {
             if (!self.requestResponse.TryGetValue(request, out Type response))
             if (!self.requestResponse.TryGetValue(request, out Type response))
             {
             {
-                throw new Exception($"not found response type, request type: {request.GetType().Name}");
+                throw new Exception($"not found response type, request type: {request.GetType().FullName}");
             }
             }
             return response;
             return response;
         }
         }

+ 1 - 1
Unity/Assets/Scripts/Codes/Model/Share/Module/Message/Session.cs

@@ -126,7 +126,7 @@ namespace ET
         {
         {
             self.LastSendTime = TimeHelper.ClientNow();
             self.LastSendTime = TimeHelper.ClientNow();
             OpcodeHelper.LogMsg(self.DomainScene(), message);
             OpcodeHelper.LogMsg(self.DomainScene(), message);
-            NetServices.Instance.SendMessage(self.ServiceId, self.Id, actorId, message);
+            NetServices.Instance.SendMessage(self.ServiceId, self.Id, actorId, message as MessageObject);
         }
         }
     }
     }
 
 

+ 4 - 5
Unity/Assets/Scripts/Codes/Model/Unity.Model.Codes.asmdef

@@ -4,11 +4,10 @@
     "references": [
     "references": [
         "Unity.ThirdParty",
         "Unity.ThirdParty",
         "Unity.Core",
         "Unity.Core",
-        "Unity.Mathematics"
-    ],
-    "includePlatforms": [
-        "Editor"
+        "Unity.Mathematics",
+        "MemoryPack"
     ],
     ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,
@@ -18,5 +17,5 @@
         "ENABLE_CODES"
         "ENABLE_CODES"
     ],
     ],
     "versionDefines": [],
     "versionDefines": [],
-    "noEngineReferences": true
+    "noEngineReferences": false
 }
 }

+ 16 - 1
Unity/Assets/Scripts/Codes/ModelView/Client/Demo/Unit/GameObjectComponent.cs

@@ -5,6 +5,21 @@ namespace ET.Client
     [ComponentOf(typeof(Unit))]
     [ComponentOf(typeof(Unit))]
     public class GameObjectComponent: Entity, IAwake, IDestroy
     public class GameObjectComponent: Entity, IAwake, IDestroy
     {
     {
-        public GameObject GameObject { get; set; }
+        private GameObject gameObject;
+
+        public GameObject GameObject
+        {
+            get
+            {
+                return this.gameObject;
+            }
+            set
+            {
+                this.gameObject = value;
+                this.Transform = value.transform;
+            }
+        }
+
+        public Transform Transform { get; private set; }
     }
     }
 }
 }

+ 1 - 3
Unity/Assets/Scripts/Codes/ModelView/Unity.ModelView.Codes.asmdef

@@ -8,9 +8,7 @@
         "Unity.Mathematics",
         "Unity.Mathematics",
         "Unity.Loader"
         "Unity.Loader"
     ],
     ],
-    "includePlatforms": [
-        "Editor"
-    ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,

+ 2 - 2
Unity/Assets/Scripts/Core/Module/Config/ConfigComponent.cs

@@ -38,7 +38,7 @@ namespace ET
 			
 			
 			byte[] oneConfigBytes = EventSystem.Instance.Invoke<GetOneConfigBytes, byte[]>(new GetOneConfigBytes() {ConfigName = configType.FullName});
 			byte[] oneConfigBytes = EventSystem.Instance.Invoke<GetOneConfigBytes, byte[]>(new GetOneConfigBytes() {ConfigName = configType.FullName});
 
 
-			object category = SerializeHelper.Deserialize(configType, oneConfigBytes, 0, oneConfigBytes.Length);
+			object category = ProtobufHelper.Deserialize(configType, oneConfigBytes, 0, oneConfigBytes.Length);
 			ISingleton singleton = category as ISingleton;
 			ISingleton singleton = category as ISingleton;
 			singleton.Register();
 			singleton.Register();
 			
 			
@@ -77,7 +77,7 @@ namespace ET
 		
 		
 		private void LoadOneInThread(Type configType, byte[] oneConfigBytes)
 		private void LoadOneInThread(Type configType, byte[] oneConfigBytes)
 		{
 		{
-			object category = SerializeHelper.Deserialize(configType, oneConfigBytes, 0, oneConfigBytes.Length);
+			object category = ProtobufHelper.Deserialize(configType, oneConfigBytes, 0, oneConfigBytes.Length);
 			
 			
 			lock (this)
 			lock (this)
 			{
 			{

+ 20 - 20
Unity/Assets/Scripts/Core/Module/Entity/Entity.cs

@@ -173,18 +173,18 @@ namespace ET
             {
             {
                 if (value == null)
                 if (value == null)
                 {
                 {
-                    throw new Exception($"cant set parent null: {this.GetType().Name}");
+                    throw new Exception($"cant set parent null: {this.GetType().FullName}");
                 }
                 }
 
 
                 if (value == this)
                 if (value == this)
                 {
                 {
-                    throw new Exception($"cant set parent self: {this.GetType().Name}");
+                    throw new Exception($"cant set parent self: {this.GetType().FullName}");
                 }
                 }
 
 
                 // 严格限制parent必须要有domain,也就是说parent必须在数据树上面
                 // 严格限制parent必须要有domain,也就是说parent必须在数据树上面
                 if (value.Domain == null)
                 if (value.Domain == null)
                 {
                 {
-                    throw new Exception($"cant set parent because parent domain is null: {this.GetType().Name} {value.GetType().Name}");
+                    throw new Exception($"cant set parent because parent domain is null: {this.GetType().FullName} {value.GetType().FullName}");
                 }
                 }
 
 
                 if (this.parent != null) // 之前有parent
                 if (this.parent != null) // 之前有parent
@@ -192,7 +192,7 @@ namespace ET
                     // parent相同,不设置
                     // parent相同,不设置
                     if (this.parent == value)
                     if (this.parent == value)
                     {
                     {
-                        Log.Error($"重复设置了Parent: {this.GetType().Name} parent: {this.parent.GetType().Name}");
+                        Log.Error($"重复设置了Parent: {this.GetType().FullName} parent: {this.parent.GetType().FullName}");
                         return;
                         return;
                     }
                     }
 
 
@@ -229,18 +229,18 @@ namespace ET
             {
             {
                 if (value == null)
                 if (value == null)
                 {
                 {
-                    throw new Exception($"cant set parent null: {this.GetType().Name}");
+                    throw new Exception($"cant set parent null: {this.GetType().FullName}");
                 }
                 }
 
 
                 if (value == this)
                 if (value == this)
                 {
                 {
-                    throw new Exception($"cant set parent self: {this.GetType().Name}");
+                    throw new Exception($"cant set parent self: {this.GetType().FullName}");
                 }
                 }
 
 
                 // 严格限制parent必须要有domain,也就是说parent必须在数据树上面
                 // 严格限制parent必须要有domain,也就是说parent必须在数据树上面
                 if (value.Domain == null)
                 if (value.Domain == null)
                 {
                 {
-                    throw new Exception($"cant set parent because parent domain is null: {this.GetType().Name} {value.GetType().Name}");
+                    throw new Exception($"cant set parent because parent domain is null: {this.GetType().FullName} {value.GetType().FullName}");
                 }
                 }
 
 
                 if (this.parent != null) // 之前有parent
                 if (this.parent != null) // 之前有parent
@@ -248,7 +248,7 @@ namespace ET
                     // parent相同,不设置
                     // parent相同,不设置
                     if (this.parent == value)
                     if (this.parent == value)
                     {
                     {
-                        Log.Error($"重复设置了Parent: {this.GetType().Name} parent: {this.parent.GetType().Name}");
+                        Log.Error($"重复设置了Parent: {this.GetType().FullName} parent: {this.parent.GetType().FullName}");
                         return;
                         return;
                     }
                     }
 
 
@@ -287,7 +287,7 @@ namespace ET
             {
             {
                 if (value == null)
                 if (value == null)
                 {
                 {
-                    throw new Exception($"domain cant set null: {this.GetType().Name}");
+                    throw new Exception($"domain cant set null: {this.GetType().FullName}");
                 }
                 }
 
 
                 if (this.domain == value)
                 if (this.domain == value)
@@ -313,7 +313,7 @@ namespace ET
                         foreach (Entity component in this.componentsDB)
                         foreach (Entity component in this.componentsDB)
                         {
                         {
                             component.IsComponent = true;
                             component.IsComponent = true;
-                            this.Components.Add(component.GetType().Name, component);
+                            this.Components.Add(component.GetType().FullName, component);
                             component.parent = this;
                             component.parent = this;
                         }
                         }
                     }
                     }
@@ -517,7 +517,7 @@ namespace ET
 
 
         private void AddToComponents(Entity component)
         private void AddToComponents(Entity component)
         {
         {
-            this.Components.Add(component.GetType().Name, component);
+            this.Components.Add(component.GetType().FullName, component);
         }
         }
 
 
         private void RemoveFromComponents(Entity component)
         private void RemoveFromComponents(Entity component)
@@ -527,7 +527,7 @@ namespace ET
                 return;
                 return;
             }
             }
 
 
-            this.components.Remove(component.GetType().Name);
+            this.components.Remove(component.GetType().FullName);
 
 
             if (this.components.Count == 0)
             if (this.components.Count == 0)
             {
             {
@@ -638,7 +638,7 @@ namespace ET
             }
             }
 
 
             Entity component;
             Entity component;
-            if (!this.components.TryGetValue(typeof (K).Name, out component))
+            if (!this.components.TryGetValue(typeof (K).FullName, out component))
             {
             {
                 return default;
                 return default;
             }
             }
@@ -660,7 +660,7 @@ namespace ET
             }
             }
 
 
             Entity component;
             Entity component;
-            if (!this.components.TryGetValue(type.Name, out component))
+            if (!this.components.TryGetValue(type.FullName, out component))
             {
             {
                 return null;
                 return null;
             }
             }
@@ -696,7 +696,7 @@ namespace ET
         public Entity AddComponent(Entity component)
         public Entity AddComponent(Entity component)
         {
         {
             Type type = component.GetType();
             Type type = component.GetType();
-            if (this.components != null && this.components.ContainsKey(type.Name))
+            if (this.components != null && this.components.ContainsKey(type.FullName))
             {
             {
                 throw new Exception($"entity already has component: {type.FullName}");
                 throw new Exception($"entity already has component: {type.FullName}");
             }
             }
@@ -713,7 +713,7 @@ namespace ET
 
 
         public Entity AddComponent(Type type, bool isFromPool = false)
         public Entity AddComponent(Type type, bool isFromPool = false)
         {
         {
-            if (this.components != null && this.components.ContainsKey(type.Name))
+            if (this.components != null && this.components.ContainsKey(type.FullName))
             {
             {
                 throw new Exception($"entity already has component: {type.FullName}");
                 throw new Exception($"entity already has component: {type.FullName}");
             }
             }
@@ -734,7 +734,7 @@ namespace ET
         public K AddComponentWithId<K>(long id, bool isFromPool = false) where K : Entity, IAwake, new()
         public K AddComponentWithId<K>(long id, bool isFromPool = false) where K : Entity, IAwake, new()
         {
         {
             Type type = typeof (K);
             Type type = typeof (K);
-            if (this.components != null && this.components.ContainsKey(type.Name))
+            if (this.components != null && this.components.ContainsKey(type.FullName))
             {
             {
                 throw new Exception($"entity already has component: {type.FullName}");
                 throw new Exception($"entity already has component: {type.FullName}");
             }
             }
@@ -755,7 +755,7 @@ namespace ET
         public K AddComponentWithId<K, P1>(long id, P1 p1, bool isFromPool = false) where K : Entity, IAwake<P1>, new()
         public K AddComponentWithId<K, P1>(long id, P1 p1, bool isFromPool = false) where K : Entity, IAwake<P1>, new()
         {
         {
             Type type = typeof (K);
             Type type = typeof (K);
-            if (this.components != null && this.components.ContainsKey(type.Name))
+            if (this.components != null && this.components.ContainsKey(type.FullName))
             {
             {
                 throw new Exception($"entity already has component: {type.FullName}");
                 throw new Exception($"entity already has component: {type.FullName}");
             }
             }
@@ -776,7 +776,7 @@ namespace ET
         public K AddComponentWithId<K, P1, P2>(long id, P1 p1, P2 p2, bool isFromPool = false) where K : Entity, IAwake<P1, P2>, new()
         public K AddComponentWithId<K, P1, P2>(long id, P1 p1, P2 p2, bool isFromPool = false) where K : Entity, IAwake<P1, P2>, new()
         {
         {
             Type type = typeof (K);
             Type type = typeof (K);
-            if (this.components != null && this.components.ContainsKey(type.Name))
+            if (this.components != null && this.components.ContainsKey(type.FullName))
             {
             {
                 throw new Exception($"entity already has component: {type.FullName}");
                 throw new Exception($"entity already has component: {type.FullName}");
             }
             }
@@ -797,7 +797,7 @@ namespace ET
         public K AddComponentWithId<K, P1, P2, P3>(long id, P1 p1, P2 p2, P3 p3, bool isFromPool = false) where K : Entity, IAwake<P1, P2, P3>, new()
         public K AddComponentWithId<K, P1, P2, P3>(long id, P1 p1, P2 p2, P3 p3, bool isFromPool = false) where K : Entity, IAwake<P1, P2, P3>, new()
         {
         {
             Type type = typeof (K);
             Type type = typeof (K);
-            if (this.components != null && this.components.ContainsKey(type.Name))
+            if (this.components != null && this.components.ContainsKey(type.FullName))
             {
             {
                 throw new Exception($"entity already has component: {type.FullName}");
                 throw new Exception($"entity already has component: {type.FullName}");
             }
             }

+ 1 - 93
Unity/Assets/Scripts/Core/Module/Entity/Scene.cs

@@ -1,99 +1,7 @@
-using System;
-using System.Buffers;
-using System.Collections.Generic;
-using System.IO;
-using MemoryPack;
+using System.Diagnostics;
 
 
 namespace ET
 namespace ET
 {
 {
-    [MemoryPackable]
-    public partial struct Aa
-    {
-        public int A;
-        public int A2;
-    }
-
-    [MemoryPackable]
-    public partial struct Bb
-    {
-        public int B;
-    }
-
-    [MemoryPackable]
-    public partial class Cc
-    {
-        public Aa aaa;
-        
-        public List<Bb> bbb;
-        
-        public Dictionary<long, Bb> ccc;
-    }
-
-    public class FixedArrayBufferWriter: IBufferWriter<byte>
-    {
-        byte[] buffer;
-        int written;
-
-        public FixedArrayBufferWriter(byte[] buffer)
-        {
-            this.buffer = buffer;
-            this.written = 0;
-        }
-
-        public void Reset(byte[] buffer)
-        {
-            this.buffer = buffer;
-            this.written = 0;
-        }
-
-        public void Advance(int count)
-        {
-            this.written += count;
-        }
-
-        public Memory<byte> GetMemory(int sizeHint = 0)
-        {
-            var memory = buffer.AsMemory(written);
-            if (memory.Length >= sizeHint)
-            {
-                return memory;
-            }
-
-            MemoryPackSerializationException.ThrowMessage("Requested invalid sizeHint.");
-            return memory;
-        }
-
-        public Span<byte> GetSpan(int sizeHint = 0)
-        {
-            var span = buffer.AsSpan(written);
-            if (span.Length >= sizeHint)
-            {
-                return span;
-            }
-
-            MemoryPackSerializationException.ThrowMessage("Requested invalid sizeHint.");
-            return span;
-        }
-
-        public byte[] GetFilledBuffer()
-        {
-            if (written != buffer.Length)
-            {
-                MemoryPackSerializationException.ThrowMessage("Not filled buffer.");
-            }
-
-            return buffer;
-        }
-    }
-
-    [MemoryPackable]
-    public partial struct Dd
-    {
-        public int aaa;
-        public string bbb;
-        public List<int> ccc;
-    }
-    
     [EnableMethod]
     [EnableMethod]
     [ChildOf]
     [ChildOf]
     public class Scene: Entity, IScene
     public class Scene: Entity, IScene

+ 2 - 2
Unity/Assets/Scripts/Core/Module/EventSystem/EventSystem.cs

@@ -630,7 +630,7 @@ namespace ET
                     
                     
                 if (!(eventInfo.IEvent is AEvent<S, T> aEvent))
                 if (!(eventInfo.IEvent is AEvent<S, T> aEvent))
                 {
                 {
-                    Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
+                    Log.Error($"event error: {eventInfo.IEvent.GetType().FullName}");
                     continue;
                     continue;
                 }
                 }
 
 
@@ -666,7 +666,7 @@ namespace ET
                 
                 
                 if (!(eventInfo.IEvent is AEvent<S, T> aEvent))
                 if (!(eventInfo.IEvent is AEvent<S, T> aEvent))
                 {
                 {
-                    Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
+                    Log.Error($"event error: {eventInfo.IEvent.GetType().FullName}");
                     continue;
                     continue;
                 }
                 }
                 
                 

+ 29 - 11
Unity/Assets/Scripts/Core/Module/Network/AService.cs

@@ -10,23 +10,41 @@ namespace ET
         
         
         public ServiceType ServiceType { get; protected set; }
         public ServiceType ServiceType { get; protected set; }
         
         
-        private (object Message, MemoryStream MemoryStream) lastMessageInfo;
+        private (MessageObject Message, MemoryBuffer MemoryStream) lastMessageInfo;
         
         
-        // 缓存上一个发送的消息,这样广播消息的时候省掉多次序列化,这样有个另外的问题,客户端就不能保存发送的消息来减少gc
-        // 不过这个问题并不大,因为客户端发送的消息是比较少的,如果实在需要,也可以修改这个方法,把outer的消息过滤掉。
-        protected MemoryStream GetMemoryStream(object message)
+        // 缓存上一个发送的消息,这样广播消息的时候省掉多次序列化,这样有个另外的问题,客户端就不能保存发送的消息来减少gc
+        // 需要广播的消息不能用对象池,因为用了对象池无法使用ReferenceEquals去判断是否是同一个消息,服务端gc很强,这种消息不用池问题不大
+        public MemoryBuffer Fetch(MessageObject message)
         {
         {
-            if (object.ReferenceEquals(lastMessageInfo.Message, message))
+            MemoryBuffer stream;
+            if (!message.IsFromPool) // 不是从池中来的消息, 服务端需要广播的消息不能用对象池
             {
             {
-                Log.Debug($"message serialize cache: {message.GetType().Name}");
-                return lastMessageInfo.MemoryStream;
+                if (ReferenceEquals(message, this.lastMessageInfo.Message))
+                {
+                    Log.Debug($"message serialize cache: {message.GetType().FullName}");
+                    return lastMessageInfo.MemoryStream;
+                }
+                stream = new MemoryBuffer(); // 因为广播,可能MemoryBuffer会用多次,所以不能用对象池
+                MessageSerializeHelper.MessageToStream(stream, message);
+                this.lastMessageInfo = (message, stream);
+            }
+            else
+            {
+                stream = NetServices.Instance.Fetch();
+                MessageSerializeHelper.MessageToStream(stream, message);
             }
             }
-
-            (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(message);
-            this.lastMessageInfo = (message, stream);
             return stream;
             return stream;
         }
         }
         
         
+        public void Recycle(MemoryBuffer memoryStream)
+        {
+            if (!memoryStream.IsFromPool)
+            {
+                return;
+            }
+            NetServices.Instance.Recycle(memoryStream);
+        }
+        
         public virtual void Dispose()
         public virtual void Dispose()
         {
         {
         }
         }
@@ -39,7 +57,7 @@ namespace ET
 
 
         public abstract void Create(long id, IPEndPoint address);
         public abstract void Create(long id, IPEndPoint address);
 
 
-        public abstract void Send(long channelId, long actorId, object message);
+        public abstract void Send(long channelId, long actorId, MessageObject message);
 
 
         public virtual (uint, uint) GetChannelConn(long channelId)
         public virtual (uint, uint) GetChannelConn(long channelId)
         {
         {

+ 27 - 12
Unity/Assets/Scripts/Core/Module/Network/KChannel.cs

@@ -12,7 +12,7 @@ namespace ET
 	public struct KcpWaitPacket
 	public struct KcpWaitPacket
 	{
 	{
 		public long ActorId;
 		public long ActorId;
-		public MemoryStream MemoryStream;
+		public MemoryBuffer MemoryStream;
 	}
 	}
 	
 	
 	public class KChannel : AChannel
 	public class KChannel : AChannel
@@ -48,9 +48,9 @@ namespace ET
 		
 		
 		private const int maxPacketSize = 10000;
 		private const int maxPacketSize = 10000;
 
 
-		private readonly MemoryStream ms = new MemoryStream(maxPacketSize);
+		private readonly MemoryBuffer ms = new MemoryBuffer(maxPacketSize);
 
 
-		private MemoryStream readMemory;
+		private MemoryBuffer readMemory;
 		private int needReadSplitCount;
 		private int needReadSplitCount;
 		
 		
 		private void InitKcp()
 		private void InitKcp()
@@ -174,6 +174,8 @@ namespace ET
 			}
 			}
 		}
 		}
 
 
+		private long lastConnectTime = long.MaxValue;
+
 		/// <summary>
 		/// <summary>
 		/// 发送请求连接消息
 		/// 发送请求连接消息
 		/// </summary>
 		/// </summary>
@@ -185,6 +187,13 @@ namespace ET
 				{
 				{
 					return;
 					return;
 				}
 				}
+
+				// 300毫秒后再次update发送connect请求
+				if (timeNow < this.lastConnectTime + 300)
+				{
+					this.Service.AddToUpdate(0, this.Id);
+					return;
+				}
 				
 				
 				// 10秒连接超时
 				// 10秒连接超时
 				if (timeNow > this.CreateTime + KService.ConnectTimeoutTime)
 				if (timeNow > this.CreateTime + KService.ConnectTimeoutTime)
@@ -200,9 +209,10 @@ namespace ET
 				buffer.WriteTo(5, this.RemoteConn);
 				buffer.WriteTo(5, this.RemoteConn);
 				this.socket.SendTo(buffer, 0, 9, SocketFlags.None, this.RemoteAddress);
 				this.socket.SendTo(buffer, 0, 9, SocketFlags.None, this.RemoteAddress);
 				Log.Info($"kchannel connect {this.LocalConn} {this.RemoteConn} {this.RealAddress} {this.socket.LocalEndPoint}");
 				Log.Info($"kchannel connect {this.LocalConn} {this.RemoteConn} {this.RealAddress} {this.socket.LocalEndPoint}");
-				
-				// 300毫秒后再次update发送connect请求
-				this.Service.AddToUpdate(timeNow + 300, this.Id);
+
+				this.lastConnectTime = timeNow;
+
+				this.Service.AddToUpdate(0, this.Id);
 			}
 			}
 			catch (Exception e)
 			catch (Exception e)
 			{
 			{
@@ -323,7 +333,7 @@ namespace ET
 								this.OnError(ErrorCore.ERR_KcpSplitCountError);
 								this.OnError(ErrorCore.ERR_KcpSplitCountError);
 								return;
 								return;
 							}
 							}
-							this.readMemory = new MemoryStream(this.needReadSplitCount);
+							this.readMemory = new MemoryBuffer(this.needReadSplitCount);
 							this.readMemory.SetLength(this.needReadSplitCount);
 							this.readMemory.SetLength(this.needReadSplitCount);
 							this.readMemory.Seek(0, SeekOrigin.Begin);
 							this.readMemory.Seek(0, SeekOrigin.Begin);
 							continue;
 							continue;
@@ -341,7 +351,7 @@ namespace ET
 						this.readMemory.Seek(Packet.OpcodeLength, SeekOrigin.Begin);
 						this.readMemory.Seek(Packet.OpcodeLength, SeekOrigin.Begin);
 						break;
 						break;
 				}
 				}
-				MemoryStream mem = this.readMemory;
+				MemoryBuffer mem = this.readMemory;
 				this.readMemory = null;
 				this.readMemory = null;
 				this.OnRead(mem);
 				this.OnRead(mem);
 			}
 			}
@@ -387,7 +397,7 @@ namespace ET
 			{
 			{
 				return;
 				return;
 			}
 			}
-			MemoryStream memoryStream = kcpWaitPacket.MemoryStream;
+			MemoryBuffer memoryStream = kcpWaitPacket.MemoryStream;
 			
 			
 			switch (this.Service.ServiceType)
 			switch (this.Service.ServiceType)
 			{
 			{
@@ -432,11 +442,15 @@ namespace ET
 			}
 			}
 
 
 			this.Service.AddToUpdate(0, this.Id);
 			this.Service.AddToUpdate(0, this.Id);
+			
+			// 回收MemoryBuffer,减少GC
+			this.Service.Recycle(memoryStream);
 		}
 		}
 		
 		
-		public void Send(long actorId, MemoryStream stream)
+		public void Send(long actorId, MessageObject message)
 		{
 		{
-			KcpWaitPacket kcpWaitPacket = new KcpWaitPacket() { ActorId = actorId, MemoryStream = stream };
+			MemoryBuffer stream = this.Service.Fetch(message);
+			KcpWaitPacket kcpWaitPacket = new() { ActorId = actorId, MemoryStream = stream };
 			if (!this.IsConnected)
 			if (!this.IsConnected)
 			{
 			{
 				this.sendBuffer.Enqueue(kcpWaitPacket);
 				this.sendBuffer.Enqueue(kcpWaitPacket);
@@ -469,10 +483,11 @@ namespace ET
 				this.OnError(ErrorCore.ERR_KcpWaitSendSizeTooLarge);
 				this.OnError(ErrorCore.ERR_KcpWaitSendSizeTooLarge);
 				return;
 				return;
 			}
 			}
+
 			this.KcpSend(kcpWaitPacket);
 			this.KcpSend(kcpWaitPacket);
 		}
 		}
 		
 		
-		private void OnRead(MemoryStream memoryStream)
+		private void OnRead(MemoryBuffer memoryStream)
 		{
 		{
 			try
 			try
 			{
 			{

+ 14 - 6
Unity/Assets/Scripts/Core/Module/Network/KService.cs

@@ -149,11 +149,13 @@ namespace ET
         // 下帧要更新的channel
         // 下帧要更新的channel
         private readonly HashSet<long> updateIds = new HashSet<long>();
         private readonly HashSet<long> updateIds = new HashSet<long>();
         
         
+#if !UNITY
         // 下次时间更新的channel
         // 下次时间更新的channel
-        private readonly MultiMap<long, long> timeId = new MultiMap<long, long>();
+        private readonly MultiMap<long, long> timeId = new();
         private readonly List<long> timeOutTime = new List<long>();
         private readonly List<long> timeOutTime = new List<long>();
         // 记录最小时间,不用每次都去MultiMap取第一个值
         // 记录最小时间,不用每次都去MultiMap取第一个值
         private long minTime;
         private long minTime;
+#endif
         
         
         public override bool IsDispose()
         public override bool IsDispose()
         {
         {
@@ -519,7 +521,7 @@ namespace ET
             Log.Info($"channel send fin: {localConn} {remoteConn} {address} {error}");
             Log.Info($"channel send fin: {localConn} {remoteConn} {address} {error}");
         }
         }
         
         
-        public override void Send(long channelId, long actorId, object message)
+        public override void Send(long channelId, long actorId, MessageObject message)
         {
         {
             KChannel channel = this.Get(channelId);
             KChannel channel = this.Get(channelId);
             if (channel == null)
             if (channel == null)
@@ -527,16 +529,15 @@ namespace ET
                 return;
                 return;
             }
             }
             
             
-            MemoryStream memoryStream = this.GetMemoryStream(message);
-            channel.Send(actorId, memoryStream);
+            channel.Send(actorId, message);
         }
         }
 
 
         public override void Update()
         public override void Update()
         {
         {
             uint timeNow = this.TimeNow;
             uint timeNow = this.TimeNow;
-            
+
             this.TimerOut(timeNow);
             this.TimerOut(timeNow);
-            
+
             this.CheckWaitAcceptChannel(timeNow);
             this.CheckWaitAcceptChannel(timeNow);
             
             
             this.Recv();
             this.Recv();
@@ -598,6 +599,7 @@ namespace ET
         // 服务端需要看channel的update时间是否已到
         // 服务端需要看channel的update时间是否已到
         public void AddToUpdate(long time, long id)
         public void AddToUpdate(long time, long id)
         {
         {
+#if !UNITY
             if (time == 0)
             if (time == 0)
             {
             {
                 this.updateIds.Add(id);
                 this.updateIds.Add(id);
@@ -608,11 +610,16 @@ namespace ET
                 this.minTime = time;
                 this.minTime = time;
             }
             }
             this.timeId.Add(time, id);
             this.timeId.Add(time, id);
+#else
+            this.updateIds.Add(id);
+#endif
         }
         }
         
         
+
         // 计算到期需要update的channel
         // 计算到期需要update的channel
         private void TimerOut(uint timeNow)
         private void TimerOut(uint timeNow)
         {
         {
+#if !UNITY
             if (this.timeId.Count == 0)
             if (this.timeId.Count == 0)
             {
             {
                 return;
                 return;
@@ -646,6 +653,7 @@ namespace ET
                 }
                 }
                 this.timeId.Remove(k);
                 this.timeId.Remove(k);
             }
             }
+#endif
         }
         }
     }
     }
 }
 }

+ 65 - 0
Unity/Assets/Scripts/Core/Module/Network/MessagePool.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+
+namespace ET
+{
+    public class MessagePool
+    {
+        private readonly Dictionary<Type, Queue<MessageObject>> pool = new();
+        
+        public T Fetch<T>() where T: MessageObject
+        {
+            return this.Fetch(typeof (T)) as T;
+        }
+
+        public MessageObject Fetch(Type type)
+        {
+            lock (this.pool)
+            {
+                MessageObject messageObject;
+                Queue<MessageObject> queue = null;
+                if (!pool.TryGetValue(type, out queue))
+                {
+                    messageObject = Activator.CreateInstance(type) as MessageObject;
+                }
+                else if (queue.Count == 0)
+                {
+                    messageObject = Activator.CreateInstance(type) as MessageObject;
+                }
+                else
+                {
+                    messageObject = queue.Dequeue();
+                }
+                
+                messageObject.IsFromPool = true;
+                return messageObject;
+            }
+        }
+
+        public void Recycle(MessageObject obj)
+        {
+            if (!obj.IsFromPool)
+            {
+                return;
+            }
+            Type type = obj.GetType();
+            
+            lock (this.pool)
+            {
+                Queue<MessageObject> queue = null;
+                if (!pool.TryGetValue(type, out queue))
+                {
+                    queue = new Queue<MessageObject>();
+                    pool.Add(type, queue);
+                }
+
+                // 一种对象最大为100个
+                if (queue.Count > 100)
+                {
+                    return;
+                }
+                queue.Enqueue(obj);
+            }
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Core/Module/Network/MessagePool.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 21b73f9512ba740f78c657a1e87792db
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 18
Unity/Assets/Scripts/Core/Module/Network/MessageSerializeHelper.cs

@@ -5,25 +5,9 @@ namespace ET
 {
 {
     public static class MessageSerializeHelper
     public static class MessageSerializeHelper
     {
     {
-        private static MemoryStream GetStream(int count = 0)
-        {
-            MemoryStream stream;
-            if (count > 0)
-            {
-                stream = new MemoryStream(count);
-            }
-            else
-            {
-                stream = new MemoryStream();
-            }
-
-            return stream;
-        }
-        
-        public static (ushort, MemoryStream) MessageToStream(object message)
+        public static ushort MessageToStream(MemoryBuffer stream, object message)
         {
         {
             int headOffset = Packet.ActorIdLength;
             int headOffset = Packet.ActorIdLength;
-            MemoryStream stream = GetStream(headOffset + Packet.OpcodeLength);
 
 
             ushort opcode = NetServices.Instance.GetOpcode(message.GetType());
             ushort opcode = NetServices.Instance.GetOpcode(message.GetType());
             
             
@@ -35,7 +19,7 @@ namespace ET
             SerializeHelper.Serialize(message, stream);
             SerializeHelper.Serialize(message, stream);
             
             
             stream.Seek(0, SeekOrigin.Begin);
             stream.Seek(0, SeekOrigin.Begin);
-            return (opcode, stream);
+            return opcode;
         }
         }
     }
     }
 }
 }

+ 271 - 155
Unity/Assets/Scripts/Core/Module/Network/NetServices.cs

@@ -1,4 +1,6 @@
-using System;
+//#undef SINGLE_THREAD
+
+using System;
 using System.Collections.Concurrent;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
@@ -6,6 +8,8 @@ using System.Net;
 using System.Threading;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 
 
+
+
 namespace ET
 namespace ET
 {
 {
     public enum NetworkProtocol
     public enum NetworkProtocol
@@ -14,7 +18,7 @@ namespace ET
         KCP,
         KCP,
         Websocket,
         Websocket,
     }
     }
-    
+
     public enum NetOp: byte
     public enum NetOp: byte
     {
     {
         AddService = 1,
         AddService = 1,
@@ -28,7 +32,7 @@ namespace ET
         GetChannelConn = 10,
         GetChannelConn = 10,
         ChangeAddress = 11,
         ChangeAddress = 11,
     }
     }
-    
+
     public struct NetOperator
     public struct NetOperator
     {
     {
         public NetOp Op; // 操作码
         public NetOp Op; // 操作码
@@ -40,8 +44,10 @@ namespace ET
 
 
     public class NetServices: Singleton<NetServices>, ISingletonUpdate
     public class NetServices: Singleton<NetServices>, ISingletonUpdate
     {
     {
+#if !SINGLE_THREAD
         private readonly ConcurrentQueue<NetOperator> netThreadOperators = new ConcurrentQueue<NetOperator>();
         private readonly ConcurrentQueue<NetOperator> netThreadOperators = new ConcurrentQueue<NetOperator>();
         private readonly ConcurrentQueue<NetOperator> mainThreadOperators = new ConcurrentQueue<NetOperator>();
         private readonly ConcurrentQueue<NetOperator> mainThreadOperators = new ConcurrentQueue<NetOperator>();
+#endif
 
 
         public NetServices()
         public NetServices()
         {
         {
@@ -62,7 +68,7 @@ namespace ET
 
 
                 this.typeOpcode.Add(type, messageAttribute.Opcode);
                 this.typeOpcode.Add(type, messageAttribute.Opcode);
             }
             }
-            
+
 #if !SINGLE_THREAD
 #if !SINGLE_THREAD
             // 网络线程
             // 网络线程
             this.thread = new Thread(this.NetThreadUpdate);
             this.thread = new Thread(this.NetThreadUpdate);
@@ -72,17 +78,18 @@ namespace ET
 
 
         public void Destroy()
         public void Destroy()
         {
         {
-            
 #if !SINGLE_THREAD
 #if !SINGLE_THREAD
-            this.isStop = true;            
+            this.isStop = true;
             this.thread.Join(1000);
             this.thread.Join(1000);
 #endif
 #endif
         }
         }
 
 
-#region 线程安全
-        
+        #region 线程安全
+
+        private readonly MessagePool messagePool = new();
+
         // 初始化后不变,所以主线程,网络线程都可以读
         // 初始化后不变,所以主线程,网络线程都可以读
-        private readonly DoubleMap<Type, ushort> typeOpcode = new DoubleMap<Type, ushort>();
+        private readonly DoubleMap<Type, ushort> typeOpcode = new();
 
 
         public ushort GetOpcode(Type type)
         public ushort GetOpcode(Type type)
         {
         {
@@ -94,139 +101,224 @@ namespace ET
             return this.typeOpcode.GetKeyByValue(opcode);
             return this.typeOpcode.GetKeyByValue(opcode);
         }
         }
 
 
-#endregion
-
-        
-        
-#region 主线程
-        
-        private readonly Dictionary<int, Action<long, IPEndPoint>> acceptCallback = new Dictionary<int, Action<long, IPEndPoint>>();
-        private readonly Dictionary<int, Action<long, long, object>> readCallback = new Dictionary<int, Action<long, long, object>>();
-        private readonly Dictionary<int, Action<long, int>> errorCallback = new Dictionary<int, Action<long, int>>();
+        public MessageObject FetchMessage(Type type)
+        {
+            return this.messagePool.Fetch(type);
+        }
         
         
+        public T FetchMessage<T>() where T: MessageObject
+        {
+            return this.messagePool.Fetch<T>();
+        }
+
+        public void RecycleMessage(MessageObject obj)
+        {
+            if (obj == null)
+            {
+                return;
+            }
+            this.messagePool.Recycle(obj);
+        }
+
+        #endregion
+
+        #region 主线程
+
+        private readonly Dictionary<int, Action<long, IPEndPoint>> acceptCallback = new();
+        private readonly Dictionary<int, Action<long, long, object>> readCallback = new();
+        private readonly Dictionary<int, Action<long, int>> errorCallback = new();
+
         private int serviceIdGenerator;
         private int serviceIdGenerator;
 
 
         public async Task<(uint, uint)> GetChannelConn(int serviceId, long channelId)
         public async Task<(uint, uint)> GetChannelConn(int serviceId, long channelId)
         {
         {
             TaskCompletionSource<(uint, uint)> tcs = new TaskCompletionSource<(uint, uint)>();
             TaskCompletionSource<(uint, uint)> tcs = new TaskCompletionSource<(uint, uint)>();
-            NetOperator netOperator = new NetOperator() { Op = NetOp.GetChannelConn, ServiceId = serviceId, ChannelId = channelId, Object = tcs};
-            this.netThreadOperators.Enqueue(netOperator);
+            NetOperator netOperator = new NetOperator() { Op = NetOp.GetChannelConn, ServiceId = serviceId, ChannelId = channelId, Object = tcs };
+            ToNetThread(ref netOperator);
             return await tcs.Task;
             return await tcs.Task;
         }
         }
 
 
-        public void ChangeAddress(int serviceId, long channelId, IPEndPoint ipEndPoint)
+        private void ToNetThread(ref NetOperator netOperator)
         {
         {
-            NetOperator netOperator = new NetOperator() { Op = NetOp.ChangeAddress, ServiceId = serviceId, ChannelId = channelId, Object = ipEndPoint};
+#if !SINGLE_THREAD
             this.netThreadOperators.Enqueue(netOperator);
             this.netThreadOperators.Enqueue(netOperator);
+#else
+            NetThreadExecute(ref netOperator);
+#endif
         }
         }
-        
-        public void SendMessage(int serviceId, long channelId, long actorId, object message)
+
+        private void ToMainThread(ref NetOperator netOperator)
         {
         {
-            NetOperator netOperator = new NetOperator() { Op = NetOp.SendMessage, ServiceId = serviceId, ChannelId = channelId, ActorId = actorId, Object = message };
-            this.netThreadOperators.Enqueue(netOperator);
+#if !SINGLE_THREAD
+            this.mainThreadOperators.Enqueue(netOperator);
+#else
+            MainThreadExecute(ref netOperator);
+#endif
+        }
+
+        public void ChangeAddress(int serviceId, long channelId, IPEndPoint ipEndPoint)
+        {
+            NetOperator netOperator =
+                    new NetOperator() { Op = NetOp.ChangeAddress, ServiceId = serviceId, ChannelId = channelId, Object = ipEndPoint };
+            ToNetThread(ref netOperator);
+        }
+
+        public void SendMessage(int serviceId, long channelId, long actorId, MessageObject message)
+        {
+            NetOperator netOperator = new NetOperator()
+            {
+                Op = NetOp.SendMessage,
+                ServiceId = serviceId,
+                ChannelId = channelId,
+                ActorId = actorId,
+                Object = message
+            };
+            ToNetThread(ref netOperator);
         }
         }
 
 
         public int AddService(AService aService)
         public int AddService(AService aService)
         {
         {
             aService.Id = ++this.serviceIdGenerator;
             aService.Id = ++this.serviceIdGenerator;
             NetOperator netOperator = new NetOperator() { Op = NetOp.AddService, ServiceId = aService.Id, ChannelId = 0, Object = aService };
             NetOperator netOperator = new NetOperator() { Op = NetOp.AddService, ServiceId = aService.Id, ChannelId = 0, Object = aService };
-            this.netThreadOperators.Enqueue(netOperator);
+            ToNetThread(ref netOperator);
             return aService.Id;
             return aService.Id;
         }
         }
-        
+
         public void RemoveService(int serviceId)
         public void RemoveService(int serviceId)
         {
         {
             NetOperator netOperator = new NetOperator() { Op = NetOp.RemoveService, ServiceId = serviceId };
             NetOperator netOperator = new NetOperator() { Op = NetOp.RemoveService, ServiceId = serviceId };
-            this.netThreadOperators.Enqueue(netOperator);
+            ToNetThread(ref netOperator);
         }
         }
-        
+
         public void RemoveChannel(int serviceId, long channelId, int error)
         public void RemoveChannel(int serviceId, long channelId, int error)
         {
         {
-            NetOperator netOperator = new NetOperator() { Op = NetOp.RemoveChannel, ServiceId = serviceId, ChannelId = channelId, ActorId = error};
-            this.netThreadOperators.Enqueue(netOperator);
+            NetOperator netOperator = new NetOperator() { Op = NetOp.RemoveChannel, ServiceId = serviceId, ChannelId = channelId, ActorId = error };
+            ToNetThread(ref netOperator);
         }
         }
 
 
         public void CreateChannel(int serviceId, long channelId, IPEndPoint address)
         public void CreateChannel(int serviceId, long channelId, IPEndPoint address)
         {
         {
-            NetOperator netOperator = new NetOperator() { Op = NetOp.CreateChannel, ServiceId = serviceId, ChannelId = channelId, Object = address};
-            this.netThreadOperators.Enqueue(netOperator);
+            NetOperator netOperator = new NetOperator() { Op = NetOp.CreateChannel, ServiceId = serviceId, ChannelId = channelId, Object = address };
+            ToNetThread(ref netOperator);
         }
         }
 
 
         public void RegisterAcceptCallback(int serviceId, Action<long, IPEndPoint> action)
         public void RegisterAcceptCallback(int serviceId, Action<long, IPEndPoint> action)
         {
         {
             this.acceptCallback.Add(serviceId, action);
             this.acceptCallback.Add(serviceId, action);
         }
         }
-        
+
         public void RegisterReadCallback(int serviceId, Action<long, long, object> action)
         public void RegisterReadCallback(int serviceId, Action<long, long, object> action)
         {
         {
             this.readCallback.Add(serviceId, action);
             this.readCallback.Add(serviceId, action);
         }
         }
-        
+
         public void RegisterErrorCallback(int serviceId, Action<long, int> action)
         public void RegisterErrorCallback(int serviceId, Action<long, int> action)
         {
         {
             this.errorCallback.Add(serviceId, action);
             this.errorCallback.Add(serviceId, action);
         }
         }
-        
-        private void UpdateInMainThread()
+
+        private void MainThreadExecute(ref NetOperator op)
         {
         {
-            while (true)
+            try
             {
             {
-                if (!this.mainThreadOperators.TryDequeue(out NetOperator op))
+                switch (op.Op)
                 {
                 {
-                    return;
-                }
-
-                try
-                {
-                    switch (op.Op)
+                    case NetOp.OnAccept:
                     {
                     {
-                        case NetOp.OnAccept:
+                        if (!this.acceptCallback.TryGetValue(op.ServiceId, out var action))
                         {
                         {
-                            if (!this.acceptCallback.TryGetValue(op.ServiceId, out var action))
-                            {
-                                return;
-                            }
-                            action.Invoke(op.ChannelId, op.Object as IPEndPoint);
-                            break;
+                            return;
                         }
                         }
-                        case NetOp.OnRead:
+
+                        action.Invoke(op.ChannelId, op.Object as IPEndPoint);
+                        break;
+                    }
+                    case NetOp.OnRead:
+                    {
+                        if (!this.readCallback.TryGetValue(op.ServiceId, out var action))
                         {
                         {
-                            if (!this.readCallback.TryGetValue(op.ServiceId, out var action))
-                            {
-                                return;
-                            }
-                            action.Invoke(op.ChannelId, op.ActorId, op.Object);
-                            break;
+                            return;
                         }
                         }
-                        case NetOp.OnError:
+
+                        action.Invoke(op.ChannelId, op.ActorId, op.Object);
+                        break;
+                    }
+                    case NetOp.OnError:
+                    {
+                        if (!this.errorCallback.TryGetValue(op.ServiceId, out var action))
                         {
                         {
-                            if (!this.errorCallback.TryGetValue(op.ServiceId, out var action))
-                            {
-                                return;
-                            }
-                            
-                            action.Invoke(op.ChannelId, (int)op.ActorId);
-                            break;
+                            return;
                         }
                         }
-                        default:
-                            throw new Exception($"not found net operator: {op.Op}");
+
+                        action.Invoke(op.ChannelId, (int) op.ActorId);
+                        break;
                     }
                     }
+                    default:
+                        throw new Exception($"not found net operator: {op.Op}");
                 }
                 }
-                catch (Exception e)
+            }
+            catch (Exception e)
+            {
+                Log.Error(e);
+            }
+        }
+
+        private void UpdateInMainThread()
+        {
+#if !SINGLE_THREAD
+            while (true)
+            {
+                if (!this.mainThreadOperators.TryDequeue(out NetOperator op))
                 {
                 {
-                    Log.Error(e);
+                    return;
                 }
                 }
+
+                MainThreadExecute(ref op);
             }
             }
+#endif
         }
         }
 
 
-#endregion
+        #endregion
+
+        #region 网络线程
+
+        private readonly Dictionary<int, AService> services = new();
+        private readonly Queue<int> queue = new();
+
+        private readonly Queue<MemoryBuffer> pool = new();
+
+        public MemoryBuffer Fetch()
+        {
+            if (this.pool.Count > 0)
+            {
+                return this.pool.Dequeue();
+            }
+
+            MemoryBuffer memoryBuffer = new() { IsFromPool = true };
+            return memoryBuffer;
+        }
+
+        public void Recycle(MemoryBuffer memoryBuffer)
+        {
+            if (!memoryBuffer.IsFromPool)
+            {
+                return;
+            }
+            if (memoryBuffer.Capacity > 128) // 太大的不回收,GC
+            {
+                return;
+            }
+
+            if (this.pool.Count > 1000)
+            {
+                return;
+            }
+
+            memoryBuffer.SetLength(0);
+            memoryBuffer.Seek(0, SeekOrigin.Begin);
+            this.pool.Enqueue(memoryBuffer);
+        }
 
 
-#region 网络线程
-        
-        private readonly Dictionary<int, AService> services = new Dictionary<int, AService>();
-        private readonly Queue<int> queue = new Queue<int>();
-        
-        
         private void Add(AService aService)
         private void Add(AService aService)
         {
         {
             this.services[aService.Id] = aService;
             this.services[aService.Id] = aService;
@@ -239,7 +331,7 @@ namespace ET
             this.services.TryGetValue(id, out aService);
             this.services.TryGetValue(id, out aService);
             return aService;
             return aService;
         }
         }
-        
+
         private void Remove(int id)
         private void Remove(int id)
         {
         {
             if (this.services.Remove(id, out AService service))
             if (this.services.Remove(id, out AService service))
@@ -249,10 +341,10 @@ namespace ET
         }
         }
 
 
 #if !SINGLE_THREAD
 #if !SINGLE_THREAD
-        
+
         private bool isStop;
         private bool isStop;
         private readonly Thread thread;
         private readonly Thread thread;
-        
+
         // 网络线程Update
         // 网络线程Update
         private void NetThreadUpdate()
         private void NetThreadUpdate()
         {
         {
@@ -261,99 +353,114 @@ namespace ET
                 this.UpdateInNetThread();
                 this.UpdateInNetThread();
                 Thread.Sleep(1);
                 Thread.Sleep(1);
             }
             }
+
+            // 停止的时候再执行一帧,把队列中的消息处理完成
+            this.UpdateInNetThread();
         }
         }
 #endif
 #endif
 
 
-        private void RunNetThreadOperator()
+        private void NetThreadExecute(ref NetOperator op)
         {
         {
-            while (true)
+            try
             {
             {
-                if (!this.netThreadOperators.TryDequeue(out NetOperator op))
+                switch (op.Op)
                 {
                 {
-                    return;
-                }
-
-                try
-                {
-                    switch (op.Op)
+                    case NetOp.AddService:
                     {
                     {
-                        case NetOp.AddService:
+                        this.Add(op.Object as AService);
+                        break;
+                    }
+                    case NetOp.RemoveService:
+                    {
+                        this.Remove(op.ServiceId);
+                        break;
+                    }
+                    case NetOp.CreateChannel:
+                    {
+                        AService service = this.Get(op.ServiceId);
+                        if (service != null)
                         {
                         {
-                            this.Add(op.Object as AService);
-                            break;
+                            service.Create(op.ChannelId, op.Object as IPEndPoint);
                         }
                         }
-                        case NetOp.RemoveService:
+
+                        break;
+                    }
+                    case NetOp.RemoveChannel:
+                    {
+                        AService service = this.Get(op.ServiceId);
+                        if (service != null)
                         {
                         {
-                            this.Remove(op.ServiceId);
-                            break;
+                            service.Remove(op.ChannelId, (int) op.ActorId);
                         }
                         }
-                        case NetOp.CreateChannel:
+
+                        break;
+                    }
+                    case NetOp.SendMessage:
+                    {
+                        AService service = this.Get(op.ServiceId);
+                        if (service != null)
                         {
                         {
-                            AService service = this.Get(op.ServiceId);
-                            if (service != null)
-                            {
-                                service.Create(op.ChannelId, op.Object as IPEndPoint);
-                            }
-                            break;
+                            service.Send(op.ChannelId, op.ActorId, op.Object as MessageObject);
                         }
                         }
-                        case NetOp.RemoveChannel:
+
+                        break;
+                    }
+                    case NetOp.GetChannelConn:
+                    {
+                        var tcs = op.Object as TaskCompletionSource<ValueTuple<uint, uint>>;
+                        try
                         {
                         {
                             AService service = this.Get(op.ServiceId);
                             AService service = this.Get(op.ServiceId);
-                            if (service != null)
+                            if (service == null)
                             {
                             {
-                                service.Remove(op.ChannelId, (int)op.ActorId);
+                                break;
                             }
                             }
-                            break;
+
+                            tcs.SetResult(service.GetChannelConn(op.ChannelId));
                         }
                         }
-                        case NetOp.SendMessage:
+                        catch (Exception e)
                         {
                         {
-                            AService service = this.Get(op.ServiceId);
-                            if (service != null)
-                            {
-                                service.Send(op.ChannelId, op.ActorId, op.Object);
-                            }
-                            break;
+                            tcs.SetException(e);
                         }
                         }
-                        case NetOp.GetChannelConn:
-                        {
-                            var tcs = op.Object as TaskCompletionSource<ValueTuple<uint, uint>>;
-                            try
-                            {
-                                AService service = this.Get(op.ServiceId);
-                                if (service == null)
-                                {
-                                    break;
-                                }
 
 
-                                tcs.SetResult(service.GetChannelConn(op.ChannelId));
-                            }
-                            catch (Exception e)
-                            {
-                                tcs.SetException(e);
-                            }
-                            break;
-                        }
-                        case NetOp.ChangeAddress:
+                        break;
+                    }
+                    case NetOp.ChangeAddress:
+                    {
+                        AService service = this.Get(op.ServiceId);
+                        if (service == null)
                         {
                         {
-                            AService service = this.Get(op.ServiceId);
-                            if (service == null)
-                            {
-                                break;
-                            }
-                            service.ChangeAddress(op.ChannelId, op.Object as IPEndPoint);
                             break;
                             break;
                         }
                         }
-                        default:
-                            throw new Exception($"not found net operator: {op.Op}");
+
+                        service.ChangeAddress(op.ChannelId, op.Object as IPEndPoint);
+                        break;
                     }
                     }
+                    default:
+                        throw new Exception($"not found net operator: {op.Op}");
                 }
                 }
-                catch (Exception e)
+            }
+            catch (Exception e)
+            {
+                Log.Error(e);
+            }
+        }
+
+        private void RunNetThreadOperator()
+        {
+#if !SINGLE_THREAD
+            while (true)
+            {
+                if (!this.netThreadOperators.TryDequeue(out NetOperator op))
                 {
                 {
-                    Log.Error(e);
+                    return;
                 }
                 }
+                
+                NetThreadExecute(ref op);
             }
             }
+#endif
         }
         }
-        
+
         private void UpdateInNetThread()
         private void UpdateInNetThread()
         {
         {
             int count = this.queue.Count;
             int count = this.queue.Count;
@@ -364,34 +471,42 @@ namespace ET
                 {
                 {
                     continue;
                     continue;
                 }
                 }
+
                 this.queue.Enqueue(serviceId);
                 this.queue.Enqueue(serviceId);
                 service.Update();
                 service.Update();
             }
             }
-            
+
             this.RunNetThreadOperator();
             this.RunNetThreadOperator();
         }
         }
 
 
         public void OnAccept(int serviceId, long channelId, IPEndPoint ipEndPoint)
         public void OnAccept(int serviceId, long channelId, IPEndPoint ipEndPoint)
         {
         {
             NetOperator netOperator = new NetOperator() { Op = NetOp.OnAccept, ServiceId = serviceId, ChannelId = channelId, Object = ipEndPoint };
             NetOperator netOperator = new NetOperator() { Op = NetOp.OnAccept, ServiceId = serviceId, ChannelId = channelId, Object = ipEndPoint };
-            this.mainThreadOperators.Enqueue(netOperator);
+            ToMainThread(ref netOperator);
         }
         }
 
 
         public void OnRead(int serviceId, long channelId, long actorId, object message)
         public void OnRead(int serviceId, long channelId, long actorId, object message)
         {
         {
-            NetOperator netOperator = new NetOperator() { Op = NetOp.OnRead, ServiceId = serviceId, ChannelId = channelId, ActorId = actorId, Object = message };
-            this.mainThreadOperators.Enqueue(netOperator);
+            NetOperator netOperator = new NetOperator()
+            {
+                Op = NetOp.OnRead,
+                ServiceId = serviceId,
+                ChannelId = channelId,
+                ActorId = actorId,
+                Object = message
+            };
+            ToMainThread(ref netOperator);
         }
         }
 
 
         public void OnError(int serviceId, long channelId, int error)
         public void OnError(int serviceId, long channelId, int error)
         {
         {
             NetOperator netOperator = new NetOperator() { Op = NetOp.OnError, ServiceId = serviceId, ChannelId = channelId, ActorId = error };
             NetOperator netOperator = new NetOperator() { Op = NetOp.OnError, ServiceId = serviceId, ChannelId = channelId, ActorId = error };
-            this.mainThreadOperators.Enqueue(netOperator);
+            ToMainThread(ref netOperator);
         }
         }
 
 
-#endregion
+        #endregion
 
 
-#region 主线程kcp id生成
+        #region 主线程kcp id生成
 
 
         // 这个因为是NetClientComponent中使用,不会与Accept冲突
         // 这个因为是NetClientComponent中使用,不会与Accept冲突
         public uint CreateConnectChannelId()
         public uint CreateConnectChannelId()
@@ -399,18 +514,19 @@ namespace ET
             return RandomGenerator.RandUInt32();
             return RandomGenerator.RandUInt32();
         }
         }
 
 
-#endregion
+        #endregion
 
 
-#region 网络线程kcp id生成
+        #region 网络线程kcp id生成
 
 
         // 防止与内网进程号的ChannelId冲突,所以设置为一个大的随机数
         // 防止与内网进程号的ChannelId冲突,所以设置为一个大的随机数
         private uint acceptIdGenerator = uint.MaxValue;
         private uint acceptIdGenerator = uint.MaxValue;
+
         public uint CreateAcceptChannelId()
         public uint CreateAcceptChannelId()
         {
         {
             return --this.acceptIdGenerator;
             return --this.acceptIdGenerator;
         }
         }
 
 
-#endregion
+        #endregion
 
 
         public void Update()
         public void Update()
         {
         {

+ 2 - 2
Unity/Assets/Scripts/Core/Module/Network/PacketParser.cs

@@ -18,7 +18,7 @@ namespace ET
 		private readonly byte[] cache = new byte[8];
 		private readonly byte[] cache = new byte[8];
 		public const int InnerPacketSizeLength = 4;
 		public const int InnerPacketSizeLength = 4;
 		public const int OuterPacketSizeLength = 2;
 		public const int OuterPacketSizeLength = 2;
-		public MemoryStream MemoryStream;
+		public MemoryBuffer MemoryStream;
 
 
 		public PacketParser(CircularBuffer buffer, AService service)
 		public PacketParser(CircularBuffer buffer, AService service)
 		{
 		{
@@ -75,7 +75,7 @@ namespace ET
 							return false;
 							return false;
 						}
 						}
 
 
-						MemoryStream memoryStream = new MemoryStream(this.packetSize);
+						MemoryBuffer memoryStream = new MemoryBuffer(this.packetSize);
 						this.buffer.Read(memoryStream, this.packetSize);
 						this.buffer.Read(memoryStream, this.packetSize);
 						//memoryStream.SetLength(this.packetSize - Packet.MessageIndex);
 						//memoryStream.SetLength(this.packetSize - Packet.MessageIndex);
 						this.MemoryStream = memoryStream;
 						this.MemoryStream = memoryStream;

+ 6 - 2
Unity/Assets/Scripts/Core/Module/Network/TChannel.cs

@@ -90,12 +90,14 @@ namespace ET
 			this.socket = null;
 			this.socket = null;
 		}
 		}
 
 
-		public void Send(long actorId, MemoryStream stream)
+		public void Send(long actorId, MessageObject message)
 		{
 		{
 			if (this.IsDisposed)
 			if (this.IsDisposed)
 			{
 			{
 				throw new Exception("TChannel已经被Dispose, 不能发送消息");
 				throw new Exception("TChannel已经被Dispose, 不能发送消息");
 			}
 			}
+			
+			MemoryBuffer stream = this.Service.Fetch(message);
 
 
 			switch (this.Service.ServiceType)
 			switch (this.Service.ServiceType)
 			{
 			{
@@ -128,6 +130,8 @@ namespace ET
 				}
 				}
 			}
 			}
 			
 			
+			this.Service.Recycle(stream);
+			
 			if (!this.isSending)
 			if (!this.isSending)
 			{
 			{
 				//this.StartSend();
 				//this.StartSend();
@@ -352,7 +356,7 @@ namespace ET
 			}
 			}
 		}
 		}
 		
 		
-		private void OnRead(MemoryStream memoryStream)
+		private void OnRead(MemoryBuffer memoryStream)
 		{
 		{
 			try
 			try
 			{
 			{

+ 3 - 3
Unity/Assets/Scripts/Core/Module/Network/TService.cs

@@ -161,7 +161,7 @@ namespace ET
 			this.idChannels.Remove(id);
 			this.idChannels.Remove(id);
 		}
 		}
 
 
-		public override void Send(long channelId, long actorId, object message)
+		public override void Send(long channelId, long actorId, MessageObject message)
 		{
 		{
 			try
 			try
 			{
 			{
@@ -171,8 +171,8 @@ namespace ET
 					NetServices.Instance.OnError(this.Id, channelId, ErrorCore.ERR_SendMessageNotFoundTChannel);
 					NetServices.Instance.OnError(this.Id, channelId, ErrorCore.ERR_SendMessageNotFoundTChannel);
 					return;
 					return;
 				}
 				}
-				MemoryStream memoryStream = this.GetMemoryStream(message);
-				aChannel.Send(actorId, memoryStream);
+				
+				aChannel.Send(actorId, message);
 			}
 			}
 			catch (Exception e)
 			catch (Exception e)
 			{
 			{

+ 15 - 10
Unity/Assets/Scripts/Core/Module/Network/WChannel.cs

@@ -14,13 +14,13 @@ namespace ET
 
 
         private readonly WebSocket webSocket;
         private readonly WebSocket webSocket;
 
 
-        private readonly Queue<MemoryStream> queue = new Queue<MemoryStream>();
+        private readonly Queue<MemoryBuffer> queue = new();
 
 
         private bool isSending;
         private bool isSending;
 
 
         private bool isConnected;
         private bool isConnected;
 
 
-        private readonly MemoryStream recvStream;
+        private readonly MemoryBuffer recvStream;
 
 
         private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
         private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
 
 
@@ -31,7 +31,7 @@ namespace ET
             this.ChannelType = ChannelType.Accept;
             this.ChannelType = ChannelType.Accept;
             this.WebSocketContext = webSocketContext;
             this.WebSocketContext = webSocketContext;
             this.webSocket = webSocketContext.WebSocket;
             this.webSocket = webSocketContext.WebSocket;
-            this.recvStream = new MemoryStream(ushort.MaxValue);
+            this.recvStream = new MemoryBuffer(ushort.MaxValue);
 
 
             isConnected = true;
             isConnected = true;
             
             
@@ -48,7 +48,7 @@ namespace ET
             this.Service = service;
             this.Service = service;
             this.ChannelType = ChannelType.Connect;
             this.ChannelType = ChannelType.Connect;
             this.webSocket = webSocket;
             this.webSocket = webSocket;
-            this.recvStream = new MemoryStream(ushort.MaxValue);
+            this.recvStream = new MemoryBuffer(ushort.MaxValue);
 
 
             isConnected = false;
             isConnected = false;
             
             
@@ -86,8 +86,10 @@ namespace ET
             }
             }
         }
         }
 
 
-        public void Send(MemoryStream stream)
+        public void Send(MessageObject message)
         {
         {
+            MemoryBuffer stream = this.Service.Fetch(message);
+            
             switch (this.Service.ServiceType)
             switch (this.Service.ServiceType)
             {
             {
                 case ServiceType.Inner:
                 case ServiceType.Inner:
@@ -105,7 +107,7 @@ namespace ET
             }
             }
         }
         }
 
 
-        public async ETTask StartSend()
+        private async ETTask StartSend()
         {
         {
             if (this.IsDisposed)
             if (this.IsDisposed)
             {
             {
@@ -129,10 +131,13 @@ namespace ET
                         return;
                         return;
                     }
                     }
 
 
-                    MemoryStream bytes = this.queue.Dequeue();
+                    MemoryBuffer bytes = this.queue.Dequeue();
                     try
                     try
                     {
                     {
-                        await this.webSocket.SendAsync(new ReadOnlyMemory<byte>(bytes.GetBuffer(), (int)bytes.Position, (int)(bytes.Length - bytes.Position)), WebSocketMessageType.Binary, true, cancellationTokenSource.Token);
+                        await this.webSocket.SendAsync(bytes.GetMemory(), WebSocketMessageType.Binary, true, cancellationTokenSource.Token);
+                        
+                        this.Service.Recycle(bytes);
+                        
                         if (this.IsDisposed)
                         if (this.IsDisposed)
                         {
                         {
                             return;
                             return;
@@ -152,7 +157,7 @@ namespace ET
             }
             }
         }
         }
 
 
-        private byte[] cache = new byte[ushort.MaxValue];
+        private readonly byte[] cache = new byte[ushort.MaxValue];
 
 
         public async ETTask StartRecv()
         public async ETTask StartRecv()
         {
         {
@@ -208,7 +213,7 @@ namespace ET
             }
             }
         }
         }
         
         
-        private void OnRead(MemoryStream memoryStream)
+        private void OnRead(MemoryBuffer memoryStream)
         {
         {
             try
             try
             {
             {

+ 2 - 3
Unity/Assets/Scripts/Core/Module/Network/WService.cs

@@ -133,15 +133,14 @@ namespace ET
             throw new NotImplementedException();
             throw new NotImplementedException();
         }
         }
 
 
-        public override void Send(long channelId, long actorId, object message)
+        public override void Send(long channelId, long actorId, MessageObject message)
         {
         {
             this.channels.TryGetValue(channelId, out WChannel channel);
             this.channels.TryGetValue(channelId, out WChannel channel);
             if (channel == null)
             if (channel == null)
             {
             {
                 return;
                 return;
             }
             }
-            MemoryStream memoryStream = this.GetMemoryStream(message);
-            channel.Send(memoryStream);
+            channel.Send(message);
         }
         }
 
 
         public override void Update()
         public override void Update()

+ 1 - 1
Unity/Assets/Scripts/Core/Module/ObjectPool/ObjectPool.cs

@@ -5,7 +5,7 @@ namespace ET
 {
 {
     public class ObjectPool: Singleton<ObjectPool>
     public class ObjectPool: Singleton<ObjectPool>
     {
     {
-        private readonly Dictionary<Type, Queue<object>> pool = new Dictionary<Type, Queue<object>>();
+        private readonly Dictionary<Type, Queue<object>> pool = new();
         
         
         public T Fetch<T>() where T: class
         public T Fetch<T>() where T: class
         {
         {

+ 1 - 1
Unity/Assets/Scripts/Core/Module/Timer/TimerComponent.cs

@@ -58,7 +58,7 @@ namespace ET
         /// <summary>
         /// <summary>
         /// key: time, value: timer id
         /// key: time, value: timer id
         /// </summary>
         /// </summary>
-        private readonly MultiMap<long, long> TimeId = new();
+        private readonly MultiMap<long, long> TimeId = new(1000);
 
 
         private readonly Queue<long> timeOutTime = new();
         private readonly Queue<long> timeOutTime = new();
 
 

+ 45 - 2
Unity/Assets/Scripts/Core/MultiMap.cs

@@ -5,7 +5,38 @@ namespace ET
 {
 {
     public class MultiMap<T, K>: SortedDictionary<T, List<K>>
     public class MultiMap<T, K>: SortedDictionary<T, List<K>>
     {
     {
-        private readonly List<K> Empty = new List<K>();
+        private readonly List<K> Empty = new();
+        private readonly int maxPoolCount;
+        private readonly Queue<List<K>> pool;
+
+        public MultiMap(int maxPoolCount = 0)
+        {
+            this.maxPoolCount = maxPoolCount;
+            this.pool = new Queue<List<K>>(maxPoolCount);
+        }
+
+        private List<K> FetchList()
+        {
+            if (this.pool.Count > 0)
+            {
+                return this.pool.Dequeue();
+            }
+            return new List<K>(10);
+        }
+
+        private void Recycle(List<K> list)
+        {
+            if (list == null)
+            {
+                return;
+            }
+            if (this.pool.Count == this.maxPoolCount)
+            {
+                return;
+            }
+            list.Clear();
+            this.pool.Enqueue(list);
+        }
 
 
         public void Add(T t, K k)
         public void Add(T t, K k)
         {
         {
@@ -13,7 +44,7 @@ namespace ET
             this.TryGetValue(t, out list);
             this.TryGetValue(t, out list);
             if (list == null)
             if (list == null)
             {
             {
-                list = new List<K>();
+                list = this.FetchList();
                 this.Add(t, list);
                 this.Add(t, list);
             }
             }
             list.Add(k);
             list.Add(k);
@@ -38,6 +69,18 @@ namespace ET
             return true;
             return true;
         }
         }
 
 
+        public new bool Remove(T t)
+        {
+            List<K> list;
+            this.TryGetValue(t, out list);
+            if (list == null)
+            {
+                return false;
+            }
+            this.Recycle(list);
+            return base.Remove(t);
+        }
+
         /// <summary>
         /// <summary>
         /// 不返回内部的list,copy一份出来
         /// 不返回内部的list,copy一份出来
         /// </summary>
         /// </summary>

+ 10 - 0
Unity/Assets/Scripts/Core/Object/MessageObject.cs

@@ -0,0 +1,10 @@
+using System;
+using System.ComponentModel;
+
+namespace ET
+{
+    public abstract class MessageObject: ProtoObject
+    {
+        public bool IsFromPool;
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Core/Object/MessageObject.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9a2882ec78c6c471e8e74005e51f985f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 69 - 0
Unity/Assets/Scripts/Core/Serialize/MemoryBuffer.cs

@@ -0,0 +1,69 @@
+using System;
+using System.Buffers;
+using System.IO;
+using MemoryPack;
+
+namespace ET
+{
+    public class MemoryBuffer: MemoryStream, IBufferWriter<byte>
+    {
+        private int origin;
+        public bool IsFromPool;
+        
+        public MemoryBuffer()
+        {
+        }
+        
+        public MemoryBuffer(int capacity): base(capacity)
+        {
+        }
+        
+        public MemoryBuffer(byte[] buffer): base(buffer)
+        {
+        } 
+        
+        public MemoryBuffer(byte[] buffer, int index, int length): base(buffer, index, length)
+        {
+            this.origin = index;
+        }
+
+        protected override void Dispose(bool disposing)
+        {
+            this.Seek(0, SeekOrigin.Begin);
+        }
+        
+        public ReadOnlyMemory<byte> WrittenMemory => this.GetBuffer().AsMemory(this.origin, (int)this.Position);
+
+        public ReadOnlySpan<byte> WrittenSpan => this.GetBuffer().AsSpan(this.origin, (int)this.Position);
+
+        public void Advance(int count)
+        {
+            long newLength = this.Position + count;
+            if (newLength > this.Length)
+            {
+                this.SetLength(newLength);
+            }
+            this.Position = newLength;
+        }
+
+        public Memory<byte> GetMemory(int sizeHint = 0)
+        {
+            if (this.Length - this.Position < sizeHint)
+            {
+                this.SetLength(this.Position + sizeHint);
+            }
+            var memory = this.GetBuffer().AsMemory((int)this.Position + this.origin, (int)(this.Length - this.Position));
+            return memory;
+        }
+
+        public Span<byte> GetSpan(int sizeHint = 0)
+        {
+            if (this.Length - this.Position < sizeHint)
+            {
+                this.SetLength(this.Position + sizeHint);
+            }
+            var span = this.GetBuffer().AsSpan((int)this.Position + this.origin, (int)(this.Length - this.Position));
+            return span;
+        }
+    }
+}

+ 3 - 0
Unity/Assets/Scripts/Core/Serialize/MemoryBuffer.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 9c85a4c0a92b422e9f5c81471a16e64a
+timeCreated: 1682481633

+ 79 - 0
Unity/Assets/Scripts/Core/Serialize/MemoryPackHelper.cs

@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Reflection;
+using MemoryPack;
+
+namespace ET
+{
+    public static class MemoryPackHelper
+    {
+        static MemoryPackHelper()
+        {
+            HashSet<Type> types = EventSystem.Instance.GetTypes(typeof (MessageAttribute));
+            foreach (Type type in types)
+            {
+                if (type.GetCustomAttribute(typeof (MemoryPackableAttribute)) == null)
+                {
+                    continue;
+                }
+
+                Activator.CreateInstance(type);
+            }
+        }
+        
+        public static void Init()
+        {
+        }
+
+        public static byte[] Serialize(object message)
+        {
+            return MemoryPackSerializer.Serialize(message.GetType(), message);
+        }
+
+        public static void Serialize(object message, MemoryBuffer stream)
+        {
+            MemoryPackSerializer.Serialize(message.GetType(), stream, message);
+        }
+        
+        public static object Deserialize(Type type, byte[] bytes, int index, int count)
+        {
+            object o = MemoryPackSerializer.Deserialize(type, bytes.AsSpan(index, count));
+            if (o is ISupportInitialize supportInitialize)
+            {
+                supportInitialize.EndInit();
+            }
+            return o;
+        }
+
+        public static object Deserialize(Type type, byte[] bytes, int index, int count, ref object o)
+        {
+            MemoryPackSerializer.Deserialize(type, bytes.AsSpan(index, count), ref o);
+            if (o is ISupportInitialize supportInitialize)
+            {
+                supportInitialize.EndInit();
+            }
+            return o;
+        }
+
+        public static object Deserialize(Type type, MemoryBuffer stream)
+        {
+            object o = MemoryPackSerializer.Deserialize(type, stream.GetSpan());
+            if (o is ISupportInitialize supportInitialize)
+            {
+                supportInitialize.EndInit();
+            }
+            return o;
+        }
+
+        public static object Deserialize(Type type, MemoryBuffer stream, ref object o)
+        {
+            MemoryPackSerializer.Deserialize(type, stream.GetSpan(), ref o);
+            if (o is ISupportInitialize supportInitialize)
+            {
+                supportInitialize.EndInit();
+            }
+            return o;
+        }
+    }
+}

+ 3 - 0
Unity/Assets/Scripts/Core/Serialize/MemoryPackHelper.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e48026652b4f4d09ae05581b76e2095b
+timeCreated: 1682484738

+ 1 - 0
Unity/Assets/Scripts/Core/Serialize/MongoHelper.cs

@@ -177,6 +177,7 @@ namespace ET
             {
             {
                 supportInitialize.BeginInit();
                 supportInitialize.BeginInit();
             }
             }
+            
             using (BsonBinaryWriter bsonWriter = new BsonBinaryWriter(stream, BsonBinaryWriterSettings.Defaults))
             using (BsonBinaryWriter bsonWriter = new BsonBinaryWriter(stream, BsonBinaryWriterSettings.Defaults))
             {
             {
                 BsonSerializationContext context = BsonSerializationContext.CreateRoot(bsonWriter);
                 BsonSerializationContext context = BsonSerializationContext.CreateRoot(bsonWriter);

+ 51 - 13
Unity/Assets/Scripts/Core/Serialize/SerializeHelper.cs

@@ -1,28 +1,66 @@
 using System.IO;
 using System.IO;
 using System;
 using System;
+using MemoryPack;
+#pragma warning disable CS0162
 
 
 namespace ET
 namespace ET
 {
 {
     public static class SerializeHelper
     public static class SerializeHelper
-    {
-		public static object Deserialize(Type type, byte[] bytes, int index, int count)
-		{
-			return ProtobufHelper.Deserialize(type, bytes, index, count);
-		}
+	{
+		// 这里不用宏控制,因为服务端也要用,如果用宏,需要同时在服务端客户端加宏,挺麻烦的,不如直接在这里改代码
+		public const bool UseMemoryPack = true;
 
 
-        public static byte[] Serialize(object message)
+		public static byte[] Serialize(object message)
 		{
 		{
-			return ProtobufHelper.Serialize(message);
+			if (UseMemoryPack)
+			{
+				return MemoryPackHelper.Serialize(message);
+			}
+			else
+			{
+				return ProtobufHelper.Serialize(message);	
+			}
 		}
 		}
 
 
-        public static void Serialize(object message, Stream stream)
+        public static void Serialize(object message, MemoryBuffer stream)
         {
         {
-            ProtobufHelper.Serialize(message, stream);
-        }
+			if (UseMemoryPack)
+			{
+				MemoryPackHelper.Serialize(message, stream);
+			}
+			else
+			{
+				ProtobufHelper.Serialize(message, stream);	
+			}
+		}
+		
+		public static object Deserialize(Type type, byte[] bytes, int index, int count)
+		{
+			if (UseMemoryPack)
+			{
+				object o = NetServices.Instance.FetchMessage(type);
+				MemoryPackHelper.Deserialize(type, bytes, index, count, ref o);
+				return o;
+			}
+			else
+			{
+				using MemoryStream memoryStream = new MemoryStream(bytes, index, count);
+				return ProtoBuf.Serializer.Deserialize(type, memoryStream);
+			}
+		}
 
 
-        public static object Deserialize(Type type, Stream stream)
-        {
-	        return ProtobufHelper.Deserialize(type, stream);
+		public static object Deserialize(Type type, MemoryBuffer stream)
+		{
+			if (UseMemoryPack)
+			{
+				object o = NetServices.Instance.FetchMessage(type);
+				MemoryPackHelper.Deserialize(type, stream, ref o);
+				return o;
+			}
+			else
+			{
+				return ProtobufHelper.Deserialize(type, stream);	
+			}
         }
         }
     }
     }
 }
 }

+ 71 - 0
Unity/Assets/Scripts/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs

@@ -40,6 +40,11 @@ namespace ET
             }
             }
             else
             else
             {
             {
+                if (Define.IsDebug)
+                {
+                    content = content.Replace("<Optimize>false</Optimize>", "<Optimize>true</Optimize>");
+                }
+                
                 if (path.EndsWith("Unity.Hotfix.csproj"))
                 if (path.EndsWith("Unity.Hotfix.csproj"))
                 {
                 {
                     content = content.Replace("<Compile Include=\"Assets\\Scripts\\Empty\\Hotfix\\Empty.cs\" />", string.Empty);
                     content = content.Replace("<Compile Include=\"Assets\\Scripts\\Empty\\Hotfix\\Empty.cs\" />", string.Empty);
@@ -75,6 +80,68 @@ namespace ET
                     content = GenerateCustomProject(path, content,
                     content = GenerateCustomProject(path, content,
                         @"Assets\Scripts\Codes\ModelView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)");
                         @"Assets\Scripts\Codes\ModelView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)");
                 }
                 }
+                
+                if (path.EndsWith("Unity.AllModel.csproj"))
+                {
+                    content = content.Replace("<Compile Include=\"Assets\\Scripts\\Empty\\AllModel\\Empty.cs\" />", string.Empty);
+                    content = content.Replace("<None Include=\"Assets\\Scripts\\Empty\\AllModel\\Unity.AllModel.asmdef\" />", string.Empty);
+
+                    content = GenerateCustomProject(path, content,
+                        @"Assets\Scripts\Codes\Model\Server\**\*.cs Server\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Model\Client\**\*.cs Client\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Model\Share\**\*.cs Share\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Model\Generate\ClientServer\**\*.cs Generate\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\ModelView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)"
+                        );
+                    content = content.Replace("<Target Name=\"AfterBuild\" />",
+                        "   <Target Name=\"AfterBuild\">\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");
+                }
+                
+                if (path.EndsWith("Unity.AllHotfix.csproj"))
+                {
+                    content = content.Replace("<Compile Include=\"Assets\\Scripts\\Empty\\AllHotfix\\Empty.cs\" />", string.Empty);
+                    content = content.Replace("<None Include=\"Assets\\Scripts\\Empty\\AllHotfix\\Unity.AllHotfix.asmdef\" />", string.Empty);
+
+                    content = GenerateCustomProject(path, content,
+                        @"Assets\Scripts\Codes\Hotfix\**\*.cs %(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\HotfixView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)"
+                        );
+                    content = content.Replace("<Target Name=\"AfterBuild\" />",
+                        "   <Target Name=\"AfterBuild\">\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");
+                }
+                
+                if (path.EndsWith("Unity.AllCodes.csproj"))
+                {
+                    content = content.Replace("<Compile Include=\"Assets\\Scripts\\Empty\\AllCodes\\Empty.cs\" />", string.Empty);
+                    content = content.Replace("<None Include=\"Assets\\Scripts\\Empty\\AllCodes\\Unity.AllCodes.asmdef\" />", string.Empty);
+
+                    content = GenerateCustomProject(path, content,
+                        @"Assets\Scripts\Codes\Model\Server\**\*.cs Server\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Model\Client\**\*.cs Client\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Model\Share\**\*.cs Share\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Model\Generate\ClientServer\**\*.cs Generate\%(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\Hotfix\**\*.cs %(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\ModelView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)",
+                        @"Assets\Scripts\Codes\HotfixView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)"
+                        );
+                    content = content.Replace("<Target Name=\"AfterBuild\" />",
+                        "   <Target Name=\"AfterBuild\">\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;
             return content;
         }
         }
@@ -88,6 +155,10 @@ namespace ET
 
 
             var rootNode = newDoc.GetElementsByTagName("Project")[0];
             var rootNode = newDoc.GetElementsByTagName("Project")[0];
 
 
+            var target = newDoc.CreateElement("Target", newDoc.DocumentElement.NamespaceURI);
+            target.SetAttribute("Name", "AfterBuild");
+            rootNode.AppendChild(target);
+
             XmlElement itemGroup = newDoc.CreateElement("ItemGroup", newDoc.DocumentElement.NamespaceURI);
             XmlElement itemGroup = newDoc.CreateElement("ItemGroup", newDoc.DocumentElement.NamespaceURI);
             foreach (var s in links)
             foreach (var s in links)
             {
             {

+ 4 - 6
Unity/Assets/Scripts/Editor/BuildEditor/BuildAssembliesHelper.cs

@@ -11,8 +11,6 @@ namespace ET
 {
 {
     public static class BuildAssembliesHelper
     public static class BuildAssembliesHelper
     {
     {
-        public const string CodeDir = "Assets/Bundles/Code/";
-
         public static void BuildModel(CodeOptimization codeOptimization, GlobalConfig globalConfig)
         public static void BuildModel(CodeOptimization codeOptimization, GlobalConfig globalConfig)
         {
         {
             List<string> codes;
             List<string> codes;
@@ -53,8 +51,8 @@ namespace ET
 
 
             BuildAssembliesHelper.BuildMuteAssembly("Model", codes, Array.Empty<string>(), codeOptimization, globalConfig.CodeMode);
             BuildAssembliesHelper.BuildMuteAssembly("Model", codes, Array.Empty<string>(), codeOptimization, globalConfig.CodeMode);
 
 
-            File.Copy(Path.Combine(Define.BuildOutputDir, $"Model.dll"), Path.Combine(CodeDir, $"Model.dll.bytes"), true);
-            File.Copy(Path.Combine(Define.BuildOutputDir, $"Model.pdb"), Path.Combine(CodeDir, $"Model.pdb.bytes"), true);
+            File.Copy(Path.Combine(Define.BuildOutputDir, $"Model.dll"), Path.Combine(Define.CodeDir, $"Model.dll.bytes"), true);
+            File.Copy(Path.Combine(Define.BuildOutputDir, $"Model.pdb"), Path.Combine(Define.CodeDir, $"Model.pdb.bytes"), true);
             Debug.Log("copy Model.dll to Bundles/Code success!");
             Debug.Log("copy Model.dll to Bundles/Code success!");
         }
         }
 
 
@@ -102,8 +100,8 @@ namespace ET
             BuildAssembliesHelper.BuildMuteAssembly("Hotfix", codes, new[] { Path.Combine(Define.BuildOutputDir, "Model.dll") }, codeOptimization,
             BuildAssembliesHelper.BuildMuteAssembly("Hotfix", codes, new[] { Path.Combine(Define.BuildOutputDir, "Model.dll") }, codeOptimization,
                 globalConfig.CodeMode);
                 globalConfig.CodeMode);
 
 
-            File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.dll"), Path.Combine(CodeDir, $"Hotfix.dll.bytes"), true);
-            File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.pdb"), Path.Combine(CodeDir, $"Hotfix.pdb.bytes"), true);
+            File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.dll"), Path.Combine(Define.CodeDir, $"Hotfix.dll.bytes"), true);
+            File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.pdb"), Path.Combine(Define.CodeDir, $"Hotfix.pdb.bytes"), true);
             File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.dll"), Path.Combine(Define.BuildOutputDir, $"{logicFile}.dll"), true);
             File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.dll"), Path.Combine(Define.BuildOutputDir, $"{logicFile}.dll"), true);
             File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.pdb"), Path.Combine(Define.BuildOutputDir, $"{logicFile}.pdb"), true);
             File.Copy(Path.Combine(Define.BuildOutputDir, "Hotfix.pdb"), Path.Combine(Define.BuildOutputDir, $"{logicFile}.pdb"), true);
             Debug.Log("copy Hotfix.dll to Bundles/Code success!");
             Debug.Log("copy Hotfix.dll to Bundles/Code success!");

+ 15 - 1
Unity/Assets/Scripts/Editor/BuildEditor/BuildEditor.cs

@@ -7,6 +7,7 @@ using UnityEditor;
 using UnityEditor.Compilation;
 using UnityEditor.Compilation;
 using UnityEngine;
 using UnityEngine;
 using Debug = UnityEngine.Debug;
 using Debug = UnityEngine.Debug;
+#pragma warning disable CS0162
 
 
 namespace ET
 namespace ET
 {
 {
@@ -129,6 +130,11 @@ namespace ET
 				{
 				{
 					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
 					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
 				}
 				}
+				if (SerializeHelper.UseMemoryPack)
+				{
+					throw new Exception("now in UseMemoryPack mode, you should use ide Build Unity.AllCodes project!");
+				}
+				
 				BuildAssembliesHelper.BuildModel(this.codeOptimization, globalConfig);
 				BuildAssembliesHelper.BuildModel(this.codeOptimization, globalConfig);
 				BuildAssembliesHelper.BuildHotfix(this.codeOptimization, globalConfig);
 				BuildAssembliesHelper.BuildHotfix(this.codeOptimization, globalConfig);
 
 
@@ -143,6 +149,10 @@ namespace ET
 				{
 				{
 					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
 					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
 				}
 				}
+				if (SerializeHelper.UseMemoryPack)
+				{
+					throw new Exception("now in UseMemoryPack mode, you should use ide Build Unity.AllCodes project!");
+				}
 				BuildAssembliesHelper.BuildModel(this.codeOptimization, globalConfig);
 				BuildAssembliesHelper.BuildModel(this.codeOptimization, globalConfig);
 
 
 				AfterCompiling();
 				AfterCompiling();
@@ -156,6 +166,10 @@ namespace ET
 				{
 				{
 					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
 					throw new Exception("now in ENABLE_CODES mode, do not need Build!");
 				}
 				}
+				if (SerializeHelper.UseMemoryPack)
+				{
+					throw new Exception("now in UseMemoryPack mode, you should use ide Build Unity.AllCodes project!");
+				}
 				BuildAssembliesHelper.BuildHotfix(this.codeOptimization, globalConfig);
 				BuildAssembliesHelper.BuildHotfix(this.codeOptimization, globalConfig);
 
 
 				AfterCompiling();
 				AfterCompiling();
@@ -185,7 +199,7 @@ namespace ET
 		
 		
 		private static void AfterCompiling()
 		private static void AfterCompiling()
 		{
 		{
-			Directory.CreateDirectory(BuildAssembliesHelper.CodeDir);
+			Directory.CreateDirectory(Define.CodeDir);
 
 
 			// 设置ab包
 			// 设置ab包
 			AssetImporter assetImporter = AssetImporter.GetAtPath("Assets/Bundles/Code");
 			AssetImporter assetImporter = AssetImporter.GetAtPath("Assets/Bundles/Code");

+ 8 - 0
Unity/Assets/Scripts/Empty/AllCodes.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b55a0b558962b416daebf36140117988
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 0
Unity/Assets/Scripts/Empty/AllCodes/Empty.cs

@@ -0,0 +1 @@
+//用于自动生成工程项目的占位脚本,请勿移除或修改

+ 11 - 0
Unity/Assets/Scripts/Empty/AllCodes/Empty.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: acb2975e3c5cf492f8f9ee1933260449
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 20 - 0
Unity/Assets/Scripts/Empty/AllCodes/Unity.AllCodes.asmdef

@@ -0,0 +1,20 @@
+{
+    "name": "Unity.AllCodes",
+    "rootNamespace": "ET",
+    "references": [
+        "Unity.ThirdParty",
+        "Unity.Core",
+        "Unity.Mathematics",
+        "Unity.Loader",
+        "MemoryPack"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": true,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Scripts/Empty/AllCodes/Unity.AllCodes.asmdef.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 53b9e14ab660a42008a62652f4983e8d
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Scripts/Empty/AllHotfix.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 145d237b357c142828a4367b157bd2a0
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 0
Unity/Assets/Scripts/Empty/AllHotfix/Empty.cs

@@ -0,0 +1 @@
+//用于自动生成工程项目的占位脚本,请勿移除或修改

+ 11 - 0
Unity/Assets/Scripts/Empty/AllHotfix/Empty.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 40691c691d6f84e41baccfa582995eef
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 21 - 0
Unity/Assets/Scripts/Empty/AllHotfix/Unity.AllHotfix.asmdef

@@ -0,0 +1,21 @@
+{
+    "name": "Unity.AllHotfix",
+    "rootNamespace": "ET",
+    "references": [
+        "Unity.AllModel",
+        "Unity.ThirdParty",
+        "Unity.Core",
+        "Unity.Mathematics",
+        "Unity.Loader",
+        "MemoryPack"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": true,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Scripts/Empty/AllHotfix/Unity.AllHotfix.asmdef.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4d44f3e295a424180985a9e3b669a622
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Unity/Assets/Scripts/Empty/AllModel.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d9047ea8e8abb4acfa9b45893fc26a62
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 0
Unity/Assets/Scripts/Empty/AllModel/Empty.cs

@@ -0,0 +1 @@
+//用于自动生成工程项目的占位脚本,请勿移除或修改

+ 11 - 0
Unity/Assets/Scripts/Empty/AllModel/Empty.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f4b3e914665ac483faa99a65622465b8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 20 - 0
Unity/Assets/Scripts/Empty/AllModel/Unity.AllModel.asmdef

@@ -0,0 +1,20 @@
+{
+    "name": "Unity.AllModel",
+    "rootNamespace": "ET",
+    "references": [
+        "Unity.ThirdParty",
+        "Unity.Core",
+        "Unity.Mathematics",
+        "MemoryPack",
+        "Unity.Loader"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": true,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}

+ 7 - 0
Unity/Assets/Scripts/Empty/AllModel/Unity.AllModel.asmdef.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2c6a2532a636647e5b38390decca9791
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 3 - 4
Unity/Assets/Scripts/Empty/Hotfix/Unity.Hotfix.asmdef

@@ -6,11 +6,10 @@
         "Unity.ThirdParty",
         "Unity.ThirdParty",
         "Unity.Core",
         "Unity.Core",
         "Unity.Mathematics",
         "Unity.Mathematics",
-        "Unity.Loader"
-    ],
-    "includePlatforms": [
-        "Editor"
+        "Unity.Loader",
+        "MemoryPack"
     ],
     ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,

+ 3 - 4
Unity/Assets/Scripts/Empty/HotfixView/Unity.HotfixView.asmdef

@@ -8,11 +8,10 @@
         "Unity.ModelView",
         "Unity.ModelView",
         "Unity.Core",
         "Unity.Core",
         "Unity.Mathematics",
         "Unity.Mathematics",
-        "Unity.Loader"
-    ],
-    "includePlatforms": [
-        "Editor"
+        "Unity.Loader",
+        "MemoryPack"
     ],
     ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,

+ 3 - 4
Unity/Assets/Scripts/Empty/Model/Unity.Model.asmdef

@@ -4,11 +4,10 @@
     "references": [
     "references": [
         "Unity.ThirdParty",
         "Unity.ThirdParty",
         "Unity.Core",
         "Unity.Core",
-        "Unity.Mathematics"
-    ],
-    "includePlatforms": [
-        "Editor"
+        "Unity.Mathematics",
+        "MemoryPack"
     ],
     ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,

+ 3 - 4
Unity/Assets/Scripts/Empty/ModelView/Unity.ModelView.asmdef

@@ -6,11 +6,10 @@
         "Unity.ThirdParty",
         "Unity.ThirdParty",
         "Unity.Core",
         "Unity.Core",
         "Unity.Mathematics",
         "Unity.Mathematics",
-        "Unity.Loader"
-    ],
-    "includePlatforms": [
-        "Editor"
+        "Unity.Loader",
+        "MemoryPack"
     ],
     ],
+    "includePlatforms": [],
     "excludePlatforms": [],
     "excludePlatforms": [],
     "allowUnsafeCode": true,
     "allowUnsafeCode": true,
     "overrideReferences": false,
     "overrideReferences": false,

+ 14 - 2
Unity/Assets/Scripts/Loader/CodeLoader.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.IO;
 using System.Reflection;
 using System.Reflection;
 using UnityEngine;
 using UnityEngine;
+#pragma warning disable CS0162
 
 
 namespace ET
 namespace ET
 {
 {
@@ -54,9 +55,17 @@ namespace ET
 				}
 				}
 			
 			
 				this.model = Assembly.Load(assBytes, pdbBytes);
 				this.model = Assembly.Load(assBytes, pdbBytes);
-				this.LoadHotfix();
+
+				if (SerializeHelper.UseMemoryPack)
+				{
+					Dictionary<string, Type> types = AssemblyHelper.GetAssemblyTypes(typeof (Game).Assembly, typeof(Init).Assembly, this.model);
+					EventSystem.Instance.Add(types);
+				}
+				else
+				{
+					this.LoadHotfix();
+				}
 			}
 			}
-			
 			IStaticMethod start = new StaticMethod(this.model, "ET.Entry", "Start");
 			IStaticMethod start = new StaticMethod(this.model, "ET.Entry", "Start");
 			start.Run();
 			start.Run();
 		}
 		}
@@ -83,6 +92,9 @@ namespace ET
 				string logicName = Path.GetFileNameWithoutExtension(logicFiles[0]);
 				string logicName = Path.GetFileNameWithoutExtension(logicFiles[0]);
 				assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, $"{logicName}.dll"));
 				assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, $"{logicName}.dll"));
 				pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, $"{logicName}.pdb"));
 				pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, $"{logicName}.pdb"));
+				
+				//assBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Hotfix.dll"));
+				//pdbBytes = File.ReadAllBytes(Path.Combine(Define.BuildOutputDir, "Hotfix.pdb"));
 			}
 			}
 
 
 			Assembly hotfixAssembly = Assembly.Load(assBytes, pdbBytes);
 			Assembly hotfixAssembly = Assembly.Load(assBytes, pdbBytes);

+ 8 - 2
Unity/Assets/Scripts/Loader/Define.cs

@@ -2,8 +2,14 @@
 {
 {
 	public static class Define
 	public static class Define
 	{
 	{
-		public const string BuildOutputDir = "./Temp/Bin/Debug";
-
+		public const string CodeDir = "Assets/Bundles/Code/";
+		public const string BuildOutputDir = "Temp/Bin/Debug";
+#if DEBUG
+		public static bool IsDebug = true;
+#else
+		public static bool IsDebug = false;
+#endif
+		
 #if UNITY_EDITOR && !ASYNC
 #if UNITY_EDITOR && !ASYNC
 		public static bool IsAsync = false;
 		public static bool IsAsync = false;
 #else
 #else

+ 0 - 25
Unity/Assets/Scripts/Loader/MonoBehaviour/Init.cs

@@ -1,9 +1,6 @@
 using System;
 using System;
-using System.Buffers;
-using System.Collections.Generic;
 using System.Threading;
 using System.Threading;
 using CommandLine;
 using CommandLine;
-using MemoryPack;
 using UnityEngine;
 using UnityEngine;
 
 
 namespace ET
 namespace ET
@@ -39,32 +36,10 @@ namespace ET
 			ETTask.ExceptionHandler += Log.Error;
 			ETTask.ExceptionHandler += Log.Error;
 
 
 			Game.AddSingleton<CodeLoader>().Start();
 			Game.AddSingleton<CodeLoader>().Start();
-			
-			this.cc = new Cc() { aaa = new Aa()};
-			cc.bbb = new List<Bb>();
-			cc.bbb.Add(new Bb() {B = 5});
-			cc.ccc = new Dictionary<long, Bb>();
-			cc.ccc.Add(1, new Bb() {B = 4});
-			fixedArrayBufferWriter = new FixedArrayBufferWriter(this.bytes);
-			//Dd d = new Dd() { aaa = 1, bbb = "ggs" };
-			//d.ccc = new List<int>() { 1, 2, 3 };
-			//bytes = MemoryPackSerializer.Serialize(d);
 		}
 		}
 
 
-		private byte[] bytes = new byte[1024];
-		private Cc cc;
-		private Cc cs = new Cc() {bbb = new List<Bb>(), ccc = new Dictionary<long, Bb>()};
-		private Dd dd;
-
-		private FixedArrayBufferWriter fixedArrayBufferWriter;
-
 		private void Update()
 		private void Update()
 		{
 		{
-			fixedArrayBufferWriter.Reset(this.bytes);
-			MemoryPackSerializer.Serialize(typeof(Cc), fixedArrayBufferWriter, this.cc);
-			MemoryPackSerializer.Deserialize(bytes, ref this.cs);
-			//this.bytes = MemoryPackSerializer.Serialize(this.cc);
-			//MemoryPackSerializer.Deserialize(bytes, ref this.cs);
 			Game.Update();
 			Game.Update();
 		}
 		}
 
 

+ 1 - 1
Unity/Directory.Build.props

@@ -1,6 +1,6 @@
 <Project>
 <Project>
   <PropertyGroup>
   <PropertyGroup>
     <LangVersion>11.0</LangVersion>
     <LangVersion>11.0</LangVersion>
-    <NoWarn>0169,0649,3021</NoWarn>
+    <NoWarn>0169,0649,3021,8981</NoWarn>
   </PropertyGroup>
   </PropertyGroup>
 </Project>
 </Project>

+ 16 - 0
Unity/ProjectSettings/BurstAotSettings_Android.json

@@ -0,0 +1,16 @@
+{
+  "MonoBehaviour": {
+    "Version": 4,
+    "EnableBurstCompilation": true,
+    "EnableOptimisations": true,
+    "EnableSafetyChecks": false,
+    "EnableDebugInAllBuilds": false,
+    "EnableArmv9SecurityFeatures": false,
+    "CpuMinTargetX32": 0,
+    "CpuMaxTargetX32": 0,
+    "CpuMinTargetX64": 0,
+    "CpuMaxTargetX64": 0,
+    "CpuTargetsArm64": 512,
+    "OptimizeFor": 0
+  }
+}

+ 15 - 0
Unity/ProjectSettings/BurstAotSettings_iOS.json

@@ -0,0 +1,15 @@
+{
+  "MonoBehaviour": {
+    "Version": 4,
+    "EnableBurstCompilation": true,
+    "EnableOptimisations": true,
+    "EnableSafetyChecks": false,
+    "EnableDebugInAllBuilds": false,
+    "EnableArmv9SecurityFeatures": false,
+    "CpuMinTargetX32": 0,
+    "CpuMaxTargetX32": 0,
+    "CpuMinTargetX64": 0,
+    "CpuMaxTargetX64": 0,
+    "OptimizeFor": 0
+  }
+}

+ 1 - 1
Unity/ProjectSettings/ProjectSettings.asset

@@ -859,7 +859,7 @@ PlayerSettings:
   allowUnsafeCode: 1
   allowUnsafeCode: 1
   useDeterministicCompilation: 1
   useDeterministicCompilation: 1
   enableRoslynAnalyzers: 1
   enableRoslynAnalyzers: 1
-  selectedPlatform: 3
+  selectedPlatform: 0
   additionalIl2CppArgs: 
   additionalIl2CppArgs: 
   scriptingRuntimeVersion: 1
   scriptingRuntimeVersion: 1
   gcIncremental: 0
   gcIncremental: 0