幾種技能系統的大概流程

非幀同步,mmo類型的遊戲技能系統(基於技能模板)
ActorSystem(單位系統,管理場景中的Actor)
ActorEntity(單位實體):持有BuffEntitys,SkillEntitys
監聽ui層技能按鈕的點擊,點擊後回調CasterId(釋放者Id)和SkillId(技能id)到SkillValid(客戶端本地的技能釋放驗證),
通過後表現層先播放前搖動畫,且發釋放技能的消息到服務器,服務器接收到消息後經過驗證後返回消息,客戶端接收到消息後,
發現不可釋放則前搖動畫中斷
可釋放則根據技能id得到SkillConfig,再根據SkillConfig中的技能模板id組裝出SkillEntity,且存儲到ActorEntity的SkillEntitys中
且在前搖動畫結束後播放特效,進行傷害表現,同步自己和受打擊玩家的數據


非幀同步,act類型的遊戲技能系統(基於幀事件,此處爲單機的戰鬥)
ActorSystem(單位系統,管理場景中的Actor)
ActorEntity(單位實體):持有BuffEntitys,SkillEntitys
監聽ui層技能按鈕的點擊,點擊後回調CasterId(釋放者Id)和SkillId(技能id)到SkillValid(客戶端本地的技能釋放驗證),
通過後
根據SkillId組裝出SkillConfig(技能屬性配置)和SkillEntity(技能實體,持有技能屬性配置引用),
SkillConfig:有持續時間,傷害,對應動畫Id,SkillFrameEvents(幀事件列表),觸發條件枚舉等屬性
SkillFrameEvent:根據不同的幀事件有不同的屬性,例如傷害幀有AABB碰撞盒信息,總傷害,傷害分幾段表現。位移幀則是位移相關的信息。添加buff幀則是buffId,衝突buffId列表
SkillEntity有以下方法:CheckTrigger,TriggerFrameEvent


幀同步技能(基於幀事件)
跟act類型的遊戲技能系統類似也是基於幀事件
表現層和邏輯層分離,有兩種分離方式
1是類似ecs的方式,表現層update裏訪問數據層的狀態進行表現層的狀態切換
2是數據層中有表現層的接口,但是表現層對數據層只讀
動畫播放:編輯模式下預烘培動畫得到位置偏移配置(每幀的位置,旋轉信息)
位移:播放技能時不通過動畫控制位移,根據邏輯幀時間控制以及動畫位置偏移配置進行位移控制
物理碰撞:力,AABB,OBB

 

技能編輯器:

1.只做數據配置,類似表,基於Timeline去管理

2.配置幀事件時在Game裏同步播放角色動畫,特效,碰撞框等

 

附一張以前做技能編輯器時的結構圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章