CocosCreator:2D攝像機(jī)跟隨、多相機(jī)渲染
版本:3.6.3
之前處理過一次類似的需求,當(dāng)時想著總結(jié)一下來著。結(jié)果因?yàn)槠渌氖虑橥浟?。然后?dāng)下又遇到了相同的需求,處理起來并沒有那么順暢。還是不如在B站上記一下啊。
需求:
角色、背景、文案提示or菜單等。攝像機(jī)跟隨角色移動,場景跟隨攝像機(jī)移動,文案、菜單等按照適配固定的顯示在屏幕上的某個位置。
反面案例:
????首先按照記憶中的經(jīng)驗(yàn),創(chuàng)建兩個相機(jī)。
????一個渲染角色和背景,并跟隨角色移動。
????一個渲染UI和一些靜態(tài)的資源,比如音效按鈕、文案提示等
????問題出現(xiàn)了,一些原本應(yīng)該出現(xiàn)在屏幕上的元素并沒有被成像到屏幕。
????出現(xiàn)了問題先去查了官方文檔。

查看了文檔后并沒有得到什么實(shí)質(zhì)性的幫助。事實(shí)上解決方案文檔中有描述,但是一筆帶過了,當(dāng)時看了兩遍都沒有注意到。

對于個人來說,對這個屬性沒那么敏感,一是它描述的不那么清楚,對于不太了解“幀緩沖”、“天空盒”這些的,沒那么好理解。二就是平時做的大多是2D,專業(yè)知識學(xué)習(xí)的不多,能處理問題就行,技術(shù)確實(shí)沒那么好。
以上可以理解為不那么廢話的廢話,現(xiàn)在開始處理問題,在處理問題之前先了解一些專業(yè)術(shù)語。
幀緩存:又稱為”幀緩沖”,它是指存儲圖形畫面數(shù)據(jù)的一種緩沖區(qū),它可以保存和管理圖形輸入、輸出、變化和處理過程中所產(chǎn)生的每一幀圖形數(shù)據(jù)。它主要用來存儲圖形圖像,以支持動態(tài)圖形處理和加速圖形渲染操作。
景深(DOF):是指在攝影機(jī)鏡頭或其他成像器前沿能夠取得清晰圖像的成像所測定的被攝物體前后距離范圍
Skybox:是一種用于游戲開發(fā)的3D環(huán)境,它可以模擬出游戲世界的天空和遠(yuǎn)景。

關(guān)于這些術(shù)語包括clearflag的選擇Cocos官方文檔沒有過多詳細(xì)描述,以下都是到Unity官網(wǎng)上去扒的,想著應(yīng)該是類似的處理,至少目前個人是這么理解的。貼一些Unity對camera組件的描述:https://docs.unity3d.com/cn/current/Manual/class-Camera.html
1.創(chuàng)建兩個攝像機(jī),分組自定義設(shè)置分別去渲染player、bg和文案tip

在相機(jī)組件中分別設(shè)置以下3個屬性:

Priority:相機(jī)的渲染優(yōu)先級,值越小越先渲染
Visibility:相機(jī)的渲染分組,也就是上面設(shè)置的自定義的分組,決定了相機(jī)會渲染哪些節(jié)點(diǎn)。
Clear Flags:將渲染UI和靜態(tài)元素的上層節(jié)點(diǎn)的相機(jī)UICamera的ClearFlag設(shè)置為?Depth Only。這樣將在屏幕上保持環(huán)境的圖形顯示,但丟棄有關(guān)每個對象在 3D 空間中所處位置的所有信息。繪制UI時,不透明部分將完全覆蓋所繪制的任何對象(無論它與環(huán)境的接近程度如何)。

這樣隨著鏡頭跟隨player移動時環(huán)境會變化,但被單獨(dú)相機(jī)渲染的tip文案或其他的UI元素仍待在屏幕上的某個適配的位置。