Ver Fonte

把帧同步基础框架挪到Model中,方便打包修改

tanghai há 2 anos atrás
pai
commit
ad83fd4180
34 ficheiros alterados com 129 adições e 86 exclusões
  1. 0 3
      Unity/Assets/Scripts/Core/LockStep/IRollbackSystem.cs.meta
  2. 0 3
      Unity/Assets/Scripts/Core/LockStep/LSInput.cs.meta
  3. 0 3
      Unity/Assets/Scripts/Core/LockStep/RollbackHelper.cs.meta
  4. 0 20
      Unity/Assets/Scripts/Core/Serialize/MemoryPackHelper.cs
  5. 1 7
      Unity/Assets/Scripts/Core/Serialize/MongoHelper.cs
  6. 0 12
      Unity/Assets/Scripts/Hotfix/Client/LockStep/MyUnitHelper.cs
  7. 0 3
      Unity/Assets/Scripts/Hotfix/Client/LockStep/MyUnitHelper.cs.meta
  8. 1 1
      Unity/Assets/Scripts/HotfixView/Client/LockStep/LSUnitViewComponentSystem.cs
  9. 2 2
      Unity/Assets/Scripts/Model/Share/Entry.cs
  10. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/ILSUpdateSystem.cs
  11. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/ILSUpdateSystem.cs.meta
  12. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/IRollbackSystem.cs
  13. 11 0
      Unity/Assets/Scripts/Model/Share/LockStep/IRollbackSystem.cs.meta
  14. 9 5
      Unity/Assets/Scripts/Model/Share/LockStep/LSEntity.cs
  15. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSEntity.cs.meta
  16. 40 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSEntityRef.cs
  17. 11 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSEntityRef.cs.meta
  18. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSInput.cs
  19. 11 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSInput.cs.meta
  20. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSSington.cs
  21. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSSington.cs.meta
  22. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSSystemAttribute.cs
  23. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSSystemAttribute.cs.meta
  24. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSUnit.cs
  25. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSUnit.cs.meta
  26. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/LSUnitComponent.cs
  27. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSUnitComponent.cs.meta
  28. 7 2
      Unity/Assets/Scripts/Model/Share/LockStep/LSUpdater.cs
  29. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSUpdater.cs.meta
  30. 16 16
      Unity/Assets/Scripts/Model/Share/LockStep/LSWorld.cs
  31. 1 1
      Unity/Assets/Scripts/Model/Share/LockStep/LSWorld.cs.meta
  32. 0 0
      Unity/Assets/Scripts/Model/Share/LockStep/RollbackHelper.cs
  33. 11 0
      Unity/Assets/Scripts/Model/Share/LockStep/RollbackHelper.cs.meta
  34. 1 1
      Unity/ProjectSettings/ProjectSettings.asset

+ 0 - 3
Unity/Assets/Scripts/Core/LockStep/IRollbackSystem.cs.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: e654e53cfb1342b89b4f886681358d6b
-timeCreated: 1682304648

+ 0 - 3
Unity/Assets/Scripts/Core/LockStep/LSInput.cs.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 0add573f7e4f487cb06c7c034786504c
-timeCreated: 1682006926

+ 0 - 3
Unity/Assets/Scripts/Core/LockStep/RollbackHelper.cs.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 595d906817ce4666981a65ecd20bf8cb
-timeCreated: 1682306645

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

@@ -1,31 +1,11 @@
 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);

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

@@ -82,10 +82,9 @@ namespace ET
         [StaticField]
         private static readonly JsonWriterSettings defaultSettings = new() { OutputMode = JsonOutputMode.RelaxedExtendedJson };
 
-        static MongoHelper()
+        public static void Register()
         {
             // 自动注册IgnoreExtraElements
-
             ConventionPack conventionPack = new ConventionPack { new IgnoreExtraElementsConvention(true) };
 
             ConventionRegistry.Register("IgnoreExtraElements", conventionPack, type => true);
@@ -100,7 +99,6 @@ namespace ET
             RegisterStruct<TSVector2>();
             RegisterStruct<TSVector4>();
             RegisterStruct<TSQuaternion>();
-            RegisterStruct<LSInput>();
 
             Dictionary<string, Type> types = EventSystem.Instance.GetTypes();
             foreach (Type type in types.Values)
@@ -119,10 +117,6 @@ namespace ET
             }
         }
 
-        public static void Init()
-        {
-        }
-
         public static void RegisterStruct<T>() where T : struct
         {
             BsonSerializer.RegisterSerializer(typeof (T), new StructBsonSerialize<T>());

+ 0 - 12
Unity/Assets/Scripts/Hotfix/Client/LockStep/MyUnitHelper.cs

@@ -1,12 +0,0 @@
-namespace ET.Client
-{
-    public static class MyUnitHelper
-    {
-        public static LSUnit GetMyUnitF(this Room scene)
-        {
-            PlayerComponent playerComponent = scene.GetParent<Scene>().GetComponent<PlayerComponent>();
-            long myId = playerComponent.MyId;
-            return scene.LSWorld.Get(myId) as LSUnit;
-        }
-    }
-}

+ 0 - 3
Unity/Assets/Scripts/Hotfix/Client/LockStep/MyUnitHelper.cs.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: ee3848bb84284c0e8b5b159d8e70cc54
-timeCreated: 1681708021

+ 1 - 1
Unity/Assets/Scripts/HotfixView/Client/LockStep/LSUnitViewComponentSystem.cs

@@ -22,7 +22,7 @@ namespace ET.Client
                 LSWorld lsWorld = room.LSWorld;
                 foreach (long playerId in room.PlayerIds)
                 {
-                    LSUnit unit = lsWorld.Get(playerId) as LSUnit;
+                    LSUnit unit = lsWorld.LSUnitComponent.GetChild<LSUnit>(playerId);
                     LSUnitView child = self.GetChild<LSUnitView>(playerId);
                     Vector3 pos = child.Transform.position;
                     Vector3 to = unit.Position.ToVector();

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

@@ -34,8 +34,8 @@ namespace ET
         {
             WinPeriod.Init();
             
-            MongoHelper.Init();
-            MemoryPackHelper.Init();
+            MongoHelper.RegisterStruct<LSInput>();
+            MongoHelper.Register();
 
             Game.AddSingleton<NetServices>();
             Game.AddSingleton<Root>();

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/ILSUpdateSystem.cs → Unity/Assets/Scripts/Model/Share/LockStep/ILSUpdateSystem.cs


+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/ILSUpdateSystem.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/ILSUpdateSystem.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 6c1a6e61f7fd340b78e459001efe4d93
+guid: 2dc2986d4ec384cad9cf41a6eef3f6eb
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/IRollbackSystem.cs → Unity/Assets/Scripts/Model/Share/LockStep/IRollbackSystem.cs


+ 11 - 0
Unity/Assets/Scripts/Model/Share/LockStep/IRollbackSystem.cs.meta

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

+ 9 - 5
Unity/Assets/Scripts/Core/LockStep/LSEntity.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSEntity.cs

@@ -44,6 +44,13 @@ namespace ET
             return this.AddChildWithId<T, A, B, C>(this.GetId(), a, b, c, isFromPool);
         }
 
+        public override void Dispose()
+        {
+            base.Dispose();
+
+            this.Id = 0;
+        }
+
         public override IScene Domain
         {
             get
@@ -60,13 +67,10 @@ namespace ET
                     return;
                 }
 
+                LSWorld lsWorld = this.DomainScene();
                 if (newIsRegister)
                 {
-                    this.DomainScene().Add(this);
-                }
-                else
-                {
-                    this.DomainScene().Remove(this.Id);
+                    lsWorld.RegisterSystem(this);
                 }
             }
         }

+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSEntity.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSEntity.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 534f924ed889f4872a239ff138b9337d
+guid: 3c56b3bb10000446c8e48f82b6969093
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 40 - 0
Unity/Assets/Scripts/Model/Share/LockStep/LSEntityRef.cs

@@ -0,0 +1,40 @@
+namespace ET
+{
+    public readonly struct LSEntityRef<T> where T: LSEntity
+    {
+        private readonly long id;
+        private readonly T entity;
+
+        private LSEntityRef(T t)
+        {
+            this.id = t.Id;
+            this.entity = t;
+        }
+        
+        private T UnWrap
+        {
+            get
+            {
+                if (this.entity == null)
+                {
+                    return null;
+                }
+                if (this.entity.Id != this.id)
+                {
+                    return null;
+                }
+                return this.entity;
+            }
+        }
+        
+        public static implicit operator LSEntityRef<T>(T t)
+        {
+            return new LSEntityRef<T>(t);
+        }
+
+        public static implicit operator T(LSEntityRef<T> v)
+        {
+            return v.UnWrap;
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Model/Share/LockStep/LSEntityRef.cs.meta

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

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/LSInput.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSInput.cs


+ 11 - 0
Unity/Assets/Scripts/Model/Share/LockStep/LSInput.cs.meta

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

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/LSSington.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSSington.cs


+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSSington.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSSington.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: d53219a0618194d7ca9743bc7bc4e78c
+guid: 5ce95fa13386040b9bfad6be674fc69a
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/LSSystemAttribute.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSSystemAttribute.cs


+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSSystemAttribute.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSSystemAttribute.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 972eb707281ef4e72b36bebaab59cfe1
+guid: 56d67c3eee436459aa79c9a4008dfdd8
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/LSUnit.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSUnit.cs


+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSUnit.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSUnit.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: e4863a354356c4627a25ce6f4be81837
+guid: c62694a15545f4b599f146f8a44e417c
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/LSUnitComponent.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSUnitComponent.cs


+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSUnitComponent.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSUnitComponent.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f4dd48d3bba0649829bb1caa3aa25da7
+guid: a9b77ec7663d54ec88ba2a0297314aef
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 7 - 2
Unity/Assets/Scripts/Core/LockStep/LSUpdater.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSUpdater.cs

@@ -11,6 +11,8 @@ namespace ET
         
         private SortedSet<long> updateIds = new();
 
+        private Dictionary<long, LSEntityRef<LSEntity>> lsEntities = new();
+
         private Queue<long> addUpdateIds = new();
 
         private Queue<long> removeUpdateIds = new();
@@ -24,7 +26,7 @@ namespace ET
 
             foreach (long id in this.updateIds)
             {
-                LSEntity entity = this.Parent.Get(id);
+                LSEntity entity = lsEntities[id];
                 if (entity == null)
                 {
                     this.removeUpdateIds.Enqueue(id);
@@ -36,13 +38,16 @@ namespace ET
 
             while (this.removeUpdateIds.Count > 0)
             {
-                this.updateIds.Remove(this.removeUpdateIds.Dequeue());
+                long id = this.removeUpdateIds.Dequeue();
+                this.updateIds.Remove(id);
+                this.lsEntities.Remove(id);
             }
         }
         
         public void Add(LSEntity entity)
         {
             this.addUpdateIds.Enqueue(entity.Id);
+            this.lsEntities.Add(entity.Id, entity);
         }
     }
 }

+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSUpdater.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSUpdater.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 4a8feade209764bb7826f5d6e672f8d0
+guid: 654b3240c49c34319877c2dc7da81a5a
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 16 - 16
Unity/Assets/Scripts/Core/LockStep/LSWorld.cs → Unity/Assets/Scripts/Model/Share/LockStep/LSWorld.cs

@@ -58,27 +58,12 @@ namespace ET
             
             Log.Info($"LSScene create: {this.Id} {this.InstanceId}");
         }
-        
-        private readonly Dictionary<long, LSEntity> allLSEntities = new();
 
         [BsonElement]
         public LSUpdater Updater = new();
 
-        public LSEntity Get(long id)
-        {
-            this.allLSEntities.TryGetValue(id, out LSEntity entity);
-            return entity;
-        }
-
-        public void Remove(long id)
+        public void RegisterSystem(LSEntity entity) 
         {
-            this.allLSEntities.Remove(id);
-        }
-
-        public void Add(LSEntity entity) 
-        {
-            this.allLSEntities.Add(entity.Id, entity);
-
             TypeSystems.OneTypeSystems oneTypeSystems = LSSington.Instance.GetOneTypeSystems(entity.GetType());
             if (oneTypeSystems == null)
             {
@@ -91,6 +76,21 @@ namespace ET
             }
         }
 
+        private LSEntityRef<LSUnitComponent> lsUnitComponent;
+        
+        [BsonIgnore]
+        public LSUnitComponent LSUnitComponent
+        {
+            get
+            {
+                return this.lsUnitComponent;
+            }
+            set
+            {
+                this.lsUnitComponent = value;
+            }
+        }
+
         [BsonElement]
         private long idGenerator;
 

+ 1 - 1
Unity/Assets/Scripts/Core/LockStep/LSWorld.cs.meta → Unity/Assets/Scripts/Model/Share/LockStep/LSWorld.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: d34ee909d9d8449f0a98032ddb1b1971
+guid: 55f4993cd749b4da984b60fc8d0720a2
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Assets/Scripts/Core/LockStep/RollbackHelper.cs → Unity/Assets/Scripts/Model/Share/LockStep/RollbackHelper.cs


+ 11 - 0
Unity/Assets/Scripts/Model/Share/LockStep/RollbackHelper.cs.meta

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

+ 1 - 1
Unity/ProjectSettings/ProjectSettings.asset

@@ -841,7 +841,7 @@ PlayerSettings:
   scriptingDefineSymbols:
     Android: UNITY;SINGLE_THREAD
     Server: UNITY
-    Standalone: UNITY;SINGLE_THREAD;ENABLE_VIEW;ENABLE_CODES
+    Standalone: UNITY;SINGLE_THREAD;ENABLE_VIEW
     WebGL: UNITY
     iPhone: UNITY;SINGLE_THREAD;ENABLE_CODES
   additionalCompilerArguments: {}