FishMan LockstepPlatform Tutorial
0.說在前面
朋友們,我又回來了,繼上一次的 shader教程 後,這次推出的是遊戲開發框架教程,目標受衆是中高級程序員(有夢想的初級程序也行),當然了,這次會伴隨着教學視頻,畢竟視頻+聲音 學習效果會比文字好很多 😃
本教程會同時伴隨一個框架的誕生LockstepPlatform,該框架核心技術點是 幀同步 & ECS,目標是提供雙端的幀同步解決方案
本框架的初衷:
- 是給獨立開發者使用,他們擁有多個小遊戲,但是每個小遊戲如果要聯網,需要單獨的服務器,如果採用非幀同步方案,如狀態同步,會導致額外的網絡邏輯代碼,需要更長的開發週期,成本過高,綜合多種原因導致很多小遊戲都是單機。我想改變這種現狀。
- 曾經的我剛入門的時候爲了學習技術,各種找教程,找資料,但是多數是初級教程,如:如何使用 XxGUI,如何使用XX插件,如何開發一個跑酷,連連看等簡單的遊戲, 而且一些簡陋的ARPG 教程收費動輒幾千,而內容卻很初級。這讓我痛苦。所以我想給幾年前的我做一個比較“幹”的開發教程,希望能幫到以前的“我”
本教程內容涵蓋:
1.庫編寫
- 數學庫
- 碰撞檢測庫2D
- 碰撞檢測庫3D
- 二進制序列化庫//在框架中沒有獨立出來
- 網絡庫的編寫//在框架中沒有獨立出來
- (AI)NavMesh庫的實現
- (AI)內存緊湊版行爲樹的實現
- ExcelParser 庫的編寫//在框架中沒有獨立出來
- ECS代碼生成器 (兼容Entitas,UnityECS,LP Unsafe ECS,當前版本僅兼容Entitas)
- LP Unsafe ECS 庫的編寫//TODO
- AssetBundle資源管理 //TODO
- 物理庫2D//TODO
- shader庫的編寫//TODO
2.框架的演進
LockstepPlatform 從v0.1.0->v0.8.0 代碼的框架的迭代過程
3.優化技巧
1. 數據格式的設計
2. 內存管理
3. 資源管理
4. 多線程
5. shader優化
4.普通遊戲框架設計
本框架會同時涵蓋多個demo,即使這些demo很簡單,但還是會在這些demo中遵循相應的編程範式, 初,中級程序可以參考裏面的編程技巧
1.項目目標
1. 基於ECS快照回滾幀同步技術,提供一個遊戲雙端解決方案。
2. 服務端:實現一個遊戲平臺,同時支持多個小遊戲的運營,類似qq遊戲平臺
3. 客戶端:實現一個小引擎(除Audio,以及渲染器模塊以及Editor,其他的都會基於確定性計算(整型)重寫)
目標用戶
- 獨立遊戲開發者
- 中小型公司
- 喜歡學技術的朋友
- 想使用部分模塊的朋友
當前版本(v0.3.0)
1. Excel 數據& 代碼生成庫 (done)
2. 基於消息回調的網絡消息庫(done v0.6.0~v0.7.0 會增強爲c# 基於await 異步回調 以及actor 模型)
3. 客戶端編程範式正式改爲面向接口編程
4. 服務器支持分佈式(目前不成熟 僅用於測試雙端遊戲流程,v0.6.0~v0.7.0 會增強)
版本(v0.2.0)
1. ECS 目前採用Entitas (後續版本會改爲基於c#指針&struct的版本。以及兼容Unity ECS 開發模式)
2. (確定性)碰撞檢測庫 3D
3. 序列化庫(done)
版本(v0.1.0)
1. 基於整形的數學庫 (done)
2. (確定性)碰撞檢測庫 2D
後續版本
v0.4.0(開發中)
1. 基於c# 指針和struct實現的 內存緊湊版 行爲樹 (done)
2. (確定性)NavMesh 庫 (done) (TODO指針版本)
3. ECL(a domain-specific language(DSL) for Entity component design)(解釋器正在開發中)
4. AssetBundleLoader (TODO)
5. ECS代碼生成器 (done) ECS 代碼生成器 目前支持Entitas, 後續版本會同時支持生成Unity ECS代碼,以及兼容Unsafe ECS代碼 (新增)
v0.5.0(TODO)
1. BehaviorTree 添加 Eidtor 支持
2. ECL
- 兼容Unity ECS
- 開始支持基於c# 指針&struct 的版本
- 支持導出爲Excel 方便配製
3. 2D 物理庫
4. NavMesh 指針化&struct 化
5. AssetBundleLoader Editor
2.項目環境搭建
3.References
- ECS 回滾原型來自 UnityLockstep:https://github.com/proepkes/UnityLockstep
- 當前網絡庫使用 LiteNetLib: https://github.com/RevenantX/LiteNetLib (v0.8.3 .NetCore)
- ECS Framework Entitas: https://github.com/sschmid/Entitas-CSharp (v1.13.0)
- 確定性 數學庫: https://github.com/JiepengTan/LockstepMath
- 確定性 碰撞檢測庫: https://github.com/JiepengTan/LockstepCollision
- 確定性 NavMesh 庫: https://github.com/JiepengTan/LockstepPathFinding
- 內存緊湊版 行爲樹庫: https://github.com/JiepengTan/LockstepBehaviorTree
- ECL解釋器: https://github.com/JiepengTan/LockstepECL //已經廢棄 使用ECS代碼生成器代替 因爲c#完全可以勝任,但是可以用於學習 詞法語法分析
- ECS代碼生成器: https://github.com/JiepengTan/LockstepECSGenerator
- 其他的庫(Serialization,Logging,ExcelParser,Network)沒有獨立出項目來,但是庫是作爲單獨的子模塊位於本項目中https://github.com/JiepengTan/LockstepPlatform
4.2D Demo(FC Tank)
** Basic lockstep and rollback file**
** Replay record file**
傳送門
- 本教程配套blog https://jiepengtan.github.io/2019/07/08/2019-07-08-lp-tutorial00-outline/
- LockstepPlatform 框架源碼 https://github.com/JiepengTan/LockstepPlatform
- 2D demo 地址 https://github.com/JiepengTan/Lockstep_Demo2D_Tank
- [3D demo 地址]//TODO
- 環境搭建
- FishMan shader教程 https://github.com/JiepengTan/FishManShaderTutorial
- LockstepPlatform 幀同步 or ECS 技術交流qq羣:901118569