diff --git a/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs b/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs index 7e4cfb8d..ac20b85d 100644 --- a/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs +++ b/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs @@ -1,33 +1,47 @@ using TEngine.EntityModule; using UnityEngine; -public class EcsDemoApp : MonoBehaviour +namespace TEngine { - public GameObject @object; - - void Start() + public class EcsDemoApp : MonoBehaviour { - var entity = Entity.Create(); - GameObjectCmpt actor = entity.AddComponent(); - actor.Name = typeof(GameObjectCmpt).ToString(); - actor.gameObject = Instantiate(@object); - actor.transform = actor.gameObject.GetComponent(); - entity.AddComponent(); - entity.CheckDebugInfo(actor.gameObject); - Debug.Log(entity.ToString()); + public GameObject @object; - var entity2 = Entity.Create(); - GameObjectCmpt actor2 = entity2.AddComponent(); - actor2.Name = typeof(GameObjectCmpt).ToString(); - actor2.gameObject = Instantiate(@object); - actor2.transform = actor2.gameObject.GetComponent(); - entity2.AddComponent(); - entity2.CheckDebugInfo(actor2.gameObject); - Debug.Log(entity2.ToString()); - } + void Start() + { + var entity = Entity.Create(); + entity.AddComponent(); + GameObjectCmpt actor = entity.AddComponent(); + actor.Name = typeof(GameObjectCmpt).ToString(); + actor.gameObject = Instantiate(@object); + actor.transform = actor.gameObject.GetComponent(); + entity.AddComponent(); + entity.CheckDebugInfo(actor.gameObject); + Debug.Log(entity.ToString()); - void Update() - { - EntitySystem.Instance.Update(); + var entity2 = Entity.Create(); + GameObjectCmpt actor2 = entity2.AddComponent(); + actor2.Name = typeof(GameObjectCmpt).ToString(); + actor2.gameObject = Instantiate(@object); + actor2.transform = actor2.gameObject.GetComponent(); + entity2.AddComponent(); + entity2.CheckDebugInfo(actor2.gameObject); + Debug.Log(entity2.ToString()); + + + + + TimerMgr.Instance.AddTimer((args => + { + Entity.Destroy(entity); + Entity.Destroy(entity2); + }), 3f,false); + } + + + void Update() + { + EntitySystem.Instance.Update(); + } } -} +} \ No newline at end of file diff --git a/Assets/TEngine/Runtime/Entity/Demo/TestUpdateCmpt.cs b/Assets/TEngine/Runtime/Entity/Demo/TestUpdateCmpt.cs new file mode 100644 index 00000000..ef898d0d --- /dev/null +++ b/Assets/TEngine/Runtime/Entity/Demo/TestUpdateCmpt.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TEngine; +using TEngine.EntityModule; + +public class TestUpdateCmpt : EntityComponent,IUpdate +{ + public void Update() + { + TLogger.LogInfo("update"); + } +} diff --git a/Assets/TEngine/Runtime/Entity/Demo/TestUpdateCmpt.cs.meta b/Assets/TEngine/Runtime/Entity/Demo/TestUpdateCmpt.cs.meta new file mode 100644 index 00000000..d8270c22 --- /dev/null +++ b/Assets/TEngine/Runtime/Entity/Demo/TestUpdateCmpt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb79036f03a4ecc4f9e5445e185abe50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Runtime/Entity/EcsObject.cs b/Assets/TEngine/Runtime/Entity/EcsObject.cs index f97d9c57..e870518c 100644 --- a/Assets/TEngine/Runtime/Entity/EcsObject.cs +++ b/Assets/TEngine/Runtime/Entity/EcsObject.cs @@ -60,6 +60,9 @@ namespace TEngine.EntityModule { if (ecsObject is EntityComponent entityComponent) { +#if UNITY_EDITOR + TLogger.LogWarning($"Destroy ID {entityComponent.InstanceId} EntityComponent{entityComponent.ToString()},reuse {reuse}"); +#endif entityComponent.Entity.Components.Remove(entityComponent); if (entityComponent is IUpdate update) { @@ -81,6 +84,9 @@ namespace TEngine.EntityModule } else if (ecsObject is Entity entity) { +#if UNITY_EDITOR + TLogger.LogWarning($"Destroy ID {entity.InstanceId} Entity{entity.ToString()},reuse {reuse}"); +#endif entity.System.RemoveEntity(entity); entity.OnDestroy(); while (entity.Components.Count > 0) diff --git a/Assets/TEngine/Runtime/Entity/Entity.cs b/Assets/TEngine/Runtime/Entity/Entity.cs index bf80a8e9..e887c8ec 100644 --- a/Assets/TEngine/Runtime/Entity/Entity.cs +++ b/Assets/TEngine/Runtime/Entity/Entity.cs @@ -165,6 +165,9 @@ namespace TEngine.EntityModule public static T Create() where T : Entity, new() { var entity = EntitySystem.Instance.Create(); +#if UNITY_EDITOR + TLogger.LogWarning($"Create ID {entity.InstanceId} EntityComponent{entity.ToString()}"); +#endif return entity; } #endregion diff --git a/Assets/TEngine/Runtime/Entity/EntityComponent.cs b/Assets/TEngine/Runtime/Entity/EntityComponent.cs index 40ac914c..f921ebe3 100644 --- a/Assets/TEngine/Runtime/Entity/EntityComponent.cs +++ b/Assets/TEngine/Runtime/Entity/EntityComponent.cs @@ -12,6 +12,9 @@ public static T Create() where T : EntityComponent, new() { var entity = EntitySystem.Instance.CreateComponent(); +#if UNITY_EDITOR + TLogger.LogInfoSuccessd($"Create ID {entity.InstanceId} EntityComponent{ entity.ToString()}"); +#endif return entity; } #endregion diff --git a/Assets/TEngine/Runtime/Entity/EntitySystem.cs b/Assets/TEngine/Runtime/Entity/EntitySystem.cs index 3a019359..fe2e7a27 100644 --- a/Assets/TEngine/Runtime/Entity/EntitySystem.cs +++ b/Assets/TEngine/Runtime/Entity/EntitySystem.cs @@ -26,6 +26,7 @@ namespace TEngine.EntityModule } private EntitySystem() { + Update(true); } /// /// Key -> HashSet(type) / Value -> Stack(EcsObject) diff --git a/Assets/TEngine/Runtime/Entity/GameObjectCmpt.cs b/Assets/TEngine/Runtime/Entity/GameObjectCmpt.cs index 648d6e90..ec842884 100644 --- a/Assets/TEngine/Runtime/Entity/GameObjectCmpt.cs +++ b/Assets/TEngine/Runtime/Entity/GameObjectCmpt.cs @@ -8,5 +8,13 @@ public string Name; public UnityEngine.GameObject gameObject; public UnityEngine.Transform transform; + + public override void OnDestroy() + { + if (gameObject != null) + { + UnityEngine.GameObject.Destroy(gameObject); + } + } } } \ No newline at end of file