詳解CocosCreator項(xiàng)目結(jié)構(gòu)機(jī)制
一、項(xiàng)目文件夾結(jié)構(gòu)
初次創(chuàng)建并打開(kāi)一個(gè) Cocos Creator 項(xiàng)目后,開(kāi)發(fā)者的項(xiàng)目文件夾將會(huì)包括以下結(jié)構(gòu):
下面我們將會(huì)介紹每個(gè)文件夾的功能。
1.資源文件夾(assets)
assets 將會(huì)用來(lái)放置游戲中所有的本地資源、腳本和第三方庫(kù)文件。只有在 assets 目錄下的內(nèi)容才能顯示在 資源管理器 中。assets 中的每個(gè)文件在導(dǎo)入項(xiàng)目后都會(huì)生成一個(gè)相同名字的 .meta 文件,用于存儲(chǔ)對(duì)應(yīng)的資源配置和索引信息。.meta 文件需要一并提交到版本控制系統(tǒng),詳見(jiàn) 資源管理注意事項(xiàng) --- meta 文件。
一些第三方工具生成的工程或設(shè)計(jì)原文件,如 TexturePacker 的 .tps 文件,或 Photoshop 的 .psd 文件,可以選擇放在 assets 外面來(lái)管理。
2.資源庫(kù)(library)
library 是將 assets 中的資源導(dǎo)入后生成的,在這里文件的結(jié)構(gòu)和資源的格式將被處理成最終游戲發(fā)布時(shí)需要的形式。當(dāng) library 丟失或損壞的時(shí)候,只要?jiǎng)h除整個(gè) library 文件夾再打開(kāi)項(xiàng)目,就會(huì)重新生成資源庫(kù)。
3.本地設(shè)置(local)
local 文件夾中包含該項(xiàng)目的本機(jī)上的配置信息,包括編輯器面板布局,窗口大小,位置等信息。開(kāi)發(fā)者不需要關(guān)心這里的內(nèi)容。
4.擴(kuò)展插件文件夾(packages)
packages 文件夾用于放置此項(xiàng)目的自定義擴(kuò)展插件。如需手動(dòng)安裝擴(kuò)展插件,可以手動(dòng)創(chuàng)建此文件夾。如需卸載擴(kuò)展插件,在 packages 中刪除對(duì)應(yīng)的文件夾即可。
5.項(xiàng)目設(shè)置(settings)
settings 里保存項(xiàng)目相關(guān)的設(shè)置,如 構(gòu)建發(fā)布 菜單里的包名、場(chǎng)景和平臺(tái)選擇等。
6.臨時(shí)文件夾(temp)
temp 是臨時(shí)文件夾,用于緩存一些 Cocos Creator 在本地的臨時(shí)文件。這個(gè)文件夾可以在關(guān)閉 Cocos Creator 后手動(dòng)刪除,開(kāi)發(fā)者不需要關(guān)心這里面的內(nèi)容。
7.project.json
project.json 文件和 assets 文件夾一起,作為驗(yàn)證 Cocos Creator 項(xiàng)目合法性的標(biāo)志,只有包括了這兩個(gè)內(nèi)容的文件夾才能作為 Cocos Creator 項(xiàng)目打開(kāi)。開(kāi)發(fā)者不需要關(guān)心里面的內(nèi)容。
8.構(gòu)建目標(biāo)(build)
在使用主菜單中的 項(xiàng)目 -> 構(gòu)建發(fā)布... 使用默認(rèn)發(fā)布路徑發(fā)布項(xiàng)目后,編輯器會(huì)在項(xiàng)目路徑下創(chuàng)建 build 目錄,并存放所有目標(biāo)平臺(tái)的構(gòu)建工程。
9.版本控制
Cocos Creator 在新建項(xiàng)目時(shí),會(huì)自動(dòng)生成 .gitignore 文件,用于排除不應(yīng)該提交到 git 倉(cāng)庫(kù)的文件。如果開(kāi)發(fā)者使用其它版本控制系統(tǒng),或者需要提交項(xiàng)目到其它地方,應(yīng)該注意只需要提交 assets、packages、settings、project.json,或其它手動(dòng)添加的關(guān)聯(lián)文件。
二、資源管理注意事項(xiàng) --- meta 文件
理解 Creator 生成 meta 文件的作用和機(jī)理,能幫助您和您的團(tuán)隊(duì)解決在多人開(kāi)發(fā)時(shí)常會(huì)遇到的資源沖突、文件丟失、組件屬性丟失等問(wèn)題。那 meta 文件是做什么用的呢?下面我們來(lái)了解一下。
1. meta 文件的作用
先來(lái)看下場(chǎng)景中的 meta 文件長(zhǎng)什么樣子:
預(yù)制件的 meta 文件與場(chǎng)景是一樣的。png 圖片的 meta 文件信息比較多,除了基本的 ver 和 uuid 外,還記錄了圖片的寬高、偏移、九宮格等數(shù)據(jù)。上面這么多信息,我們這里只關(guān)心一個(gè):uuid。uuid : 通用唯一標(biāo)識(shí)符(Universally Unique Identifier) uuid 是 Creator 用來(lái)管理游戲資源的。它會(huì)為每個(gè)文件分配一個(gè)唯一的 id,圖集會(huì)生成多個(gè)。由此可以了解在 Creator 引擎中,識(shí)別一個(gè)文件不是簡(jiǎn)單地通過(guò) 路徑 + 文件名 定位,而是通過(guò) uuid 來(lái)引用文件。因此可以在編輯器資源管理中,隨意刪除、移動(dòng)文件。
2. meta 文件更新時(shí)機(jī)
Creator 生成 meta 文件有以下幾種情況:
1、打開(kāi)工程時(shí)打開(kāi)項(xiàng)目工程時(shí),Creator 會(huì)先掃描 assets 目錄,如果哪個(gè)文件還沒(méi)有 meta 文件,此時(shí)就會(huì)生成。
2、更新資源時(shí)更新資源也會(huì)引發(fā) meta 文件的更新:
在 資源管理器 中可以對(duì)資源進(jìn)行文件名修改、改變目錄、刪除文件,添加文件等操作,請(qǐng)參考 資源管理器。也可以直接從桌面或操作系統(tǒng)的文件管理器中將文件拖入到【資源管理器】中。還有一種情況是在操作系統(tǒng)的文件管理器中對(duì) assets 目錄中的文件進(jìn)行增、刪、改之后切換到編輯器界面,此時(shí)可以看到 資源管理器 刷新的過(guò)程。如果一個(gè)文件的 meta 文件不存在,上面兩種情況都會(huì)觸發(fā)引擎去生成 meta 文件。
3. meta 文件出錯(cuò)的幾種情況及解決方法下面我們分析下 meta 文件出錯(cuò)的幾種可能情況。uuid 沖突 uuid 是全局唯一的,產(chǎn)生沖突肯定是有不同的文件的 uuid 相同了,一旦出現(xiàn)這個(gè)問(wèn)題會(huì)導(dǎo)致 Cocos Creator 資源管理器目錄結(jié)構(gòu)加載不完整。如下圖所示,遇到這種情況估計(jì)會(huì)讓你嚇出一身冷汗:
從提示中可以看到?jīng)_突的 uuid 字符串,然后打開(kāi)操作系統(tǒng)文件管理或代碼編輯器,搜索這個(gè) uuid:
此時(shí)先關(guān)閉 Creator 編輯器,再任意刪除其中一個(gè) meta 文件,然后再打開(kāi) Creator 編輯器就可以解決。這種方法雖然可以解決問(wèn)題,但在編輯器中引用到這個(gè)資源的地方將會(huì)出現(xiàn)資源丟失,需要重新編輯或者重新配置一次。最好是通過(guò)版本管理工具還原此 meta 文件。出現(xiàn)這種問(wèn)題的原因一般有以下兩個(gè):在操作系統(tǒng)的文件管理器中移動(dòng)文件時(shí),將剪切、粘貼不小心操作成了復(fù)制、粘貼,同時(shí)也把 meta 文件復(fù)制過(guò)去了。導(dǎo)致項(xiàng)目中同時(shí)出現(xiàn)兩個(gè)相同的 meta 文件。在多人協(xié)作時(shí),從版本管理工具中,更新資源時(shí)碰巧遇到別人生成的 uuid 與你的電腦上某個(gè)文件生成的 uuid 一樣了,但這種情況非常非常罕見(jiàn)??偟膩?lái)說(shuō),要減少 uuid 沖突發(fā)生,最好在引擎資源管理工具中進(jìn)行添加、移動(dòng)文件。
三、uuid 變化
還有一種情況是 uuid 變了,使得舊的 uuid 對(duì)應(yīng)的資源無(wú)法找到,這樣的話(huà),你曾經(jīng)編輯的界面將會(huì)出現(xiàn)資源、圖片丟失,還可能出現(xiàn)組件屬性丟失。
如果找不到舊的 uuid 對(duì)應(yīng)的資源,通過(guò) 控制臺(tái) 可以看到 Creator 給出了所在的場(chǎng)景文件名、節(jié)點(diǎn)路徑、組件、uuid 等非常詳細(xì)的警告信息。通過(guò)警告信息可以快速定位出錯(cuò)的地方。這種情況又是怎么造成的呢?當(dāng)有一個(gè)人將新資源添加進(jìn)項(xiàng)目時(shí),忘記切換到編輯器界面使其生成 meta 文件,同時(shí)又將這些新增的文件提交到了版本管理中(不包含 meta 文件)。然后,有另一個(gè)人去更新了他所提交的資源,同時(shí)切換到了編輯器界面進(jìn)行編輯,這時(shí) Creator 會(huì)檢查到新資源沒(méi)有 meta 文件便會(huì)立即生成。而當(dāng)?shù)谝粋€(gè)人切換到編輯器的時(shí)候也會(huì)生成 meta 文件,這樣兩個(gè)人的電腦上為同一個(gè)文件,但是生成的 meta 文件中的 uuid 都不相同。這種情況下,后面進(jìn)行資源提交或更新的人,肯定也會(huì)遇到?jīng)_突,如果不明就理就強(qiáng)行解決沖突,就會(huì)產(chǎn)生上面所說(shuō)的問(wèn)題。下面的時(shí)序圖就描述了這種錯(cuò)誤的工作流程:
因?yàn)榈谝粋€(gè) A 同學(xué)忘記生成 meta 文件并提交,之后其他人都編輯過(guò)項(xiàng)目,但每個(gè)人生成的 uuid 都不同,這樣就會(huì)陷入無(wú)限的資源出錯(cuò)中,編輯好的東西,一提交更新又出現(xiàn)沖突了。
要解決這個(gè)問(wèn)題注意下面幾點(diǎn):l提交前檢查是否有新增文件,有新增文件時(shí),注意是否有 meta 文件,需要一起提交;l拉取文件時(shí),注意是否有新增文件,并且是有 meta 文件成對(duì),如果沒(méi)有的話(huà),提醒之前提交文件的同學(xué),把 meta 文件一并提交;l提交時(shí),如果發(fā)現(xiàn)只有新增的 meta 文件,那這個(gè) meta 文件肯定是自己生成的,需要注意是否使用過(guò)這個(gè) meta 文件對(duì)應(yīng)的資源(同名文件)。如果沒(méi)用過(guò),那請(qǐng)最早提交者把 meta 文件提交了。千萬(wàn)不能將這個(gè) meta 文件提交上去。注意上面幾點(diǎn)基本上就可以杜絕 meta 文件 uuid 變化導(dǎo)致的工程出錯(cuò)了。
小結(jié):meta 文件是 Creator 用于資源管理的重要手段,但在多人協(xié)同開(kāi)發(fā)中稍有不慎就容易產(chǎn)生資源錯(cuò)誤。要解決這個(gè)問(wèn)題,不僅需要理解 meta 文件的產(chǎn)生機(jī)制和導(dǎo)致沖突的原因,同時(shí)還應(yīng)該規(guī)范資源提交流程。
以上就是詳解CocosCreator項(xiàng)目結(jié)構(gòu)機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于CocosCreator項(xiàng)目結(jié)構(gòu)機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解cocoscreater預(yù)制體prefab
- 如何在CocosCreator中利用常駐節(jié)點(diǎn)做圖層管理
- 游戲開(kāi)發(fā)中如何使用CocosCreator進(jìn)行音效處理
- CocosCreator ScrollView優(yōu)化系列之分幀加載
- 如何使用CocosCreator對(duì)象池
- CocosCreator如何實(shí)現(xiàn)劃過(guò)的位置顯示紋理
- 整理CocosCreator常用知識(shí)點(diǎn)
- 全面講解CocosCreator熱更新
- CocosCreator經(jīng)典入門(mén)項(xiàng)目之flappybird
- CocosCreator通用框架設(shè)計(jì)之網(wǎng)絡(luò)
- 如何用CocosCreator實(shí)現(xiàn)射擊小游戲
- 怎樣在CocosCreator中使用游戲手柄
相關(guān)文章
微信小程序開(kāi)發(fā)教程之增加mixin擴(kuò)展
Mixin是一種思想,用部分實(shí)現(xiàn)的接口來(lái)實(shí)現(xiàn)代碼復(fù)用??梢杂脕?lái)解決多繼承的問(wèn)題,又可以用來(lái)擴(kuò)展功能。下面這篇文章主要給大家介紹了關(guān)于為微信小程序增加mixin擴(kuò)展的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08JavaScript頁(yè)面模板庫(kù)handlebars的簡(jiǎn)單用法
本文主要是給大家分享的一個(gè)javascript頁(yè)面模板庫(kù)Handlebars的簡(jiǎn)單用法,可以幫助大家輕松的構(gòu)建語(yǔ)義化模板,非常的實(shí)用,推薦給大家。2015-03-03javascript:void(0)的真正含義實(shí)例分析
void操作符解釋2008-08-08解決canvas畫(huà)布使用fillRect()時(shí)高度出現(xiàn)雙倍效果的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決canvas畫(huà)布使用fillRect()時(shí)高度出現(xiàn)雙倍效果的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08javascript 獲取鏈接文件地址中第一個(gè)斜線(xiàn)內(nèi)的正則表達(dá)式
我想得到“windows”,請(qǐng)問(wèn)用正則表達(dá)式怎么寫(xiě)?2009-06-06