详解Unity中的摄像机及实例应用
前言
Unity中,通過攝像機來呈現給玩家精彩紛呈的游戲世界。開發(fā)者可以通過攝像機來固定玩家的游玩視角,渲染出特定畫面來呈現給玩家。本文介紹了Camera組件的相關參數以及如何使用攝像機的一些應用實例和誤區(qū)。
目錄
- 前言
- 一、攝像機組件及參數介紹
- 1.ClearFlags: 清除標記(背景)
- 2.Culling Mask: 選擇渲染層
- 3.Projection: 投影方式 (透視(默認)和 正交)
- 4.Clipping Planes: 裁剪平面
- 5.Viewport Rect: 視圖矩形(攝像機位置寬高)
- 6.Depth: 深度(攝像機渲染次序)
- 7.Occlusion Culling:遮擋剔除的開關
- 8.其余屬性,暫時用不到,就不贅述了
- 二、攝像機的實例應用
- 1.控制攝像機場景漫游
- 三、總結和參考資料
- 1.總結
- 2.參考資料
前排提醒:本文僅代表個人觀點,以供交流學習,若有不同意見請評論留言,筆者一定好好學習,天天向上。
閱讀此文章時,若有不理解的地方,推薦觀看本文列出的參考資料來對照閱讀。
Unity版本[2019.4.10f1] 夢小天幼 & 禁止轉載 2022.4.3
視頻講解:
詳解Unity的攝像機_BiLiBiLi
一、攝像機組件及參數介紹
當你創(chuàng)建一個場景,Unity會自動創(chuàng)建一個Main Camera,若你刪除它,那么你的世界會一片漆黑。我們可以在Hierarchy窗口右鍵,創(chuàng)建一個Camera,這時你會發(fā)現,你的世界又恢復了一片光明。
當我們新建了Camera,這時你會發(fā)現,它掛載了三個組件,分別是Transform、Camera和Audio Listener,其中Transform是每個游戲對象都擁有的,Camera和Audio Listener則是此攝像機的耳朵和眼睛。下面我們來詳細介紹關于Camera組件的相關參數。
新建一個Camera,自動添加這三個組件。
1.ClearFlags: 清除標記(背景)
攝像機渲染視圖時,會緩存顏色和深度信息,繪制出來的圖像中那部分沒有被繪制到的部分是空白,默認會顯示天空盒的顏色。
- Sky Box:使用天空盒填充空白部分,默認使用渲染設置[Window-Rendering-Lighting Settings]中的天空盒,若渲染設置也沒有設置天空盒,則會使用背景顏色。
- Solid Color:使用攝像機背景色填充空白部分
- Depth Only:不填充
這個也很容易理解,除去繪制之外的部分用默認黑色填充,若此時有其他相機(Depth比當前低),則填充其他相機畫面。
- Don’t Clear: 不清除顏色和深度緩存。(這里用處不多,不解釋了,反正我也沒搞懂)
Background: 背景顏色(當ClearFlags選擇Solid Color時,此選項生效)
2.Culling Mask: 選擇渲染層
通過選擇層來渲染指定層的對象,Unity中每個對象都被分配了一個層,默認為“Default”層
我將圓柱和正方體放到了層“Camera Culling Mask”,通過演示讀者應該能明白此參數作
通過Camera.cullingMask來在代碼中修改此值,Int類型,默認值為0
3.Projection: 投影方式 (透視(默認)和 正交)
- FOV Axis:視野軸
Vertical:垂直軸,設為該項后,調整FieldOfView會改變相機上下開合角度
Horizontal:水平軸,設為該項后,調整FieldOfView會改變相機左右開合角度 - Field Of View: 視角范圍(相機的視野拉伸),視角越大,視野越大,同時焦距越短
代碼中可以通過Camera.fieldOfView類變量來修改此值,單位為度,當相機為正交模式時,此參數被忽略
- Physical Camera: 以后再說,筆者還沒搞明白
- Size(正交模式選項):相機視口大小,屏幕豎直方向上相機所繪制出來的區(qū)域的一半。
4.Clipping Planes: 裁剪平面
顧名思義,Near和Far指定了其裁剪的區(qū)域范圍,若不處于這個范圍的不被渲染,可以節(jié)省計算量,設置多少合適,看需求。
代碼中可通過Camera.farClipPlane 和 Camera.nearClipPlane類變量來修改此值
5.Viewport Rect: 視圖矩形(攝像機位置寬高)
這里提供了四個數值,其中X和Y代表攝像機原點,一般不改動。
W和H則代表了攝像機的寬高,默認1則是占滿全屏,這里使用了屏幕坐標系來計算,不理解的讀者可以去我專欄里查看關于Unity中坐標系的講解(預計22.4.10會寫出來),
可以通過修改W和H來使兩個攝像機視圖疊加起來的效果。具體如何應用,下面再說
這里我設置了兩個攝像機,其中主要的攝像機先被渲染,然后左下角的攝像機后被渲染,且設置了這個攝像機的ClearFlags為Depth Only,這樣不會渲染多余部分,就實現了上圖所示效果。
6.Depth: 深度(攝像機渲染次序)
用于控制攝像機渲染次序,一般數值較小的會先渲染,數值較大的則會疊加到上一個攝像機上,上一個例子就用到了,其中左下角的攝像機次序為:0,主背景攝像機次序為:-1,所以能保證主背景攝像機先被渲染,然后再被左下角的攝像機疊加。
通過Camera.depth類變量來在代碼中修改此值
7.Occlusion Culling:遮擋剔除的開關
這個選項勾選有助于提升游戲性能,比如不在攝像機范圍內的物體,將不會被渲染出來
需要注意的是,場景中的物體需要預計算,且是靜態(tài)物體,勾選時Unity才能快速實時判斷物體是否在攝像機范圍內。
8.其余屬性,暫時用不到,就不贅述了
其實就是我沒搞明白,等我搞明白再添加上來
二、攝像機的實例應用
通過上述參數,讀者應該基本了解了Unity中的攝像機,下面通過幾個簡單的小案例來鞏固一下吧。
1.控制攝像機場景漫游
需求:通過WASD來前后左右移動攝像機,通過QE可以抬升下降,按住Shift可以加速。
通過鼠標滾輪可以縮放視圖,鼠標按下鼠標右鍵并移動,可以旋轉攝像機
演示動態(tài)圖如下:
整部分代碼其實并沒有應用上太多攝像機相關的參數,例子比較簡單。但是代碼寫的又臭又長,供新手參考一下,沒啥質量。且這段代碼是有Bug,旋轉沒有鎖定Z軸,這會導致鏡頭莫名其妙就圍著中心打轉。
高情商:請大家找出Bug并修復
低情商:我懶得寫了
三、總結和參考資料
1.總結
沒啥可總結的,主要把攝像機的幾個參數的作用記住就行。
2.參考資料
[1].夢天幼.詳解Unity的移動控制實現
[2].夢天幼.詳解Unity的幾種移動方式實現
[3].雪庭.unity中camera攝像頭控制詳解
[4].靈寶兒.Unity Physical Camera中Focal Length和Field of View關系
[5].syddf_shadow.天空盒(SkyBox)的實現原理與細節(jié)
[6].游戲蠻牛.[蠻牛教程] Unity3D 淺析-Camera(攝像機)
[7].邢小鵬.unity攝影機depth模式_Unity3d攝像機詳解
總結
以上是生活随笔為你收集整理的详解Unity中的摄像机及实例应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL语言基础:触发器相关知识介绍
- 下一篇: 还在用 Notepad++吗? 盘点五款