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。是在類內嵌的結構體,具體可見其原始碼。下面用程式碼實現新增物件組。
-
public void SetTargets(params Transform[] targets)
-
{
-
if (targets.Length <= 0)
-
return;
-
CinemachineTargetGroup.Target[] cmTargets = new CinemachineTargetGroup.Target[targets.Length];
-
for (int i = 0; i < targets.Length; i++)
-
cmTargets[i] = new CinemachineTargetGroup.Target() { target = targets[i], weight = 1f, radius = 1f };
-
targetGroup.m_Targets = cmTargets; //將建立的列表賦給目標物件組。
-
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
(上面粒子有Bug,是更新2017版本後出現的,不要在意。)
單個目標 和 多個目標之間切換
上圖自定義混合變化包含兩個虛擬相機的切換,在資原始檔中建立(Create/Cinemachine/Blender/Settings),分別是單目標和多目標(其實這裡加不加都一樣,因為樣式和預設的一樣)。程式碼很簡單,只要設定虛擬相機是否開啟即可。
-
// 多目標轉換到單目標
-
cmFollowCameraRig.followVitualCamera.enabled = true; // 啟用單個目標虛擬相機元件
-
cmMultiTargetCameraRig.multiVirtualCamera.enabled = false; // 關閉多目標虛擬相機元件
-
// 單目標轉換到多目標,與上面相反
-
cmFollowCameraRig.followVitualCamera.enabled = false;
-
cmMultiTargetCameraRig.multiVirtualCamera.enabled = true;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
遊戲開始,多目標轉換到單目標
主角死掉,單目標轉多目標