簡易架構圖

完整架構圖

組件規劃
ECS去模擬OOP,每個主實體帶有物件組件,並且帶有生命週期組件,每個會更新生命週期的物件帶有狀態機組件。
狀態機系統更新組件,依照對應的ObjectHandler處理每幀的狀態更新,含每幀的所有狀態資料、碰撞器參數、子動作參數。
子動作控制物件的物理交互,每個子動作實體獨立且可附帶在該物件實體的StateActionBuffer底下,以便在狀態改變時取消所有子動作的物理影響
| Attributes | SubAction | ColliderBuffer | Object | State |
|---|---|---|---|---|
| Attributes_HP | SubAction_Force | Object_SynchroID | State_ActionFlag | |
| Attributes_MP | SubAction_Rotat | ColliderBuffer_Hitbox | Object_Layer | State_Abnormal |
| Attributes_ATK | SubAction_Transform | ColliderBuffer_Hurtbox | Object_LifeTime | State_StateMachine |
| Attributes_DEF | SubAction_Track | ColliderBuffer_Rigidbody | Object_Handler | State_InputFlags |
| Attributes_SPD | SubAction_AimLock | Object_Owner | State_SubActionBuffer |
| Role | Bullet | Character | Collider |
|---|---|---|---|
| Role_Info | Bullet_Info | Character_Info | Collider_Info |
1 | public struct System_OnInstantiate : IComponentData{ |
系統規劃
- GameSystem : 處理所有遊戲內遊戲狀態,遊戲初始化、GameTick、遊戲事件。
- UnityDotsBaseSystem : Unity自帶物理系統,含Rigidbody與碰撞檢測算法。
- PhysicsSystem : 自製獨立物理系統,能引入物理參數,客製化物理。
- PlayerSystem : 玩家操作同步到ECS、玩家資料同步。
- HitboxBakerSystem : 每幀調用Hitbox。
- StateMachionSystem : 每幀依造物件ID的動作藍圖執行帶狀態機組件的實體模擬物件動作。
- SubActionSystem : 每個物件有DynamicBuffer掛載子動作,子動作獨立在SubActionSystem執行負載物的Transform修改(兩個實體:一個是子動作實體;一個是負載物)
1 | public struct SubAction_Force : IComponentData{ |
- EventSystem : TriggerEvent、TriggerBuffer、CooldownBuffer、GameEvent、物件事件委任在ObjectHandler裡
- VelocitySystem : 原生物裡系統,唯一能改動物件Transform的地方。
- LifeTimeSystem : 每個實體物件必帶生命週期,模擬物件生成、更新、修毀。
1 | foreach (var (OnCreat, entity) in SystemAPI.Query<RefRO<System_OnCreat>>().WithEntityAccess()){ |