摘要:【長文預警,先收藏後品嚐】如何讓相機更智能呢?Extension擴展可以給虛擬相機帶來無限的可能。
洪流學堂,讓你快人幾步。你好,我是跟着大智(VX: zhz11235)學Unity的萌新,我叫小新,這是我本週的學習總結報告哦。
自從咱們一起5分鐘入門Cinemachine之後,我和你一起學習了Cinemachine中的VirtualCamera的基本用法,VirtualCamera的Body屬性、Aim屬性、Noise屬性,今天咱們來學習一下它的擴展功能,可以給虛擬相機擴展增強更多的能力。
**【長文預警,先收藏後品嚐】**如何讓相機更智能呢?Extension擴展可以給虛擬相機帶來無限的可能。
虛擬相機擴展
Cinemachine的虛擬相機可以添加很多擴展,通過擴展來獲得更多的能力。比如Collider擴展可以讓相機被其他物體遮擋時,自動避開遮擋的物體。
Cinemachine內置了幾種擴展,你也可以通過繼承CinemachineExtension
類來實現你自己的擴展。
如何給虛擬相機添加擴展呢?你可以直接把擴展腳本拖到虛擬相機物體上,也可以從CinemachineVirtualCamera腳本中的下拉菜單中選擇。
下面咱們一起看下內置的幾個擴展都是什麼作用吧。
CinemachineCameraOffset
可以給相機添加偏移。
Offset 偏移量。相機自身空間座標系下的偏移。
Apply After 在什麼階段來計算增加偏移。
Preserve Composition 保持鏡頭構圖。如果在Aim階段之後調整相機偏移,調整偏移後重新調整瞄準的方向來保持LookAt的目標在屏幕中的位置。
CinemachineCollider
當人物和物體在複雜的場景中四處移動時,場景中的障礙物有時會遮擋目標。Cinemachine提供了擴展來處理這個情況。
這個擴展的主要作用是:用來在最後處理虛擬相機的位置,基於擴展中屬性的設置,保持LookAt目標的視線不受遮擋。
如上圖所示,在默認情況下,紅色的盒子擋住了黃色的盒子,但是加上CinemachineCollider擴展後,會自動避開遮擋視線的物體,讓黃色盒子能夠看到。
這個功能是使用射線檢測實現的,所以遮擋物上需要有Collider纔行。這個功能還是有點耗費性能的,如果你的遊戲對性能很敏感,可以考慮用其他方式實現這個功能。
Obstacle Detection 遮擋檢測
Collide Against 遮擋檢測的層layer
Ignore Tag 檢測忽略的Tag
Transparent Layers 透明層,代表不會遮擋視線的層layer
Minimum Distance From Target 如果遮擋物和目標物體很近,小於這個屬性的舉例,就忽略這個遮擋物(不避開它)
Avoid Obstacles 勾選時才啓用這個自動避開遮擋物的功能
Distance Limit 目標物與相機的檢測距離限制。在這個距離限制內纔會檢測遮擋。設置爲0即代表不限制。
Minimum Occlusion Time 遮擋超過這個時長以後才調整相機避開遮擋物。
Camera Radius 虛擬相機會盡量與遮擋物保持不低於這個距離。如果你看到由於較大的FOV導致相機穿透了遮擋物內部,可以適當增加這個值。
Strategy 避開遮擋物的策略。
- PullCameraForward 將相機沿着自身的Z軸往前拉,直到在遮擋物前面。
- PreserveCameraHeight 保持相機的高度,同時把相機往前拉。
- PreserveCameraDistance 保持相對於目標物體的距離,同時把相機往前拉。
Maximum Effort 最多處理多少個遮擋物。數字越大越影響性能,一般4足夠了。
Smoothing Time 平滑時長。到避開遮擋位置至少會停留這麼長時間。
Damping 不遮擋時相機回到正常位置的時長。
Damping When Occluded 相機從正常位置移到避開遮擋位置的時長。
Shot Evaluation
OptimalTargetDistance 如果設置大於0的值,在計算相機位置時會更傾向於接近這個距離。
CinemachineConfiner
CinemachineConfiner:這個擴展可以將相機的最終位置限定在一個區域內。Confier可以在2D或3D模式下運行。Mode屬性影響其接受的邊界形狀的種類。在3D模式下,是一個空間的範圍,需要考慮深度;在2D模式下,是一個平面的範圍,不必考慮深度。
對於正交相機,還有一個附加選項可以限制屏幕邊緣,而不僅僅是相機的位置。這樣可以確保整個屏幕區域都位於邊界區域內。
Confine Mode:限制模式,2D還是3D
Bounding Shape 2D/3D:需要一個Collider2D或者Collider對象來限定範圍。
Damping:阻尼。
CinemachineFollowZoom
這個擴展的功能是:調整相機的FOV來保持物體在屏幕上的尺寸。
Width 物體寬度
Damping 阻尼
Min FOV 最小FOV
Max FOV 最大FOV
CinemachineStoryboard
這個擴展的作用是:最後在屏幕上顯示一張圖片。
Storyboard Global Mute:勾選時全局禁用,不顯示所有CinemachineStoryboard的圖片。
Show Image:是否顯示圖片以及現實的圖片是什麼
Aspect:圖片比例。
- Best Fit 在屏幕範圍內儘可能大
- CropImageToFit 圖片撐滿整個屏幕,可能會有一部分不在屏幕內
- StretchToFit 拉伸圖片撐滿全屏
Alpha:圖片透明度
Center 圖片中心的位置
Rotation 旋轉
Scale 縮放比例,Sync勾選時寬高等比縮放
Mute Camera 勾選時,這個虛擬相機不會控制Unity相機(相當於只使用StoryBoard的功能)
Split View:圖片水平方向上的分割調節
Waveform Monitor:可以用來查看圖片的色階
CinemachineImpulseListener
關於相機震動後面還會有詳細的講解。
只有Impulse Signals和Impulse Source無法做任何事情,因爲他們發出的信號需要有“人”來接收並作出反應。Impulse Listener組件是虛擬相機的一個擴展,就是用來“聽到”震動信號並對震動作出反應的。
當你給一個虛擬相機添加Impulse Listener擴展時,這個虛擬相機就能對震動做出反應,最直觀的就是相機晃動。
下圖中,角色的腳是震動源。當腳與地板(A)發生碰撞時會產生震動。虛擬相機上的Impulse Listener擴展會對震動作出反應,那就是相機的晃動(B),會導致Game窗口中C的結果。
如何給虛擬相機添加這個ImpluseListener擴展呢?
選中虛擬相機,在Extension屬性中選擇:
屬性詳解
Channel Mask 通道遮罩,不包含的通道會被忽略。
Gain 脈衝的增益。1代表正常強度,0代表忽略這個信號。真實世界中,有的相機綁定在類似樹枝上,會造成晃動的更厲害。這個值越大,晃動就會越多。
Use2DDistance 使用2D距離,忽略Z軸
Post Processing Extension 後處理擴展
使用Post Processing Extension擴展可以將Postprocessing V2的profile添加到虛擬相機上。
這個擴展在虛擬相機激活時,會將Post-Processing Profile應用到相機上。如果相機和其他相機發生混合,Post Processing中的參數也會發生混合。
小新:“等等,我怎麼沒有看到這個擴展?”
在開始之前呢,你需要做一些設置:
1、通過Package Manager安裝Post Processing包。
2、這時候你就能在擴展下拉列表裏看到CinemachinePostProcessing啦。
3、這時候你還需要給Unity相機,也就是上面有CinemachineBrain組件的那個,添加Post-Process Layer組件。
4、這時候你給虛擬相機的CinemachinePostProcessing擴展設置Postprocessing Profile,相機激活時就會應用到Unity相機上。
屬性詳解
Profile 用來設置Post-Processing profile
Focus Tracks Target 勾選時,將對焦的距離設置爲相機和Look At目標之間的位置。
Offset 偏移。選中Focus Tracks Target時,對焦位置距離Look At目標的距離。如果沒有設置Look At目標,這個偏移會是與相機的距離。
擴展閱讀
- 【Cinemachine智能相機教程】VirtualCamera(四):Noise屬性
- 【Cinemachine智能相機教程】VirtualCamera(三):Aim屬性
- 【Cinemachine智能相機教程】VirtualCamera(二):Body屬性
- 【Cinemachine】VirtualCamera虛擬相機詳解(一)
- 5分鐘入門Cinemachine智能相機系統
- Unity編輯器錄屏神器:Unity Recorder
- 5分鐘製作過場動畫
- 【建議收藏】找不到免費的角色動畫?來試試mixamo
【擴展學習】在洪流學堂公衆號回覆
timeline
可以下載Timeline&Cinemachine系列教程全文帶目錄PDF哦,更有視頻教程等着你!
呼~ 今天小新絮絮叨叨的真是夠夠的了。沒講清楚的地方歡迎評論,咱們一起探索。
我是大智(歡迎加我微信:zhz11235),你的技術探路者,下次見!
別走!點贊,收藏哦!
好,你可以走了。