tanghai 1 год назад
Родитель
Сommit
8310a9eb1a

+ 55 - 20
Unity/Packages/com.et.core/Runtime/Serialize/MongoHelper.cs

@@ -14,20 +14,34 @@ namespace ET
         
         public static string ToJson(object obj)
         {
-            if (obj is ISupportInitialize supportInitialize)
+            try
+            {
+                if (obj is ISupportInitialize supportInitialize)
+                {
+                    supportInitialize.BeginInit();
+                }
+                return obj.ToJson(defaultSettings);
+            }
+            catch (Exception e)
             {
-                supportInitialize.BeginInit();
+                throw new Exception($"to json error {obj.GetType().FullName}\n{e}");
             }
-            return obj.ToJson(defaultSettings);
         }
 
         public static string ToJson(object obj, JsonWriterSettings settings)
         {
-            if (obj is ISupportInitialize supportInitialize)
+            try
+            {
+                if (obj is ISupportInitialize supportInitialize)
+                {
+                    supportInitialize.BeginInit();
+                }
+                return obj.ToJson(settings);
+            }
+            catch (Exception e)
             {
-                supportInitialize.BeginInit();
+                throw new Exception($"to json error {obj.GetType().FullName}\n{e}");
             }
-            return obj.ToJson(settings);
         }
 
         public static T FromJson<T>(string str)
@@ -38,38 +52,59 @@ namespace ET
             }
             catch (Exception e)
             {
-                throw new Exception($"{str}\n{e}");
+                throw new Exception($"from json error: {str}\n{e}");
             }
         }
 
         public static object FromJson(Type type, string str)
         {
-            return BsonSerializer.Deserialize(str, type);
+            try
+            {
+                return BsonSerializer.Deserialize(str, type);
+            }
+            catch (Exception e)
+            {
+                throw new Exception($"from json error: {str}\n{e}");
+            }
         }
 
         public static byte[] Serialize(object obj)
         {
-            if (obj is ISupportInitialize supportInitialize)
+            try
+            {
+                if (obj is ISupportInitialize supportInitialize)
+                {
+                    supportInitialize.BeginInit();
+                }
+                return obj.ToBson();
+            }
+            catch (Exception e)
             {
-                supportInitialize.BeginInit();
+                throw new Exception($"Serialize error {obj.GetType().FullName}\n{e}");
             }
-            return obj.ToBson();
         }
 
         public static void Serialize(object message, MemoryStream stream)
         {
-            if (message is ISupportInitialize supportInitialize)
+            try
             {
-                supportInitialize.BeginInit();
-            }
+                if (message is ISupportInitialize supportInitialize)
+                {
+                    supportInitialize.BeginInit();
+                }
 
-            using BsonBinaryWriter bsonWriter = new(stream, BsonBinaryWriterSettings.Defaults);
+                using BsonBinaryWriter bsonWriter = new(stream, BsonBinaryWriterSettings.Defaults);
             
-            BsonSerializationContext context = BsonSerializationContext.CreateRoot(bsonWriter);
-            BsonSerializationArgs args = default;
-            args.NominalType = typeof (object);
-            IBsonSerializer serializer = BsonSerializer.LookupSerializer(args.NominalType);
-            serializer.Serialize(context, args, message);
+                BsonSerializationContext context = BsonSerializationContext.CreateRoot(bsonWriter);
+                BsonSerializationArgs args = default;
+                args.NominalType = typeof (object);
+                IBsonSerializer serializer = BsonSerializer.LookupSerializer(args.NominalType);
+                serializer.Serialize(context, args, message);
+            }
+            catch (Exception e)
+            {
+                throw new Exception($"Serialize error {message.GetType().FullName}\n{e}");
+            }
         }
 
         public static object Deserialize(Type type, byte[] bytes)

+ 1 - 1
Unity/Packages/com.et.core/Runtime/Serialize/MongoRegister.cs

@@ -8,7 +8,7 @@ namespace ET
 {
     public static class MongoRegister
     {
-        private static void RegisterStruct<T>() where T : struct
+        public static void RegisterStruct<T>() where T : struct
         {
             BsonSerializer.RegisterSerializer(typeof (T), new StructBsonSerialize<T>());
         }

+ 2 - 2
Unity/Packages/com.et.core/Runtime~/Model/Share/Entry.cs

@@ -38,7 +38,7 @@ namespace ET
             // 注册Entity序列化器
             EntitySerializeRegister.Init();
 
-            World.Instance.AddSingleton<SceneTypeSingleton, Type>(typeof(SceneType));
+            SceneTypeSingleton sceneTypeSingleton = World.Instance.AddSingleton<SceneTypeSingleton, Type>(typeof(SceneType));
             World.Instance.AddSingleton<ObjectPool>();
             World.Instance.AddSingleton<IdGenerater>();
             World.Instance.AddSingleton<OpcodeType>();
@@ -51,7 +51,7 @@ namespace ET
             CodeTypes.Instance.CreateCode();
             
             await World.Instance.AddSingleton<ConfigLoader>().LoadAsync();
-
+            
             await FiberManager.Instance.Create(SchedulerType.Main, SceneType.Main, 0, SceneType.Main, "");
         }
     }

+ 4 - 0
Unity/Packages/com.et.core/Runtime~/Model/Share/FiberInit_Main.cs

@@ -6,6 +6,10 @@
         public override async ETTask Handle(FiberInit fiberInit)
         {
             Scene root = fiberInit.Fiber.Root;
+            
+            int sceneType = SceneTypeSingleton.Instance.GetSceneType(Options.Instance.SceneName);
+            root.SceneType = sceneType;
+            
             await EventSystem.Instance.PublishAsync(root, new EntryEvent1());
             await EventSystem.Instance.PublishAsync(root, new EntryEvent2());
             await EventSystem.Instance.PublishAsync(root, new EntryEvent3());

+ 0 - 61
Unity/Packages/com.et.core/Runtime~/Model/Share/MongoRegister.cs

@@ -1,61 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using MongoDB.Bson.Serialization;
-using MongoDB.Bson.Serialization.Conventions;
-
-namespace ET
-{
-    public static class MongoRegister
-    {
-        private static void RegisterStruct<T>() where T : struct
-        {
-            BsonSerializer.RegisterSerializer(typeof (T), new StructBsonSerialize<T>());
-        }
-        
-        public static void Init()
-        {
-            // 清理老的数据
-            MethodInfo createSerializerRegistry = typeof (BsonSerializer).GetMethod("CreateSerializerRegistry", BindingFlags.Static | BindingFlags.NonPublic);
-            createSerializerRegistry.Invoke(null, Array.Empty<object>());
-            MethodInfo registerIdGenerators = typeof (BsonSerializer).GetMethod("RegisterIdGenerators", BindingFlags.Static | BindingFlags.NonPublic);
-            registerIdGenerators.Invoke(null, Array.Empty<object>());
-            
-            BsonSerializer.RegisterSerializer(typeof(ComponentsCollection), new BsonComponentsCollectionSerializer());
-            BsonSerializer.RegisterSerializer(typeof(ChildrenCollection), new BsonChildrenCollectionSerializer());
-            
-            
-            // 自动注册IgnoreExtraElements
-            ConventionPack conventionPack = new() { new IgnoreExtraElementsConvention(true) };
-
-            ConventionRegistry.Register("IgnoreExtraElements", conventionPack, type => true);
-
-            //RegisterStruct<float2>();
-            //RegisterStruct<float3>();
-            //RegisterStruct<float4>();
-            //RegisterStruct<quaternion>();
-            //RegisterStruct<FP>();
-            //RegisterStruct<TSVector>();
-            //RegisterStruct<TSVector2>();
-            //RegisterStruct<TSVector4>();
-            //RegisterStruct<TSQuaternion>();
-            //RegisterStruct<LSInput>();
-
-            Dictionary<string, Type> types = CodeTypes.Instance.GetTypes();
-            foreach (Type type in types.Values)
-            {
-                if (!type.IsSubclassOf(typeof (Object)))
-                {
-                    continue;
-                }
-
-                if (type.IsGenericType)
-                {
-                    continue;
-                }
-
-                BsonClassMap.LookupClassMap(type);
-            }
-        }
-    }
-}

+ 8 - 0
Unity/Packages/com.et.demores/Bundles.meta

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

+ 8 - 0
Unity/Packages/com.et.demores/Bundles/Unit.meta

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

+ 50 - 0
Unity/Packages/com.et.demores/Bundles/Unit/Unit.prefab

@@ -0,0 +1,50 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1610378981859644
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4373147931430276}
+  - component: {fileID: 114007285335791192}
+  m_Layer: 0
+  m_Name: Unit
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4373147931430276
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610378981859644}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &114007285335791192
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1610378981859644}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 502d8cafd6a5a0447ab1db9a24cdcb10, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  data:
+  - key: Skeleton
+    gameObject: {fileID: 1248987324363926, guid: 9e27b0bdab1ad7242a009899d15c0e67,
+      type: 3}

+ 7 - 0
Unity/Packages/com.et.demores/Bundles/Unit/Unit.prefab.meta

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

+ 4 - 1
Unity/Packages/com.et.loader/Runtime/MonoBehaviour/Init.cs

@@ -1,5 +1,6 @@
 using System;
 using CommandLine;
+using UnityEditor;
 using UnityEngine;
 
 namespace ET
@@ -25,7 +26,9 @@ namespace ET
             Parser.Default.ParseArguments<Options>(args)
                     .WithNotParsed(error => throw new Exception($"命令行格式错误! {error}"))
                     .WithParsed((o)=>World.Instance.AddSingleton(o));
-            Options.Instance.StartConfig = $"StartConfig/Localhost";
+
+            GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
+            Options.Instance.SceneName = globalConfig.SceneName;
 			
             World.Instance.AddSingleton<Logger>().Log = new UnityLogger();
             ETTask.ExceptionHandler += Log.Error;

+ 16 - 35
Unity/Packages/com.et.statesync/Runtime~/Hotfix/Server/EntryEvent2_InitServer.cs

@@ -1,48 +1,29 @@
-using System;
-using System.Net;
-
 namespace ET.Server
 {
-    [Event(SceneType.Main)]
+    [Event(SceneType.StateSync)]
     public class EntryEvent2_InitServer: AEvent<Scene, EntryEvent2>
     {
         protected override async ETTask Run(Scene root, EntryEvent2 args)
         {
-            int sceneType = SceneTypeSingleton.Instance.GetSceneType(Options.Instance.SceneName);
-            switch (sceneType)
+            World.Instance.AddSingleton<NavmeshComponent>();
+            
+            if (Options.Instance.Console == 1)
             {
-                case SceneType.Server:
-                {
-                    int process = root.Fiber.Process;
-                    StartProcessConfig startProcessConfig = StartProcessConfigCategory.Instance.Get(process);
-                    if (startProcessConfig.Port != 0)
-                    {
-                        await FiberManager.Instance.Create(SchedulerType.ThreadPool, SceneType.NetInner, 0, SceneType.NetInner, "NetInner");
-                    }
-
-                    // 根据配置创建纤程
-                    var processScenes = StartSceneConfigCategory.Instance.GetByProcess(process);
-                    foreach (StartSceneConfig startConfig in processScenes)
-                    {
-                        await FiberManager.Instance.Create(SchedulerType.ThreadPool, startConfig.Id, startConfig.Zone, startConfig.Type, startConfig.Name);
-                    }
-
-                    break;
-                }
-                case SceneType.Watcher:
-                {
-                    root.AddComponent<WatcherComponent>();
-                    break;
-                }
-                case SceneType.GameTool:
-                {
-                    break;
-                }
+                root.AddComponent<ConsoleComponent>();
+            }
+            
+            int process = root.Fiber.Process;
+            StartProcessConfig startProcessConfig = StartProcessConfigCategory.Instance.Get(process);
+            if (startProcessConfig.Port != 0)
+            {
+                await FiberManager.Instance.Create(SchedulerType.ThreadPool, SceneType.NetInner, 0, SceneType.NetInner, "NetInner");
             }
 
-            if (Options.Instance.Console == 1)
+            // 根据配置创建纤程
+            var processScenes = StartSceneConfigCategory.Instance.GetByProcess(process);
+            foreach (StartSceneConfig startConfig in processScenes)
             {
-                root.AddComponent<ConsoleComponent>();
+                await FiberManager.Instance.Create(SchedulerType.ThreadPool, startConfig.Id, startConfig.Zone, startConfig.Type, startConfig.Name);
             }
         }
     }

+ 14 - 0
Unity/Packages/com.et.statesync/Runtime~/Hotfix/Server/RecastFileLoader.cs

@@ -0,0 +1,14 @@
+using System;
+using System.IO;
+
+namespace ET
+{
+    [Invoke]
+    public class RecastFileReader: AInvokeHandler<NavmeshComponent.RecastFileLoader, byte[]>
+    {
+        public override byte[] Handle(NavmeshComponent.RecastFileLoader args)
+        {
+            return File.ReadAllBytes(Path.Combine("../Config/Recast", args.Name));
+        }
+    }
+}

+ 8 - 1
Unity/Packages/com.et.statesync/Runtime~/Hotfix/Share/StateSync/EntryEvent1_InitShare.cs

@@ -1,6 +1,8 @@
+using Unity.Mathematics;
+
 namespace ET
 {
-    [Event(SceneType.Main)]
+    [Event(SceneType.StateSync)]
     public class EntryEvent1_InitShare: AEvent<Scene, EntryEvent1>
     {
         protected override async ETTask Run(Scene root, EntryEvent1 args)
@@ -11,6 +13,11 @@ namespace ET
             root.AddComponent<MailBoxComponent, MailBoxType>(MailBoxType.UnOrderedMessage);
             root.AddComponent<ProcessInnerSender>();
             
+            MongoRegister.RegisterStruct<float2>();
+            MongoRegister.RegisterStruct<float3>();
+            MongoRegister.RegisterStruct<float4>();
+            MongoRegister.RegisterStruct<quaternion>();
+            
             await ETTask.CompletedTask;
         }
     }

+ 1 - 4
Unity/Packages/com.et.statesync/Runtime~/HotfixView/Client/EntryEvent3_InitClient.cs

@@ -4,7 +4,7 @@ using System.IO;
 
 namespace ET.Client
 {
-    [Event(SceneType.Main)]
+    [Event(SceneType.StateSync)]
     public class EntryEvent3_InitClient: AEvent<Scene, EntryEvent3>
     {
         protected override async ETTask Run(Scene root, EntryEvent3 args)
@@ -16,9 +16,6 @@ namespace ET.Client
             root.AddComponent<PlayerComponent>();
             root.AddComponent<CurrentScenesComponent>();
             
-            // 根据配置修改掉Main Fiber的SceneType
-            int sceneType = SceneTypeSingleton.Instance.GetSceneType(globalComponent.GlobalConfig.SceneName);
-            root.SceneType = sceneType;
             await EventSystem.Instance.PublishAsync(root, new AppStartInitFinish());
         }
     }

+ 1 - 1
Unity/Packages/com.et.statesync/Runtime~/HotfixView/Client/StateSync/Scene/SceneChangeStart_AddComponent.cs

@@ -15,7 +15,7 @@ namespace ET.Client
                 ResourcesLoaderComponent resourcesLoaderComponent = currentScene.GetComponent<ResourcesLoaderComponent>();
             
                 // 加载场景资源
-                await resourcesLoaderComponent.LoadSceneAsync($"Assets/Bundles/Scenes/{currentScene.Name}.unity", LoadSceneMode.Single);
+                await resourcesLoaderComponent.LoadSceneAsync($"Packages/com.et.demores/Scenes/{currentScene.Name}.unity", LoadSceneMode.Single);
                 // 切换到map场景
 
                 //await SceneManager.LoadSceneAsync(currentScene.Name);

+ 1 - 1
Unity/Packages/com.et.statesync/Runtime~/HotfixView/Client/StateSync/Unit/AfterUnitCreate_CreateUnitView.cs

@@ -9,7 +9,7 @@ namespace ET.Client
         {
             Unit unit = args.Unit;
             // Unit View层
-            string assetsName = $"Assets/Bundles/Unit/Unit.prefab";
+            string assetsName = $"Packages/com.et.demores/Bundles/Unit/Unit.prefab";
             GameObject bundleGameObject = await scene.GetComponent<ResourcesLoaderComponent>().LoadAssetAsync<GameObject>(assetsName);
             GameObject prefab = bundleGameObject.Get<GameObject>("Skeleton");
 

+ 13 - 0
Unity/Packages/com.et.statesync/Settings/AssetBundleCollectorSetting.asset

@@ -89,3 +89,16 @@ MonoBehaviour:
         FilterRuleName: CollectPrefab
         AssetTags: 
         UserData: 
+    - GroupName: Unit
+      GroupDesc: 
+      AssetTags: 
+      ActiveRuleName: EnableGroup
+      Collectors:
+      - CollectPath: Packages/com.et.demores/Bundles
+        CollectorGUID: c6bd2b470bea1414eb44ce0fbd88070e
+        CollectorType: 0
+        AddressRuleName: AddressByFileName
+        PackRuleName: PackSeparately
+        FilterRuleName: CollectPrefab
+        AssetTags: 
+        UserData: