diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs
new file mode 100644
index 00000000..12992ef7
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs
@@ -0,0 +1,72 @@
+using UnityEngine;
+
+namespace TEngine.Runtime.Entity
+{
+ public class EntityData : IMemory
+ {
+ protected Vector3 m_Position = Vector3.zero;
+
+ protected Quaternion m_Rotation = Quaternion.identity;
+
+ public EntityData()
+ {
+ m_Position = Vector3.zero;
+ m_Rotation = Quaternion.identity;
+ UserData = null;
+ }
+
+ ///
+ /// 实体位置。
+ ///
+ public Vector3 Position
+ {
+ get { return m_Position; }
+ set { m_Position = value; }
+ }
+
+ ///
+ /// 实体朝向。
+ ///
+ public Quaternion Rotation
+ {
+ get { return m_Rotation; }
+ set { m_Rotation = value; }
+ }
+
+ public object UserData { get; protected set; }
+
+ public static EntityData Create(object userData = null)
+ {
+ EntityData entityData = MemoryPool.Acquire();
+ entityData.Position = Vector3.zero;
+ entityData.Rotation = Quaternion.identity;
+ entityData.UserData = userData;
+ return entityData;
+ }
+
+ public static EntityData Create(Vector3 position, object userData = null)
+ {
+ EntityData entityData = MemoryPool.Acquire();
+ entityData.Position = position;
+ entityData.Rotation = Quaternion.identity;
+ entityData.UserData = userData;
+ return entityData;
+ }
+
+ public static EntityData Create(Vector3 position, Quaternion quaternion, object userData = null)
+ {
+ EntityData entityData = MemoryPool.Acquire();
+ entityData.Position = position;
+ entityData.Rotation = quaternion;
+ entityData.UserData = userData;
+ return entityData;
+ }
+
+ public virtual void Clear()
+ {
+ m_Position = Vector3.zero;
+ m_Rotation = Quaternion.identity;
+ UserData = null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs.meta b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs.meta
new file mode 100644
index 00000000..548ce332
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 414727f378e043a7800d009402172d15
+timeCreated: 1662376564
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs
new file mode 100644
index 00000000..50e6a1d3
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs
@@ -0,0 +1,39 @@
+namespace TEngine.Runtime.Entity
+{
+ public static class EntityExtension
+ {
+ private static int _serialId = 0;
+
+ ///
+ /// 生成客户端序列化ID,服务器默认不用
+ ///
+ ///
+ ///
+ public static int GenerateSerialId(this EntityComponent entityComponent)
+ {
+ return ++_serialId;
+ }
+
+ public static void ShowEntity(this EntityComponent entityComponent, int serialId, int entityId,
+ System.Type logicType, string assetPath, object userData = null, float autoReleaseInterval = 60f,
+ int capacity = 60,
+ float expireTime = 60f, int priority = 0)
+ {
+ if (serialId < 0)
+ {
+ Log.Error("Can not load entity id '{0}' from data table.", entityId.ToString());
+ return;
+ }
+
+ if (!entityComponent.HasEntityGroup(logicType.Name))
+ {
+ EntityComponent.Instance.AddEntityGroup(logicType.Name,
+ autoReleaseInterval, capacity,
+ expireTime, priority);
+ }
+
+ entityComponent.ShowEntity(serialId, logicType, assetPath, logicType.Name,
+ Constant.DefaultPriority, userData);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs.meta b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs.meta
new file mode 100644
index 00000000..c51760c6
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cfc72f38bbb4465aaabec8fd9d5a461d
+timeCreated: 1662376752
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs
new file mode 100644
index 00000000..e5260349
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs
@@ -0,0 +1,77 @@
+using UnityEngine;
+
+namespace TEngine.Runtime.Entity
+{
+ public abstract class EntityLogicEx : EntityLogic
+ {
+ [SerializeField] private EntityData m_EntityData = null;
+
+ public int Id
+ {
+ get { return Entity.Id; }
+ }
+
+ public Animation Animation { get; private set; }
+
+ protected internal override void OnInit(object userData)
+ {
+ base.OnInit(userData);
+ Animation = GetComponent();
+ }
+
+ protected internal override void OnRecycle()
+ {
+ base.OnRecycle();
+ }
+
+ protected internal override void OnShow(object userData)
+ {
+ base.OnShow(userData);
+
+ m_EntityData = userData as EntityData;
+ if (m_EntityData == null)
+ {
+ Log.Error("Entity data is invalid.");
+ return;
+ }
+
+ Name = Utility.Text.Format("[Entity {0}]", Id.ToString());
+ CachedTransform.localPosition = m_EntityData.Position;
+ CachedTransform.localRotation = m_EntityData.Rotation;
+ CachedTransform.localScale = Vector3.one;
+ }
+
+ protected internal override void OnHide(bool isShutdown, object userData)
+ {
+ base.OnHide(isShutdown, userData);
+
+ MemoryPool.Release(m_EntityData);
+ }
+
+ protected internal override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
+ {
+ base.OnAttached(childEntity, parentTransform, userData);
+ }
+
+ protected internal override void OnDetached(EntityLogic childEntity, object userData)
+ {
+ base.OnDetached(childEntity, userData);
+ }
+
+ protected internal override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform,
+ object userData)
+ {
+ base.OnAttachTo(parentEntity, parentTransform, userData);
+ }
+
+ protected internal override void OnDetachFrom(EntityLogic parentEntity, object userData)
+ {
+ base.OnDetachFrom(parentEntity, userData);
+ }
+
+ protected internal override void OnUpdate(float elapseSeconds, float realElapseSeconds)
+ {
+ base.OnUpdate(elapseSeconds, realElapseSeconds);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs.meta b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs.meta
new file mode 100644
index 00000000..23cc8870
--- /dev/null
+++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 48dddd54c9564e868d36fa1e0640c996
+timeCreated: 1662463218
\ No newline at end of file
diff --git a/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs b/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs
index 50e0d225..682f2221 100644
--- a/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs
+++ b/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs
@@ -14,7 +14,8 @@ namespace TEngine.Runtime.Entity
/// 实例化后的实体。
public override object InstantiateEntity(object entityAsset)
{
- return Instantiate((Object)entityAsset);
+ // return Instantiate((Object)entityAsset);
+ return (Object)entityAsset;
}
///