Unity框架設計:如何組織項目目錄結構
Unity項目如何組織目錄結構,有幾個習慣與你相同
組織好項目的目錄結構,是維護項目的很重要的一個點,我們學習別人源碼,了解別人的設計思路都是從目錄結構開始,一個清晰的目錄結構,對項目開發(fā)維護,項目管理來說非常的重要,目錄維護的好,大家在一起工作很愉快,目錄維護的不好,有可能會把項目搞的亂七八糟。今天我們一起來看看Unity架構師是如何維護自己的目錄結構的,再看看有幾個是和你相同的。
?
1: Unity項目的幾個基本原則
原則(1): 不在場景里面除啟動節(jié)點意外的任何節(jié)點。
Unity 提供方便的場景編輯器,好像我們拖拉帶拽,直接往場景里面搭建游戲場景,然后來做場景切換,這個我們在開放項目的時候是不提倡的。這樣做有兩個缺點:
A: 不方便多人同時編輯場景后的代碼提交與合并, 如果有沖突更麻煩。
B: 不方便打空包,節(jié)點都在場景,打包時,節(jié)點依賴的資源都會被打包進去。
C: 方便維護,維護復雜的場景,誰維護過誰知道。
?
原則(2): 不要在節(jié)點或預制體上直接掛與邏輯相關的代碼組件。
這個很好理解,如果我們直接在節(jié)點or預制體上掛代碼組件,代碼極難維護,如果我們要搜索哪些代碼在哪些地方調用,根本就無法通過搜索查到,如果一個一個節(jié)點,一個一個預制體的點開找,這樣維護起來非常麻煩, 也不方便資源更新與代碼熱更。
?
原則(3) 不要直接拖動節(jié)點,組件, 資源到代碼邏輯組件的屬性編輯器上。比如直接給Button組件掛響應函數(shù)等,原則2可以保證原則(3)不會出現(xiàn),但是我還是要強調一下。理由是不方便維護代碼,和多人協(xié)作開發(fā)與提交。
?
原則(4) 運行的時候只有一個場景,所有的內容代碼控制。
場景里面不允許放內容,那么做場景切換也就沒有意義了,所以我們只有一個運行時的場景。所有的內容,我們都要通過代碼來生成出來,這樣,搜索代碼,維護代碼就能看到整個完整的游戲邏輯。其他的場景可以用來編輯地圖,編輯角色等。編輯好后生成一個一個的資源預制體。所以我們項目里面一個運行時的空場景,以及其他資源編輯器關卡編輯的場景,而這些是編輯資源地圖而用,不會被打包進去。
?
原則(5) 使用純AssetsBundle來管理整個資源的加載與卸載, 不使用Resouces機制。
為什么不使用Resources, 機制來加載與卸載資源呢?Resources機制不方便資源更新,不方便打空包, Resources下的所有資源以及相關依賴都會被打包進去。 Resources也不方便資源更新, 所以干脆使用純AssetsBundle來做資源的加載與卸載,方便打空包,同時也方便資源更新。如果不打空包,只要把打包出來的ab包放到StreammingAssets目錄下,這個目錄下的所有的資源都會打包進去,到時候到這里來讀取ab包就可以了。
?
原則(6) 第三方的資源與插件的目錄結構要統(tǒng)一放到一個文件夾下。
我們完成一個Unity項目會經(jīng)常需要用到Unity插件,而Unity插件在開發(fā)的時候,從自己的角度出發(fā),所以目錄結構可能和我們的項目目錄結構理念維護不一致,所以我們要整理第三方插件, 還有可能包含代碼。
?
2: Unity項目的一級目錄結構
1級目錄結構如下:
AssetsPackages:所有的游戲資源,都存放到這個目錄下。
Editor: 框架與項目編輯器擴展代碼。
Scenes: 所有的游戲場景,包括運行場景,地圖編輯場景,角色編輯場景,特效編輯場景。
Scripts: 所有游戲的代碼,含框架與游戲邏輯代碼。
3rd: 第三方插件存放的位置。
SteammingAssets: 用來存放打包以后的ab資源包,這樣ab包能打入安裝包。
?

3: 重要一級目錄結構子目錄結構
1: AssetsPackage目錄如何分類?
AssetsPackage里面存放所有的資源,資源如何分類有決定了打ab包的時候的資源管理等,所以我們盡可能的要把資源按照功能來分類放好,那么我這邊會把AssetsPackage分成一下主要的子目錄。
AssetsPackage/GUI: 存放每個UI界面的GUI的圖片等相關。
AssetsPackage/Sounds: 存放游戲的音樂與音效
AssetsPackage/Maps: 存放游戲的地圖場景,可以在里面再繼續(xù)分關卡。
AssetsPackage/Charactors: 存放角色動畫等相關資源。
AssetsPackage/Effects: 存放粒子特效等相關資源
AssetsPackage/Excels: 存放游戲中配置文件的表格數(shù)據(jù)。

2: Scripts 目錄如何分類?
Scripts是代碼的主體維護的文件夾,這個文件夾的分類其實非常的重要,我這邊是這樣分類的。
Scripts/3rd : 用來存放純粹的第三方的C#代碼,不是插件,比如protobuf for C#等
Scripts/Game: 用來存放游戲邏輯代碼
Scripts/Utils: 用來存放游戲工具類的代碼, 比如單例,MD5, SHA1
Scripts/Managers: 用來存放主要的管理模塊代碼(資源管理,網(wǎng)絡模塊,聲音模塊等)
Scripts/AssetsBundle: 與Ab資源包管理更新相關的代碼。
……

3: Editor 目錄如何分類?
Editor是編輯器擴展代碼所放的目錄,我這邊是按照功能和擴展的模塊來分類放好對應的編輯器擴展代碼,如下:
Editor/AssetBundle: 編輯器擴展ab包自動化打包管理,版本管理,等編輯器相關代碼;
Editor/Common: 一些編輯器擴展的公用代碼。
Editor/ExcelBuild: 表格處理工具代碼;
Editor/PackageBuild: 打包時候的工具代碼
…
你有哪些編輯器擴展的工具和功能分類放到Editor目錄下。

3: AssetBundles輸出目錄結構
整個項目,都采用AssetsBundle資源管理模式,所以打出的AssetsBundle包也會有一個對應的目錄結構,這個目錄結構,不放在Unity項目的Assets文件夾中,而是放到和Assets文件夾同級的位置,如圖:

每個平臺,每個渠道的ab包是不一樣的,所以,在AssetsBundle里面我們要分渠道分平臺來打包。所以在AssetBundles路徑下,先分了平臺,再分渠道。
AssetBundles/Android/xxxx平臺
AssetBundles/iOS/xxxx平臺
?

當然這些最好制作AssetBundles打包工具的時候都能自動完成。
?
今天的Unity框架目錄結構分類與管理,就給大家介紹到這里,主要是介紹管理項目目錄結構的一些理念,與你的項目有多少是吻合的呢?
附:視頻教學
https://www.bycwedu.com/promotion_channels/2146264125