用Unity實(shí)現(xiàn)傳送門效果(一)

作者:四五二十
大家好。
接下來的兩篇內(nèi)容,是用Unity來做傳送門的效果。這里是用自己的方法來做的,中途踩了許多坑不過最終還是實(shí)現(xiàn)了。下面是效果圖:

本篇文章幾乎沒有代碼。主要是介紹一下實(shí)現(xiàn)的原理。

先不說如何打開傳送門以及如何在傳送門中穿梭的問題,我們先來看看攝像機(jī)是怎樣將場景及主角從另一個(gè)角度渲染進(jìn)門里面的。

在現(xiàn)實(shí)生活中,如果把眼睛比作主攝像機(jī),人的眼睛是不能直接看見自己的側(cè)面的,如果一定要看則會(huì)用另外的攝像頭從側(cè)面對(duì)自己進(jìn)行拍攝,再吧顯示器材放在視線范圍內(nèi),這樣就能實(shí)時(shí)的去觀察自己的側(cè)面了。同樣的道理,要達(dá)到上圖中的效果,一個(gè)攝像機(jī)是肯定不夠的,需要其它的攝像機(jī)來輔助。
來看看我們的場景,場景很簡單,就是一個(gè)墻面的地面組成的,當(dāng)傳送門打開時(shí),就讓該處的墻暫時(shí)禁用:

讓主攝像機(jī)作為主角的眼睛始終跟隨主角移動(dòng),如果主攝像機(jī)從傳送門看出去,門里其實(shí)是什么都沒有的:

那么這段“空白”就需要填補(bǔ),剛才我們提到了其它的攝像機(jī),就是用來填補(bǔ)這個(gè)空白的。
在效果展示中,主角從橙色門中由內(nèi)而外看出去,是和輔助攝像機(jī)從藍(lán)色門由外到內(nèi)看進(jìn)來的畫面是一樣的:

所以只要將輔助攝像機(jī)看到的畫面拿來填補(bǔ)主攝像機(jī)的空缺就可以了,前提是主攝像機(jī)的渲染層級(jí)更高,我們對(duì)主攝像機(jī)的屬性進(jìn)行設(shè)置:


但是要真正的無縫銜接則對(duì)攝像機(jī)的位置關(guān)系有一定的要求,也就是說主攝像機(jī)與橙色門的位置關(guān)系同輔助攝像機(jī)與藍(lán)色門的位置關(guān)系必須是一致的:
要讓輔助攝像機(jī)的位置同步,我們可以創(chuàng)建一個(gè)空物體,取名叫Substitute,讓它成為橙色門的子物體,再創(chuàng)建一個(gè)輔助攝像機(jī),取名Camera_1,的視錐范圍要和主攝像機(jī)一樣,但渲染層級(jí)較低,將Camera_1作為藍(lán)色門的子物體:

通過代碼讓Substitute實(shí)時(shí)獲取主攝像機(jī)的世界坐標(biāo)的位置與旋轉(zhuǎn),再將本地坐標(biāo)賦給Camera_1,這樣輔助攝像機(jī)與藍(lán)色門的位置和主角與橙色門的位置就會(huì)保持同步:
//獲取主攝像機(jī)世界位置和旋轉(zhuǎn)
substitute.position = mainCamera.position;
substitute.rotation = mainCamera.rotation;
//將本地位置和旋轉(zhuǎn)賦給輔助攝像機(jī)
camera_1.localPosition = substitute.localPosition;
camera_1.localRotation = substitute.localRotation;
?


同樣的方法,再創(chuàng)建一個(gè)替身和輔助攝像機(jī),也可以用來渲染藍(lán)色門內(nèi)的場景:

第三層空間的渲染

如果把主場景成為第一層空間,傳送門看進(jìn)去的是第二層,那么上圖中紅框內(nèi)渲染的就是第三層。做到第三層空間的渲染,其實(shí)還是和渲染第二層一樣的原理,創(chuàng)建渲染第三層空間的輔助攝像機(jī)Camera_2:


同樣的方法,將第三層的另一個(gè)攝像機(jī)也創(chuàng)建好,我們來看三層空間的效果展示:

這樣就保持著三層空間的渲染,當(dāng)然也可以再繼續(xù)往下發(fā)展,除第一層空間外,每層都需要兩個(gè)攝像機(jī),方法都是一樣,越往下層的攝像機(jī)渲染層級(jí)越低,例如主攝像機(jī)的層級(jí)為0,那么第二層空間的兩個(gè)攝像機(jī)分別為-1和-2,第三層為-3和-4,且最低的攝像機(jī)的ClearFlags選項(xiàng)要設(shè)為Skybox或者SolidColor,其它所有攝像機(jī)都設(shè)置為Depth only。

而每個(gè)輔助攝像機(jī)都需要一個(gè)Substitute來幫助定位,如果要渲染三層空間,就一共需要四個(gè)Substitute(四個(gè)輔助攝像機(jī))。
本期文章內(nèi)容不多,主要是介紹了傳送門的制作原理。當(dāng)大家理解之后,在下一期中將會(huì)正式介紹物體在門中穿梭的實(shí)現(xiàn)方法,屆時(shí)會(huì)少不了代碼,并且同時(shí)會(huì)介紹過程中會(huì)遇到的許多坑。

最后想系統(tǒng)學(xué)習(xí)游戲開發(fā)的童鞋,歡迎訪問 :http://www.levelpp.com/ ??? ?
游戲開發(fā)攪基QQ群:869551769? ??
微信公眾號(hào):皮皮關(guān)