1. 程式人生 > >SIKI教程分享---HitGHOST(3D版打地鼠)---一.圖片作為3D場景的背景

SIKI教程分享---HitGHOST(3D版打地鼠)---一.圖片作為3D場景的背景

        價格公道,而且內容也很多,涉及面廣,值得推薦。

        本文就是在這個系列中的其中一個拿出來分享。不過程式碼和部分實現都被我改了重寫,感興趣的人推薦去看全系列的課程。會講得詳細些。這裡分享我就只提部分技術點,基礎的東西就不重複。傳送門

       本文側重點不同,我著重的是2D圖片弄成3D背景的實現(即攝像頭的重疊),以及槍的移動實現。而序列化部分我就另外系列分享,因為序列化部分在開源庫中有很多,知識點也是很多,故另外分開分享。

        本文會分兩部分來寫。本部分記錄攝像頭的重疊。

       在3D場景中,實現背景圖片有兩種思路:

       ①簡單實現是:用一個Cube或者Plane,放到其他全部物體的後面(遠離攝像頭),然後平展到比鏡頭視角大一點點,再在對著鏡頭的一面貼上背景圖來實現3D場景的背景圖效果。

       ②鏡頭的疊加實現:unity中可以實現多個鏡頭的視覺合併,即每個鏡頭只關注自己要的東西(只能看到部分東西),最終的效果卻可以疊加全部鏡頭看到的效果(但是存在前後,前面的東西會擋住後面的東西)。

 鏡頭疊加

        unity中,我們知道2D部分會前置在鏡頭前面,擋住它後面的東西,如果我們直接用圖片放在image上,肯定就直接把後面的3D物體全部擋住了。像下面這樣,彈窗直接把介面全擋住了。

       當如果有鏡頭疊加技術,就可以一個鏡頭渲染2D,然後在這個鏡頭再靠近我們的地方弄第二個鏡頭來渲染3D的東西,這樣2D部分就能放到3D部分的後面了,也就實現圖片渲染為3D場景的背景圖了。像下圖,背景圖的鏡頭只渲染image,其他部分由主攝像頭渲染。

        當然,這裡說鏡頭的前後,其實是Depth這個東西就能實現了,不用物理上的Position上的前後,Depth這東西,在做2D的UI時就有體會,2D的東西在Z軸上是一樣的,但是他們怎麼還會發生重疊遮蓋效果?其實就是這個“深度”概念,在UI中,深度體現在Hierachy中的上下順序,越在下面的東西,就會遮住上面的東西,這裡可以理解為上面的東西是之前已經加在裡面的,後面加的東西放在下面,照理,後面來的東西會蓋住前面原有東西(把depth理解成Z軸的值,但是把值X0.000001這樣,空間上確實幾乎在z=0的平面,但是三維中卻是有前後順序)。

        下面記錄怎麼實現:

 1)新增新Layer:BackgroundImage

2)新增Image(其他可以放圖片的也行)

      然後把背景圖片拉上去賦值,注意修改型別為平鋪 Tiled 。如果3D場景中的光照有顏色,這裡把對應的Color也同步改上去。然後就是最重要分層,Layer部分改為剛剛新建的BackgroundImage層。(它上層的Canvas也同步修改到該層)

3)新建攝像頭BackgroundCamera

      這個攝像頭Layer也分到BackgroundImage層,然後選Culling Mask為該層。意為只渲染該層。除Depth的值要比main的小,設為-2,其他引數保持和main攝像頭一樣。但是這個攝像頭不用Audio Listener(肯定不需要)和Flare Layer(看情況,一般不需要)。當然是可以把除Transform和camera外的元件都去除的。

4)修改主攝像頭需要改動的地方

     Culling Mask剔除掉BackgroundImage層;Depth改為大於上面攝像頭的值,這裡為-1;

     注意這時候還是不行的,沒看到鏡頭疊加的效果,但是明明我們Depth修改了呀?其實是因為main攝像頭渲染模式我們還沒改:修改Clear Flags為Depth only,這時候Depth才起作用。

該工程剩下部分等下文再繼續記錄。感謝關注。