5分鐘入門Cinemachine智能相機系統

摘要:相機是Unity世界的眼睛,一個智能相機更是能幫咱們節省大把的時間和精力。Cinemachine現在已經大量應用到各種項目中,如果你還沒有用過Cinemachine,牆裂建議你來體驗一下。

你好,我是跟着大智學Unity的萌新,我叫小新,這是我本週的學習總結報告哦。

Cinemachine入門

Cinemachine入門還是很容易的,5分鐘足矣,但是深入去研究裏面也有很多門道。

安裝

Cinemachine是Unity官方開發的一個免費的插件。目前Cinemachine最新版爲2.5,支持Unity 2017.1及以上版本。

從Unity 2018.1開始,Cinemachine可以從Package Manager安裝。之前的Unity版本可以從Asset Store中下載安裝。

安裝好Cinemachine之後,菜單欄會有一個新的菜單項叫:Cinemachine。

Cinemachine沒有外部依賴包,安裝後就可以使用。Cinemachine還可以和Post Processing Stack(場景後處理工具)一起使用

從舊版Cinemachine升級

如果你從Asset Store安裝過Cinemachine,現在想從Package manager中升級到最新版本。那需要注意以下步驟:
1、用Unity2018.1或之後的版本打開工程。
2、新建一個空場景(防止升級時場景中腳本引用丟失)。
3、在Project窗口中刪除Cinemachine文件夾以及相關資產(如CinemachinePostProcessing相關資產)。
4、在Package Manager中安裝Cinemachine包。

Cinemachine基本使用流程

使用Cinemachine時需要用一種新的方式來思考相機:你可能之前研究的都是如何通過腳本來更好的控制相機,但是在Cinemachine中,你需做的是各種相機的不同用途,快速創建出想要的相機然後調他們的參數就可以了。

虛擬相機

從菜單欄Cinemachine > Create Virutal Camera創建虛擬相機。

Cinemachine能控制大量相機,但是它並不創建新的相機,它通過控制Unity相機來實現多機位的效果。如何實現的呢?在Cinemachine中有一個虛擬相機的概念。虛擬相機是相機的一些設置,用於控制Unity相機的移動、旋轉以及相關設置。

每個虛擬相機是一個單獨的物體,獨立運行,也和場景中的相機沒有直接關係。例如,你的場景可能長這樣:

虛擬相機有什麼功能呢?

  • 決定Unity相機在場景中的位置
  • 決定Unity相機的朝向,並跟蹤某物體
  • 爲相機添加程序化的晃動,比如手持相機效果或者車輛的震動

Cinemachine系統鼓勵你創建多個虛擬相機。虛擬相機有很好的性能,不用過多擔心會出現性能問題。如果你的場景對性能很敏感,可以禁用當前使用的虛擬相機以外的所有的虛擬相機,這樣能達到極致性能。

虛擬相機的一個最佳實踐是:一個鏡頭使用一個虛擬相機。例如:

  • 對於兩個角色對話的過場動畫,使用三個虛擬相機:一個相機用於兩個角色中間的鏡頭,單獨的虛擬相機用於每個角色的特寫鏡頭。然後使用Timeline同步音頻與虛擬相機。
  • 複製一個現有的虛擬相機,這樣兩個虛擬相機在場景中的位置相同。對於第二個虛擬相機,稍微改變一下FOV或構圖。當玩家進入觸發區域時,Cinemachine會從第一個虛擬相機過渡到第二個虛擬相機,用於強調變化。

同一時間僅有一個虛擬相機控制Unity相機,這個虛擬相機被稱爲活動虛擬相機(live virtual camera)。例外情況是從一個虛擬相機混合到另外一個虛擬相機的時候,混合階段兩個虛擬相機都是活動狀態。

2、添加Cinemachine Brain

通常這一步不需要你手動添加,因爲在第一步創建Virtual Camera時會自動給Unity相機添加Cinemachine Brain組件。

CinemachineBrain是掛在Unity相機上的一個組件。這個組件會跟蹤場景中所有的活動虛擬相機。你可以通過激活/禁用虛擬相機物體來指定下一個活動虛擬相機。

Cinemachine Brain在運行時可以響應各種事件,這樣可以通過邏輯動態控制相機。因爲在遊戲中,很多動作是不可預測的。

3、配置VirtualCamera的移動和旋轉策略

使用VirtualCamera組件中的Body屬性來設置相機如何移動。使用Aim屬性來設置相機如何旋轉。

虛擬相機有兩個跟蹤目標:

  • Follow指定了相機跟隨移動的目標。
  • Look At指定了相機瞄準的目標。

Cinemachine中包含了各種用於相機控制和瞄準的算法。每個算法提供了一種特定的方式,你可以通過設置算法的屬性來滿足你的特殊需求。你也可以通過繼承CinemachineComponent來實現自定義的移動和瞄準的行爲。

Body屬性提供了下列算法來移動虛擬相機:

  • Do Nothing:不移動虛擬相機
  • Framing Transposer:在屏幕空間,保持相機和跟隨目標的相對位置,可以設置緩動。
  • Hard Lock to Target:虛擬相機和跟隨目標使用相同位置。
  • Orbital Transposer:相機和跟隨目標的相對位置是可變的,還能接收用戶的輸入。常見於玩家控制的相機。
  • Tracked Dolly:相機沿着預先設置的軌道移動。
  • Transposer:相機和跟隨目標的相對位置固定,可以設置緩動。

Aim屬性提供了下列算法來旋轉相機對準Look At的目標:

  • Composer:將目標保持在相機鏡頭內,可以設置多種約束
  • Group Composer:將多個目標保持在相機鏡頭內
  • Do Nothing:不旋轉相機
  • POV:根據用戶的輸入旋轉相機
  • Same As Follow Target:將相機的旋轉和跟隨目標的旋轉同步
  • Hard Look At:將Look At目標固定在鏡頭中心的位置。

4、配置鏡頭構圖

上面第3步提到的Framing Transposer、Composer和Group Composer算法定義了鏡頭的幾個特殊區域,可以用於鏡頭構圖。

  • Dead zone:Cinemachine會將目標保持在這個區域,目標在這個區域時,鏡頭保持不動。
  • Soft zone:如果目標進入這個區域,會觸發相機的移動和旋轉,將目標重新移回dead zone。這個過程可能很快,也可能很慢,取決於Damping屬性設置。
  • Screen:Dead zone區域的中心在屏幕上的位置,可以不在整個遊戲屏幕的正中間。
  • Damping:模式現實世界中操控相機時的延遲。Damping設置了目標進入soft zone後相機的反應速度。數值越小,相機反應越快,會更快地操作相機把目標保持在dead zone。數值越大,相機反應越慢,跟隨目標回到dead zone所需的時間也就更長,可以用來模擬一個很笨重的攝像機。

組件中的Game Window Guides勾選後,可以在Game窗口可視化的查看/編輯構圖區域。最外圈是no pass zone,也就是目標從來不會到的位置。中間的黃色小方塊代表了target的位置。

通過拖拽每個區域的邊緣或者調整Inspector上的數值來調整這些區域。調整這些區域可以得到多種多樣的相機行爲。比如使用更大的damping值模擬笨重的相機;增加dead zone和soft zone來創建一個對目標運動不敏感的相機。

5、配置模擬相機的晃動

現實世界的攝像機通常比較笨重,由攝影師手持或者綁在車輛上。使用Noise屬性可以模擬這些效果。例如,你可以給相機添加晃動來跟隨一個向前跑的角色以獲得更好的沉浸感。

每幀更新後,Cinemachine給相機單獨添加晃動。這些晃動不會影響相機後續的位置和鏡頭。這樣可以保證虛擬相機運行結果的一致性。

總結

小新:“上面就是配置一個Cinemachine虛擬相機的基本流程,經過這些步驟之後,就有了一個初步能用的虛擬相機了。動動手試試調節一下這些屬性,看看有什麼不同的結果。後面咱們繼續一起來探索這些屬性的詳細信息。”

【擴展學習】洪流學堂公衆號回覆timeline可以下載Timeline&Cinemachine系列教程全文帶目錄PDF


好了,今天就就讓小新絮絮叨叨到這裏了。沒講清楚的地方歡迎評論,不點贊收藏我可能不會回覆你的哦(¬、¬) (¬_¬)

我是大智,你的技術探路者,下次見!

別走!點贊收藏哦!

好,你可以走了。

發佈了142 篇原創文章 · 獲贊 77 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章