在 Unity3D的介紹(2):項(xiàng)目饭宾、場(chǎng)景、資源格了、發(fā)布 一文中已經(jīng)介紹過(guò)項(xiàng)目看铆、場(chǎng)景、資源的區(qū)別了盛末,在 為Unity3D創(chuàng)建素材(1):圖片弹惦、著色器、材質(zhì)球 和 為Unity3D創(chuàng)建素材(2):模型悄但、綁定棠隐、動(dòng)畫(huà) 兩篇中我們了解了如何為Unity3D創(chuàng)建資源。
我們知道檐嚣,資源和我們用在場(chǎng)景中的game object(游戲物體)還是不一樣的助泽,一個(gè)fbx文件是一個(gè)“資源”,而將拖到場(chǎng)景中就變成了一個(gè)“帶有各種組件的節(jié)點(diǎn)”嚎京。在從“資源”到“帶組件的節(jié)點(diǎn)”的轉(zhuǎn)化過(guò)程中我們需要手動(dòng)做一些設(shè)置嗡贺,一些修改,甚至需要添加一些新的組件以滿足我們的需求鞍帝,或者將多個(gè)節(jié)點(diǎn)組合成新的游戲物體(比如用多個(gè)模型道具組合成一個(gè)NPC的家)诫睬。
從“資源的重復(fù)利用”的角度來(lái)看,直接使用素材資源來(lái)搭建場(chǎng)景是低效的帕涌,更好更高效的方法是重復(fù)利用在場(chǎng)景中已經(jīng)完成了設(shè)置摄凡、修改、組合等工作的游戲物體蚓曼。于是Unity3D就開(kāi)發(fā)了Prefab(預(yù)設(shè)物體)這個(gè)功能亲澡。
什么是prefab?
Prefab可以被看做是對(duì)scene(場(chǎng)景)中g(shù)ame object(游戲物體)的描述文件辟躏,可以被儲(chǔ)存在Assets文件夾內(nèi)谷扣,以方便在其他scene中重復(fù)利用。Prefab實(shí)際上并不包含任何模型捎琐、貼圖等真正的素材文件会涎,只是一個(gè)虛擬的“參考”。
我們可以把prefab當(dāng)做一種特殊的“資源素材”瑞凑,在場(chǎng)景中引用prefab末秃,相當(dāng)于按照這個(gè)prefab所描述的規(guī)范引用其涉及到的“真實(shí)素材”。如果我們不小心刪除掉了這些“真實(shí)素材”籽御,那么prefab就失去了作用练慕。
如何創(chuàng)建prefab惰匙?
將場(chǎng)景中的單個(gè)game object用鼠標(biāo)拖到Project面板中的Assets目錄下,就可以創(chuàng)建這個(gè)game object的prefab铃将。
注意项鬼,一定是拖動(dòng)“單個(gè)”游戲物體到Assets目錄下創(chuàng)建prefab,如果需要將多個(gè)game objects一起創(chuàng)建成一個(gè)prefab劲阎,就需要選擇或生成一個(gè)“根節(jié)點(diǎn)”(我們通常會(huì)用
Create > Create Empty
來(lái)創(chuàng)建一個(gè)空節(jié)點(diǎn)來(lái)做“根節(jié)點(diǎn)”)绘盟,重命名,復(fù)位根節(jié)點(diǎn)的transform屬性(Reset
)悯仙,再將所有g(shù)ame objects拖到這個(gè)根節(jié)點(diǎn)上變成它的子物體龄毡,最后再將根節(jié)點(diǎn)拖到Assets目錄下創(chuàng)建prefab。
如何使用Prefab锡垄?
要使用Prefab沦零,將其拖到Scene View或者Hierarchy面板即可。
普通的game object在Hierarchy中顯示為白色货岭,而與prefab相聯(lián)的game object在Hierarchy中顯示為藍(lán)色路操。
同時(shí),與prefab相聯(lián)的game object在Inspector面板中會(huì)多出一行關(guān)于Prefab的按鈕茴她,其中Select
可以選擇其所對(duì)應(yīng)的prefab資源文件寻拂,Revert
可以將該game object恢復(fù)到原prefab資源文件的樣子,Apply
可以將在此game object上做的修改應(yīng)用的prefab資源文件中去(這樣場(chǎng)景中其他關(guān)聯(lián)于此prefab資源的game objects就都會(huì)自動(dòng)更新)丈牢。
可以選擇菜單GameObject > Break Prefab Instance
來(lái)斷開(kāi)game object與prefab之間的聯(lián)接關(guān)系。
從某個(gè)角度來(lái)看瞄沙,prefab的使用類似于Flash中的symbol(元件)己沛,或者M(jìn)aya中的instance(參考復(fù)制),可以通過(guò)修改Prefab來(lái)批量修改場(chǎng)景中的游戲物體距境。但是prefab的使用更靈活申尼,在場(chǎng)景中修改game object不會(huì)修改prefab本體(除非點(diǎn)擊
Apply
),但修改prefab本體會(huì)即時(shí)改變所有相聯(lián)的game object垫桂。
復(fù)制game object的時(shí)候最好先生成一個(gè)prefab师幕,然后再在場(chǎng)景中進(jìn)行復(fù)制,這樣復(fù)制出來(lái)的新game objects也都與prefab相聯(lián)了诬滩。
如果需要在游戲進(jìn)行中實(shí)時(shí)創(chuàng)建游戲物體(比如玩家按下“開(kāi)火”鍵之后霹粥,發(fā)射一個(gè)導(dǎo)彈物體),最方便的辦法也是調(diào)用預(yù)先制作好的prefab資源疼鸟,而不是把游戲物體預(yù)先放在場(chǎng)景里隱藏起來(lái)后控,需要的時(shí)候再顯示。
做一個(gè)有操守的美術(shù)
在團(tuán)隊(duì)協(xié)作中空镜,通常由美術(shù)負(fù)責(zé)資源素材的創(chuàng)作浩淘,然后打包發(fā)送給關(guān)卡設(shè)計(jì)來(lái)制作關(guān)卡捌朴。一個(gè)有操守的美術(shù)會(huì)把所有的模型、動(dòng)畫(huà)都在場(chǎng)景中配置好张抄,然后生成可以直接拖用的prefabs砂蔽,并且用命名標(biāo)準(zhǔn)的文件夾分類放好,再導(dǎo)出給關(guān)卡設(shè)計(jì)署惯,而不是直接發(fā)送一堆
.fbx
文件(甚至是.mb
文件)和.psd
文件(甚至是.sai
文件)給對(duì)方察皇。