徹底搞清楚Cocos Creator項目結構

一、 項目文件夾結構

初次創建并打開一個 Cocos Creator 項目后,開發者的項目文件夾將會包括以下結構:

1. 資源文件夾(assets)

assets 將會用來放置游戲中所有的本地資源、腳本和第三方庫文件。只有在 assets 目錄下的內容才能顯示在 資源管理器 中。assets 中的每個文件在導入項目后都會生成一個相同名字的 .meta 文件,用于存儲對應的資源配置和索引信息。.meta 文件需要一并提交到版本控制系統,詳見 資源管理注意事項 --- meta 文件。

2. 資源庫(library)

library 是將 assets 中的資源導入后生成的,在這里文件的結構和資源的格式將被處理成最終游戲發布時需要的形式。

當 library 丟失或損壞的時候,只要刪除整個 library 文件夾再打開項目,就會重新生成資源庫。

3. 本地設置(local)

local 文件夾中包含該項目的本機上的配置信息,包括編輯器面板布局,窗口大小,位置等信息。開發者不需要關心這里的內容。

4. 擴展插件文件夾(packages)

packages 文件夾用于放置此項目的自定義擴展插件。如需手動安裝擴展插件,可以手動創建此文件夾。如需卸載擴展插件,在 packages 中刪除對應的文件夾即可。

5. 項目設置(settings)

settings 里保存項目相關的設置,如 構建發布 菜單里的包名、場景和平臺選擇等。

6. 臨時文件夾(temp)

temp 是臨時文件夾,用于緩存一些 Cocos Creator 在本地的臨時文件。這個文件夾可以在關閉 Cocos Creator 后手動刪除,開發者不需要關心這里面的內容。

7. project.json

project.json 文件和 assets 文件夾一起,作為驗證 Cocos Creator 項目合法性的標志,只有包括了這兩個內容的文件夾才能作為 Cocos Creator 項目打開。開發者不需要關心里面的內容。

8. 構建目標(build)

在使用主菜單中的 項目 -> 構建發布... 使用默認發布路徑發布項目后,編輯器會在項目路徑下創建 build 目錄,并存放所有目標平臺的構建工程。點擊鏈接加入群聊【Unity/Cocos交流群】

9. 版本控制

Cocos Creator 在新建項目時,會自動生成 .gitignore 文件,用于排除不應該提交到 git 倉庫的文件。如果開發者使用其它版本控制系統,或者需要提交項目到其它地方,應該注意只需要提交 assets、packages、settings、project.json,或其它手動添加的關聯文件。

二、 資源管理注意事項 --- meta 文件

理解 Creator 生成 meta 文件的作用和機理,能幫助您和您的團隊解決在多人開發時常會遇到的資源沖突、文件丟失、組件屬性丟失等問題。那 meta 文件是做什么用的呢?下面我們來了解一下。

1. meta 文件的作用

先來看下場景中的 meta 文件長什么樣子:

預制件的 meta 文件與場景是一樣的。

png 圖片的 meta 文件信息比較多,除了基本的 ver 和 uuid 外,還記錄了圖片的寬高、偏移、九宮格等數據。上面這么多信息,我們這里只關心一個:uuid。

uuid : 通用唯一標識符(Universally Unique Identifier)

uuid 是 Creator 用來管理游戲資源的。它會為每個文件分配一個唯一的 id,圖集會生成多個。由此可以了解在 Creator 引擎中,識別一個文件不是簡單地通過 路徑 + 文件名 定位,而是通過 uuid 來引用文件。因此可以在編輯器資源管理中,隨意刪除、移動文件。

2. meta 文件更新時機

Creator 生成 meta 文件有以下幾種情況:

1、打開工程時

打開項目工程時,Creator 會先掃描 assets 目錄,如果哪個文件還沒有 meta 文件,此時就會生成。

2、更新資源時

更新資源也會引發 meta 文件的更新:

在 資源管理器 中可以對資源進行文件名修改、改變目錄、刪除文件,添加文件等操作,請參考 資源管理器。也可以直接從桌面或操作系統的文件管理器中將文件拖入到【資源管理器】中。

還有一種情況是在操作系統的文件管理器中對 assets 目錄中的文件進行增、刪、改之后切換到編輯器界面,此時可以看到 資源管理器 刷新的過程。點擊鏈接加入群聊【Unity/Cocos交流群】

如果一個文件的 meta 文件不存在,上面兩種情況都會觸發引擎去生成 meta 文件。

3. meta 文件出錯的幾種情況及解決方法

下面我們分析下 meta 文件出錯的幾種可能情況。

uuid 沖突

uuid 是全局唯一的,產生沖突肯定是有不同的文件的 uuid 相同了,一旦出現這個問題會導致 Cocos Creator 資源管理器目錄結構加載不完整。如下圖所示,遇到這種情況估計會讓你嚇出一身冷汗:

從提示中可以看到沖突的 uuid 字符串,然后打開操作系統文件管理或代碼編輯器,搜索這個 uuid:

此時先關閉 Creator 編輯器,再任意刪除其中一個 meta 文件,然后再打開 Creator 編輯器就可以解決。

這種方法雖然可以解決問題,但在編輯器中引用到這個資源的地方將會出現資源丟失,需要重新編輯或者重新配置一次。最好是通過版本管理工具還原此 meta 文件。

出現這種問題的原因一般有以下兩個:

在操作系統的文件管理器中移動文件時,將剪切、粘貼不小心操作成了復制、粘貼,同時也把 meta 文件復制過去了。導致項目中同時出現兩個相同的 meta 文件。

在多人協作時,從版本管理工具中,更新資源時碰巧遇到別人生成的 uuid 與你的電腦上某個文件生成的 uuid 一樣了,但這種情況非常非常罕見。

總的來說,要減少 uuid 沖突發生,最好在引擎資源管理工具中進行添加、移動文件。

uuid 變化

還有一種情況是 uuid 變了,使得舊的 uuid 對應的資源無法找到,這樣的話,你曾經編輯的界面將會出現資源、圖片丟失,還可能出現組件屬性丟失。

如果找不到舊的 uuid 對應的資源,通過 控制臺 可以看到 Creator 給出了所在的場景文件名、節點路徑、組件、uuid 等非常詳細的警告信息。通過警告信息可以快速定位出錯的地方。

這種情況又是怎么造成的呢?當有一個人將新資源添加進項目時,忘記切換到編輯器界面使其生成 meta 文件,同時又將這些新增的文件提交到了版本管理中(不包含 meta 文件)。然后,有另一個人去更新了他所提交的資源,同時切換到了編輯器界面進行編輯,這時 Creator 會檢查到新資源沒有 meta 文件便會立即生成。而當第一個人切換到編輯器的時候也會生成 meta 文件,這樣兩個人的電腦上為同一個文件,但是生成的 meta 文件中的 uuid 都不相同。

這種情況下,后面進行資源提交或更新的人,肯定也會遇到沖突,如果不明就理就強行解決沖突,就會產生上面所說的問題。下面的時序圖就描述了這種錯誤的工作流程:

因為第一個 A 同學忘記生成 meta 文件并提交,之后其他人都編輯過項目,但每個人生成的 uuid 都不同,這樣就會陷入無限的資源出錯中,編輯好的東西,一提交更新又出現沖突了。

要解決這個問題注意下面幾點:

l 提交前檢查是否有新增文件,有新增文件時,注意是否有 meta 文件,需要一起提交;

l 拉取文件時,注意是否有新增文件,并且是有 meta 文件成對,如果沒有的話,提醒之前提交文件的同學,把 meta 文件一并提交;

l 提交時,如果發現只有新增的 meta 文件,那這個 meta 文件肯定是自己生成的,需要注意是否使用過這個 meta 文件對應的資源(同名文件)。如果沒用過,那請最早提交者把 meta 文件提交了。千萬不能將這個 meta 文件提交上去。

注意上面幾點基本上就可以杜絕 meta 文件 uuid 變化導致的工程出錯了。

小結

meta 文件是 Creator 用于資源管理的重要手段,但在多人協同開發中稍有不慎就容易產生資源錯誤。要解決這個問題,不僅需要理解 meta 文件的產生機制和導致沖突的原因,同時還應該規范資源提交流程。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容