QFramework Pro 開發日誌(六)一鍵生成類圖功能介紹
這個功能連續開發了三天,現在完成了一個基本的雛形。
先說說,為啥做這個功能吧。
作為 Unity 開發者,不管是在做遊戲還是在做工具、方案、學習原始碼的時候,多多少少都會需要魔改一些其他外掛、框架、工具的程式碼。
而魔改的前提,是自己能夠快速理解程式碼的大體結構。
如何快速理解程式碼的大體結構?自己畫一遍簡單的類圖是比較快的方式。
於是筆者就製作了一個快速根據目錄內的程式碼生成簡單繼承的類圖的功能。
先看下使用流程。
- 在某個程式碼目錄建立一個類圖檔案,操作如下:
- 建立之後結果如下:
- 點選,Inspector 上的 Parse 按鈕,就會生成類圖,如下:
- 有點看不清,放大看一下吧。
會比較清晰地顯示繼承結構。
點選方法 或者 類圖上的 See 按鈕,可以直接開啟指令碼檔案,檢視程式碼,如下:
- 如果給這個方法再寫點註釋,然後再點選 Parse。
- 結果如下:
- 就會將註釋顯示在類圖上。
- 如何快速找到某個類的類圖,可以檢視 類圖檔案的 Inspector 上,如下:
- 點選 Show In Graph 就會,定位到對應的類圖上,如下:
現在只是一個功能雛形,後續想要更方便易用需要做很多優化,比如支援搜尋功能,中英文切換等等。
由於這個功能解決的痛點,首先就是自己的痛點,因為 QFramework Pro 接下來有不少工作要做,比如參考一些其他外掛或者庫的程式碼,魔改一些開源方案,需要寫足夠的註釋,設計更好用的 API,等等,都會用到,目前的功能暫時足夠使用了。
由於自己會大量使用這個功能,所以肯定有不夠用的時候,到時候再增加功能即可。
寫這個功能,去研究了一下 Roslyn 和 xNode。
Roslyn 其實自己很早就接觸過,但是一直沒花時間去好好研究,這次正好趁著做這個功能研究了一下,Roslyn 真的很強大,分析程式碼、生成程式碼、編譯程式碼、執行程式碼樣樣精通,而目前自己只用到了分析程式碼的功能,後邊 QF Pro 還會用到 生成程式碼的功能,正好這次打個基礎,先用起來。
xNode 相比 NodeGraphProcessor,支援更多節點數量,本來一鍵生成類圖的功能,是用 NodeGraphProcessor 做的,但是當類圖超過 30 個的時候,NodeGraphProcessor 就開始卡頓了,如果只支援 30 個類圖,那這個功能就太雞肋了。
於是自己就嘗試了一下 xNode,發現 xNode 在 100 多個類圖的時候才開始有點卡頓,筆者猜測, 如果類圖節點不在螢幕內 xNode 不會進行渲染,而 NodeGraphProcessor 則會進行渲染,所以根據實際的測試結果,這次的一鍵生成類圖的功能選擇使用 xNode 完成。
那 NodeGraphProcessor 就不用了嗎?
當然不是,NodeGraphProcessor 也還會用,兩者各有優缺點,NodeGraphProcessor 自帶的功能豐富,顏值高,同屏渲染效能更優,xNode 更穩定,支援節點類的重新命名,不在屏內的節點渲染優化,程式碼更少更清爽等等。
這兩個方案,會慢慢合併,合併叫 GraphKit,NodeGraphProcessor 是 GraphKit UIElement 渲染方式的方案,xNode 是 GraphKit IMGUI 渲染方式的方案,而底層的很多程式碼都和 QFramework 的一部分程式碼是重合的,所以可以將底層很多程式碼用 QFramework 進行重構。
重構完成後,還會再參考參考其他的方案,去粗取精,不斷優化。
三天時間,同時學習 Roslyn 和 xNode 再加上要實現一鍵生成類圖的功能,有點吃不消,腦子快炸了,所以接下來就做做比較輕鬆的優化、寫文件的工作,然後準備提交到 AssetStore。
再補充一句,自己使用這個功能,基本都是在某一個模組某一個目錄中使用,一是效能問題,二是一下子看 1000 多個類, 也看不完,不如一小塊一小塊開始看。
實現好了這個功能,就算上手了 Roslyn 和 xNode,有了以後做各種程式碼生成和其他功能的基礎,v0.4.0 版本完成再說吧。
這一篇就說到這。
各種地址
- QFramework Pro AssetStore 主頁:http://u3d.as/SJ9
- 快速迭代版(眾籌地址):https://www.gamepixedu.com/course/72
- QFramework 開源版地址:https://github.com/liangxiegame/QFramework
- QFramework QQ 群:623597263
- 此文首發於 http://doc.qframework.cn 或 https://qframework.cn
- 轉載請註明地址:https://liangxiegame.com 在這個地址可以看到我全部的作品連結