用Unity实现传送门效果(一)
知乎專欄:游戲開發入門指南——Unity+
https://zhuanlan.zhihu.com/gdguide
大家好。
接下來的兩篇內容,是用Unity來做傳送門的效果。這里是用自己的方法來做的,中途踩了許多坑不過最終還是實現了。下面是效果圖:
?
本篇文章幾乎沒有代碼。主要是介紹一下實現的原理。
?
先不說如何打開傳送門以及如何在傳送門中穿梭的問題,我們先來看看攝像機是怎樣將場景及主角從另一個角度渲染進門里面的。
?
在現實生活中,如果把眼睛比作主攝像機,人的眼睛是不能直接看見自己的側面的,如果一定要看則會用另外的攝像頭從側面對自己進行拍攝,再吧顯示器材放在視線范圍內,這樣就能實時的去觀察自己的側面了。同樣的道理,要達到上圖中的效果,一個攝像機是肯定不夠的,需要其它的攝像機來輔助。
來看看我們的場景,場景很簡單,就是一個墻面的地面組成的,當傳送門打開時,就讓該處的墻暫時禁用:
?
讓主攝像機作為主角的眼睛始終跟隨主角移動,如果主攝像機從傳送門看出去,門里其實是什么都沒有的:
?
那么這段“空白”就需要填補,剛才我們提到了其它的攝像機,就是用來填補這個空白的。
在效果展示中,主角從橙色門中由內而外看出去,是和輔助攝像機從藍色門由外到內看進來的畫面是一樣的:
?
所以只要將輔助攝像機看到的畫面拿來填補主攝像機的空缺就可以了,二手手機轉讓前提是主攝像機的渲染層級更高,我們對主攝像機的屬性進行設置:
但是要真正的無縫銜接則對攝像機的位置關系有一定的要求,也就是說主攝像機與橙色門的位置關系同輔助攝像機與藍色門的位置關系必須是一致的:
要讓輔助攝像機的位置同步,我們可以創建一個空物體,取名叫Substitute,讓它成為橙色門的子物體,再創建一個輔助攝像機,取名Camera_1,的視錐范圍要和主攝像機一樣,但渲染層級較低,將Camera_1作為藍色門的子物體:
?
注意這里為了方便理解使用了中文,在實際開發中請避免使用中文命名。
通過代碼讓Substitute實時獲取主攝像機的世界坐標的位置與旋轉,再將本地坐標賦給Camera_1,這樣輔助攝像機與藍色門的位置和主角與橙色門的位置就會保持同步:
?
同樣的方法,再創建一個替身和輔助攝像機,也可以用來渲染藍色門內的場景:
?
第三層空間的渲染
?
如果把主場景成為第一層空間,傳送門看進去的是第二層,那么上圖中紅框內渲染的就是第三層。做到第三層空間的渲染,其實還是和渲染第二層一樣的原理,創建渲染第三層空間的輔助攝像機Camera_2:
?
同樣的方法,將第三層的另一個攝像機也創建好,我們來看三層空間的效果展示:
?
這樣就保持著三層空間的渲染,當然也可以再繼續往下發展,除第一層空間外,每層都需要兩個攝像機,方法都是一樣,越往下層的攝像機渲染層級越低,例如主攝像機的層級為0,那么第二層空間的兩個攝像機分別為-1和-2,第三層為-3和-4,且最低的攝像機的ClearFlags選項要設為Skybox或者SolidColor,其它所有攝像機都設置為Depth only。
?
而每個輔助攝像機都需要一個Substitute來幫助定位,如果要渲染三層空間,就一共需要四個Substitute(四個輔助攝像機)。
本期文章內容不多,主要是介紹了傳送門的制作原理。當大家理解之后,在下一期中將會正式介紹物體在門中穿梭的實現方法,屆時會少不了代碼,并且同時會介紹過程中會遇到的許多坑。
?
總結
以上是生活随笔為你收集整理的用Unity实现传送门效果(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GameMaker Studio 中的组
- 下一篇: 大地图开发管理:《巫师3》Umbra遮挡