前言
寫在最前面,本文未必適合純新手,但有一些C#開發經驗的還是可以看懂的,雖然本人也是一位Unity3D新人,但是本文只是自己在學習Inventory Pro的學習總結,而不是教程,本人覺得要讀懂理解Inventory Pro 2.1.2 這樣的插件源碼,你還是需有了一部分Unity3D的基礎知識。但為什么說你有一定C#開發經驗也是能看懂的呢?(有點繞),我想表達的意思是,Unity3D無非是一種技術或者工具,而裝備系統是游戲邏輯的一種業務,其實如果側重點在於業務,技術和工具不是那么重要,希望你能明白這一點。
還有畢竟本人也是新手,對於源碼的理解難免有偏差、理解不夠透徹的地方,歡迎大家指正和討論。
本次學習總結的思路大概是從總體到細節的過程,具體是先從裝備系統的總體設計,主要功能頁,類圖結構到最后的關鍵細節函數實現這個路線。
總體結構
本來想取一些效果截圖,發現在5.2.3版本有些部分有編譯錯誤,就不貼出來了
從類圖體系來分,就目前閱讀該插件的代碼部分,結構划分還是很清晰,命名比較規范,注釋也很到位(老外確實不一樣),基本是有幾個類體系結構
物品相關
非UI相關InventoryItem 物品體系類,具體如裝備,消耗品,商店物品等
UI相關InventoryUIItemWrapper 物品體系
UI窗口相關
UIWindow體系的窗口類,具體有角色,銀行,技能,店鋪等窗口
InventoryUIDialog系統下的對話框類,具體有確認框,買賣,通用提示
特殊窗口(非繼承體系窗口),如上下菜單,通知窗口等
管理相關類
配置管理
InvertoryManager
ItemManger
數據庫操作
其它
應該是一些輔助類,有UI部分的,事件輔助,定義接口等等吧,這部分還沒有深入去閱讀應該也是挺復雜的
剩下部分
一些第三方插件,Unity3D特性及Edit擴展等等
代碼導航圖,由於圖片大小問題只展開了關鍵部分的類,感興趣自己看源碼 如下圖所示:
具體類圖就截取兩個充充場面,這里需要注意的由於Unity3D是基於組件開發模式的,有時候可能會出現橋接模式,這樣類圖如果展現出來會很大,所以這里只是給出了兩個比較清晰的繼承體系,如下圖所示
總結
通讀了目前Inventory Pro 2.1.2的源碼,對於裝備系統有了一個比較直觀的了解,大致總結一下
- 物品相關,數據模型就是非UI的Item繼承體系很容易理解了,就是各種裝備,物品,血瓶之類的純數據,UIItem的UI包裝的Item繼承體系這個也是很容易理解的,畢竟要用於顯示,有名稱,材質,動畫等等效果了,這些類也比較單純,比較復雜的是Item的集合類,ItemCollection這樣的類,因為簡單的增、刪和改肯定是逃不了,復雜的如交換,容器間的交換等操作;
- UI窗口相關,畢竟裝備系統少不了顯示,這樣就涉及到UI部分的,這樣就需要一套通用的UIWindow(窗口類),UIDialog(對話框類),及一些特殊的窗口吧,這些通用的還算簡單,復雜的主要是裝備容器也就是ItemCollection與窗口UI的組合類,畢竟有很多格子,再復雜一些還有重量和擺放等邏輯;
- UI事件相關的,這一部分就復雜一些了,畢竟UI都是事件驅動的,比如物品拾取,銷毀,交易,拖拽等都需要事件來做,再加上使用UI引擎相關有碰撞、射線計算,動畫效果等等吧,需要對Unity3D還是要有一定了解的,不然一頭霧水;
- 管理調度及其它,主要是一些輔助的類,這部分也比較多,比如數據庫模擬、多語言,聲音,全局配置什,集成包裝調用什么的也不簡單。
整體來說Inventory Pro 2.1.2,還是做的很全面的,還有Demo,畢竟是收費插件,也算是個小型的系統了,至少是提供了一個可行的裝備系統解決方案,本來也看過一些國人分享的裝備系統程,往往停留在Unity3D UI那層的學習和使用,其實遠沒有到一個解決方案的級別,基本是入門而已吧。
最后
如果你對本文感興趣,覺得對你的工作和學習有點用處可以掃二維碼打賞,或者殘忍忽略。當然如果你有什么問題或者需要指正的歡迎交流。首發博客園,蠻牛