Unity Cinemachine智能相機教程(五):VirtualCamera的Extension擴展

摘要:【長文預警,先收藏後品嚐】如何讓相機更智能呢?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目標,這個偏移會是與相機的距離。


擴展閱讀

【擴展學習】洪流學堂公衆號回覆timeline可以下載Timeline&Cinemachine系列教程全文帶目錄PDF哦,更有視頻教程等着你!


呼~ 今天小新絮絮叨叨的真是夠夠的了。沒講清楚的地方歡迎評論,咱們一起探索。

我是大智(歡迎加我微信:zhz11235),你的技術探路者,下次見!

別走!點贊收藏哦!

好,你可以走了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章