Unity Cinemachine插件學習筆記,實現單目標和多目標之間切換
*版本要求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
游戲開始,多目標轉換到單目標
主角死掉,單目標轉多目標
————————————————
原文鏈接:https://blog.csdn.net/l773575310/article/details/78068113