Unity 遊戲框架搭建 (十五) 優雅的 ActionKit(QChain)
來自專欄涼鞋的筆記4 人贊了文章
加班加了三個月終於喘了口氣,博客很久沒有更新了,這段期間框架加了很多Feature,大部分不太穩定,這些Feature中實現起來比較簡單而且用的比較穩定的就是鏈式編程支持了。
什麼是鏈式編程?
我想大家應該都接觸過DOTween,用起來是這樣的。
transform.DOMove(Vector3.one, 0.5f) .SetEase(Ease.InBack) .OnKill(() => Debug.Log("on killed")) .OnComplete(() => Debug.Log("on completed"));
像以上.XXX().YYY().ZZZ()這種寫法就叫鏈式編程了。
QChain是什麼?
QFramework中有零零散散支持了鏈式寫法,打算整理出來作為一個獨立的庫進行過維護。目前的使用方式如下:
this.Show() .LocalIdentity() // 歸一化 .LocalPosition(Vector3.back) .LocalPositionX(1.0f) .Sequence() // 開始序列 .Delay(1.0f) .Event(() => Log.I("frame event")) .Until(() => count == 2) .Event(() => Log.I("count is 2")) .Begin() // 執行序列 .DisposeWhen(() => count == 3) .OnDisposed(() => Log.I("On Disposed")); this.Repeat() .Delay(1.0f) .Event(() => count++) .Begin() .DisposeWhenGameObjDestroyed(); this.Repeat(5) .Event(() => Log.I(" Hello workd")) .Begin() .DisposeWhenFinished(); // 默認是這個 this.Sequence() .Delay(1.0f) .Event(() => Log.I("delay one second")) .Delay(1.0f) .Event(() => Log.E("delay two second")) .Begin();
為什麼要用QChain
前段時間在給公司寫一個藍牙的插件,比較麻煩的是藍牙管理類的狀態同步和當狀態改變時通知其他對象的問題。但是有了QChain,藍牙連接的代碼可以這樣寫:
this.Sequence() .Event(() => PTBluetooth.Initialize(true, false)) .Until(() => PTBluetooth.IsInitialized) .Until(() => PTBluetooth.IsOpened) .Event(() => PTBluetooth.ScanPeripheral((address, name, rssi, adInfo) => name.Contains("device"))) .Until(() => PTBluetooth.ScannedDevices.Count >= 1) .Event(() => PTBluetooth.ConnectToPeripheral(PTBluetooth.ScannedDevices[0].Address)) .Begin() .DisposeWhen(()=> { if (PTBluetooth.IsInitialized && !PTBluetooth.IsOpened) { // TODO: 這裡處理初始化失敗邏輯 return true; } // ... 其他失敗邏輯處理 return false; });
這樣寫的好處是,邏輯不會分散到處都是。相比於協程,生命周期更好進行管理(不用管理協程對象),可作為協程的替代方案。還有其他的好處隨著本系列的更新逐個討論。
相關鏈接:
我的框架地址:https://github.com/liangxiegame/QFramework
教程源碼:https://github.com/liangxiegame/QFramework/tree/master/Assets/HowToWriteUnityGameFramework/
QFramework&遊戲框架搭建QQ交流群: 623597263
轉載請註明地址:涼鞋的筆記http://liangxiegame.com/
微信公眾號:liangxiegame
http://weixin.qq.com/r/gjumvifEAHp-rWPd926Q (二維碼自動識別)
如果有幫助到您:
如果覺得本篇教程或者 QFramework 對您有幫助,不妨通過以下方式贊助筆者一下,鼓勵筆者繼續寫出更多高質量的教程,也讓更多的力量加入 QFramework 。
- 給 QFramework 一個 Star:https://github.com/liangxiegame/QFramework
- 下載 Asset Store 上的 QFramework 給個五星(如果有評論小的真是感激不盡):http://u3d.as/SJ9
- 購買 gitchat 話題並給 5 星好評: http://gitbook.cn/gitchat/activity/5abc3f43bad4f418fb78ab77 (6 元,會員免費)
- 購買同名的蠻牛視頻課程並給 5 星好評:http://edu.manew.com/course/431 (目前定價 29.8 元)
- 購買同名電子書 :https://www.kancloud.cn/liangxiegame/unity_framework_design( 29.9 元,內容會在 2018 年 10 月份完結)
筆者在這裡保證 QFramework、入門教程、文檔和此框架搭建系列的專欄永遠免費開源。以上捐助產品的內容對於使用 QFramework 的使用來講都不是必須的,所以大家不用擔心,各位使用 QFramework 或者 閱讀此專欄 已經是對筆者團隊最大的支持了。
推薦閱讀: