1. 程式人生 > >Cinemachine學習筆記

Cinemachine學習筆記

以下都是轉載內容,能夠比較直觀的學習一些基礎內容。現在的Cinemachine更新了許多新的功能,但是Cinemachine外掛都ExamplesScences,去看一下官方例子和文件來學習更佳

*版本要求Unity2017.1及以上。

參考資料: 
[官方] Unity 2017.1正式版釋出 
Cinemachine外掛:Cinemachine。 
結合Timeline實現動畫:Unity Cinemachine外掛學習筆記,結合Timeline實現簡單場景動畫 
官網教程:Timeline and Cinemachine (Cameras)

  Cinemachine在2017版中正式加入,結合Timeline可以輕鬆的製作出一下相機動畫。相比Unity自帶的標準相機,這個新相機外掛可操作的變數更多,不同虛擬相機(用來控制相機的)可以平滑轉換等,具體可見上方第一個連結。


Cinemachine

選項名 說明
Virtual Camera 普通虛擬相機。最常用的相機裝置。其實下面的都是虛擬相機。
FreeLook Camera 自由檢視相機。可以保證鏡頭內出現頭和身體,及相機的活動範圍在目標周圍圓柱(曲面的)表面,常用於第三人稱視角。
State-driven Camera 狀態驅動相機。新增虛擬相機列表,可以在不同的相機直接直接實現平滑切換,同時其子相機列表如果沒有設定LookAt物件等,會直接使用這個父相機的物件。
ClearShot Camera 乾淨鏡頭相機。類似上一個相機,區別在於這個相機可以通過判斷子相機的CinemachineCollider(如果有),看是否相機被場景物體阻礙,切換相機。具體可看其原始碼註釋。
Dolly Camera with Track 可推拉的軌道相機。通過結合軌道路徑,就可以模擬像拍電影般鏡頭軌道移動。
Group Target Camera 多目標相機。可以同時設定多個目標。

Cinemachine Brain

  相機的腦子,只有這個元件要新增到Camera上,才能實現任何虛擬相機的效果。

變數名 說明
Live Camera 當前選擇的虛擬相機。
Live Blend 當前的鏡頭轉換名稱。
Show Debug Text 在遊戲畫面左上角顯示除錯資訊。
Show Camera Frustum 顯示相機的視錐體,相比原來自帶的邊框,這個會裁切掉不在顯示範圍內的邊線。
World Up Override 過載世界的向上方向(y軸),虛擬相機是通過這個來判斷世界環境。
Default Blend 預設相機切換模式。
Custom Blends 自定義相機切換模式。
Camera Cut Event 相機立即切換時事件。
Camera Activated Event 相機混合(就是有切換變化,不是Cut時)切換時第一幀事件。

Cinemacine Virtual Camera

變數名 說明
Status : Live/Standby/Disable 當前這個虛擬相機的狀態。Live為正在使用,Standby為準備使用(沒在用,但如果上一級停用了,可能會切換到當前虛擬相機),Disable為不能用。按Solo按鈕會讓相機切換到這個虛擬相機(包括Disable)。
Priority 虛擬相機的優先順序,如果同時有多個虛擬相機,使用優先順序最高的。如果多個同等級的,應該是按Hierarchy順序找到第一個虛擬相機。
Look At 相機的視角目標。
Follow 相機的跟隨目標。
Lens 鏡頭常用配置。視角區域,最近最遠裁切平面, 鏡頭旋轉角度。
Aim 瞄準設定,有三種:Hard constraint,固定距離,沒有任何平滑效果。Composer,有平滑效果的瞄準目標。Group Composer,同時瞄準多個目標。
Body 相機本身。四種:Hard constraint,固定距離,相當於第一人稱。 Orbital Transposer:軌跡轉換器?似乎是模擬第三人稱。 Tracked Dolly,軌道推拉,相機只能在軌道上移動(即使設定了Follow物件),需要軌道路徑CinemachinePath。 Transposer,普通的鏡頭轉換。
Noise 噪聲。可以模擬相機手持抖動效果。

 
如上圖配置,虛擬相機會找到帶腦子的相機並控制他的位置角度,遊戲畫面中,黃點是目前目標坦克的位置(設定了z軸偏移量5,所以實際位置在坦克向前5個單位)。最裡面黃色區域(Dead Zone)為黃點自由移動區域,在這個範圍內 目標移動了並不會改變相機位置。第二層綠色區域(Soft Zone)為目標允許在的範圍,不過隨時間推移最後會限制在最裡層。最外層紅色區域為目標不允許停留範圍,及坦克一旦脫離綠色以外的區域,會立即移動相機來保持目標不離開鏡頭範圍。

單個目標

 
實際執行時,是使用Hard constraint。因為主角旋轉幅度大,鏡頭變化大,使用Transposer的自由範圍會產生不適。

多個目標

變數名 說明
Position Mode 位置模式。Group Center,所有目標的中心(長方體中心)。 Group Average,所有目標位置和權重的平均值。
Rotation Mode 旋轉模式。Manual,手動,就是根據虛擬相機身體設定。Group Average,所有目標旋轉平均值。

因為目標不是簡單的Transform,而是包含權重和半徑的。所以在使用程式碼新增時,需要建立其結構體:CinemachineTargetGroup.Target。是在類內嵌的結構體,具體可見其原始碼。下面用程式碼實現新增物件組。

 
  1. public void SetTargets(params Transform[] targets)

  2. {

  3. if (targets.Length <= 0)

  4. return;

  5. CinemachineTargetGroup.Target[] cmTargets = new CinemachineTargetGroup.Target[targets.Length];

  6. for (int i = 0; i < targets.Length; i++)

  7. cmTargets[i] = new CinemachineTargetGroup.Target() { target = targets[i], weight = 1f, radius = 1f };

  8. targetGroup.m_Targets = cmTargets; //將建立的列表賦給目標物件組。

  9. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

 
(上面粒子有Bug,是更新2017版本後出現的,不要在意。)

單個目標 和 多個目標之間切換

 
上圖自定義混合變化包含兩個虛擬相機的切換,在資原始檔中建立(Create/Cinemachine/Blender/Settings),分別是單目標和多目標(其實這裡加不加都一樣,因為樣式和預設的一樣)。程式碼很簡單,只要設定虛擬相機是否開啟即可。

 
  1. // 多目標轉換到單目標

  2. cmFollowCameraRig.followVitualCamera.enabled = true; // 啟用單個目標虛擬相機元件

  3. cmMultiTargetCameraRig.multiVirtualCamera.enabled = false; // 關閉多目標虛擬相機元件

  4.  
  5. // 單目標轉換到多目標,與上面相反

  6. cmFollowCameraRig.followVitualCamera.enabled = false;

  7. cmMultiTargetCameraRig.multiVirtualCamera.enabled = true;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

遊戲開始,多目標轉換到單目標

主角死掉,單目標轉多目標