Unity2017中的Timeline工作流

Unity2017中的Timeline工作流

一、前言

在開發迷霧偵探的過程中,我們也沒有停止對Unity新技術的探索。本篇給大家分享一下我們學習Timline的收穫,通過本文,你將了解到如何創建Timeline,如何用Timeline來製作動畫,以及使用humanoid動畫等知識。隨著我們對Timline的熟練掌握,未來也會將Timline應用在我們實際的項目中。

本文主要包含下列5個小節的內容:

  • 創建Timeline資源和Timeline實例
  • 通過Infinite clip錄製簡單動畫
  • 把Infinite clip轉化成Animation Clip
  • 創建humanoid動畫
  • 使用Animation Override Tracks和Avatar Masking

前方多圖預警,用手機閱讀的朋友,盡量在wifi環境下閱讀:)。BTW,例子中的圖片資源來自Unity的官方手冊

二、創建Timeline資源和Timeline實例

要在場景裡面使用Timeline資源,GameObject要通過Playable Director組件來關聯Timeline資源。和Playable Director組件關聯後的Timeline資源會產生一個Timeline實例。需要注意的是,擁有Playable Director組件的GameObject必須同時也要有Animator組件。

在創建Timeline資源時,Timeline也會自動創建Timeline實例,同時Timeline編輯器也會自動創建所依賴的其他組件,例如Animator。

我們可以通過下面的步驟來創建Timeline:

  1. 選中場景中的GameObject。
  2. 打開Timeline編輯器(菜單:Window > Timeline).如果你選擇的GameObject沒有PlayableDirector或者PlayerDirector的Playable 還沒有設置Timeline資源,那麼Timeline編輯器會提示你點擊Create按鈕。

當選中的GameObject還沒有和Timeline資源關聯的時候

1.點擊Create. Unity會彈出一個對話框提示你將被創建的Timeline資源的名字和保存路徑。此時你也可以修改要要保存的路徑和文件名。

2.點擊Save.

前面兩步操作,Unity做了下列事情:

  • 保存Timeline資源到工程。如果你沒有修改Timeline資源要保存的名字和位置,Timeline資源的默認命名將會使用被選中的GameObject的名字加上「Timeline」為後綴。例如,選中的GameObject的名字是「Enemy」,那麼默認保存在工程中的Timeline資源的名字叫「EnemyTimeline」
  • 添加一個空的Animation Track到Timeline資源上
  • 添加一個Playable Director組件到選中的GameObject上,並且設置把Playable的屬性設置成Timeline資源(這樣會創建Timeline實例)。
  • 在Playable Director的Bindings中,Animation track被設置為被選中的GameObject。由於Animation track還沒有clip,因此被選中的GameObject將沒有任何動畫表現。
  • 添加Animator組件到選中的GameObject上。Animator組件通過Timeline實例來驅動GameObject。

三、通過Infinite clip錄製簡單動畫

本節內容講解在Timeline中錄製動畫。

你可以直接在Animation track裡面錄製動畫。當你直接在一個空的Animation track錄製動畫的時候,你就創建了一個Infinite clip.

什麼是Infinite clip呢?我們定義為通過Timeline的編輯器窗口錄製的關鍵幀動畫為Infinite動畫。Infinite clip不能修改位置,裁剪,或者分離,這是因為Infinite clip覆蓋了整個Animation track,沒有確切的大小。

在創建Infinite clip之前,必須要先為GameObject添加一個空的Animation track。點擊軌道的中的Record按鈕,開啟動畫錄製模式。Record按鈕只適用於用來製作簡單的動畫,例如立方體,球體,燈光等。如果綁定的是類人形的GameObject,則Record按鈕是不可用的。

點擊空的Animation Track上的Record按鈕,進入動畫錄製模式

點擊空的Animation Track上的Record按鈕,進入動畫錄製模式

當Track進入錄製模式時,Clip區域被繪製成紅色,並且提示有「Recording…」的信息。同時Record按鈕保持閃爍。

Timeline 編輯器在錄製模式下

在錄製模式下,對GameObject的動畫相關屬性的任何修改,都會在Timeline的播放指針(playhead)的位置設置一個Key。動畫相關屬性包括transform以及添加到GameObject的所有組件。

創建一個動畫時,首先要把Timeline的播放頭放在第一個關鍵幀的位置,然後選擇下面的一種方法來操作:

  • 在Inspector窗口中,右鍵點擊屬性的名字,然後選擇Add Key。這個操作為屬性添加一個關鍵幀,但不會改變它的值。同時可以看到,一個白色的菱形出現在infinite clip的播放頭的位置,表示當前的Key。
  • 在Inspector窗口中,改變屬性的值。Timeline用修改後的值為屬性添加一個關鍵幀到infinite clip。
  • 在場景視圖裡面,移動、旋轉或者縮放GameObject,Timeline將自動為修改後的屬性添加一個關鍵幀到infinite clip中去。

紅的背景標誌著已經有一個服務於這個屬性的動畫曲線被添加到clip了

添加一個白色菱形來放置key到infinite clip中

把播放頭移動到Timeline的不同位置,並修改GameObject動畫相關的屬性。在每一個位置上,Timeline編輯器都會為修改的屬性添加一個白色的菱形到Infinite clip上,同時添加對應的動畫曲線。

在錄製模式下,你可以右鍵點擊屬性的名字,執行一些有用的操作。例如添加一個key而不修改它的值,切換到前一個或者後一個key,刪除key等等。例如,右鍵點擊Position,並在右鍵菜單中選擇Add Key

右鍵點擊Position,執行Key相關的操作

再次點擊閃爍的Record按鈕,結束動畫錄製,在Curves視圖中可以編輯關鍵幀。另外你也可以雙擊Infinite Clip,然後通過Animation編輯器來編輯關鍵幀。

通過保存場景和工程來保存Timeline資源和Infinite clip. Timeline編輯器把關鍵幀動畫從Infinite clip保存成資源。資源命名為「Recorded」並且保存在TimeAsset內部。

錄製的動畫Clip保存在Timeline資源內部

對於數量超過1個的Infinite clip的情況下,後面的clip的命名從數字1開始。例如一個Timeline資源有3個已經錄製好的Infinite clips,他們的命名為:「Recorded」,「Recored(1)」, 以及「Recored(2)」。需要注意的是:如果刪除一個Timeline資源,它所包含的所有clip也會被刪除。

四、把Infinite clip轉化成Animation Clip

由於Infinite clip佔用了整個Animation track,因此我們不能裁剪,分離,以及修改它的位置。如果我們想要執行這些操作,需要先把Infinite clip轉化為Animation clip。

點擊track菜單(紅圈位置)

點擊Track 菜單圖標(紅圈位置)然後選擇Convert to Clip Track。另外也可以右鍵點擊軌道,然後在彈出的菜單裡面選擇Convert to Clip Track。

Infinite clip轉化成了Animation Clip

五、創建Humanoid動畫

本節內容主要講解通過Timeline來驅動一個人形角色、如何匹配Clip的偏移,手動調整Clip偏移,以及創建兩個Clip的融合來盡量消除兩個動畫之間的抖動和滑步。儘管本節所舉的例子是使用的人形角色,但是這個調整動畫的方法是適用於任何GameObject的。

首先我們假設這裡已經創建了一個Timeline實例,把一個人形角色的GameObejct綁定到Animation track

人形守衛綁定到空的Animation track

從工程里拖拽一個motion clip到Animation track中來創建一個新的Animation clip。例如,拖拽一個Idle姿態的動畫到Timeline編輯器。

綁定了人形守衛的Animation track 拖拽進了一個 Idle動畫

添加第二個motion clip。在這個例子中,一個命名為Run_Left的動畫片段被拖拽進Animation track.調整Run_Left的長度到合適的大小。在例子中,Run_Left調整為包含一個循環,因此守衛可以一邊跑一邊向左轉向。

Animation Track包含了Idle動畫和 Rune_Left動畫

在播放Timeline實例的時候,注意守衛的位置在兩個動畫為來回跳。因為守衛在Idle動畫結束時候的位置和Run_Left開始播放時的位置不匹配導致的。

守衛的位置在第一個動畫clip(29幀處)和第二個動畫(30幀處)跳動

通過匹配兩個Clip的位置偏移可以修正這個問題。Timeline編輯器提供了幾個不同的方法來匹配偏移,在本例中,要實現第二個動畫匹配第一個動畫的偏移,選中Run_Left clip, 點擊右鍵,然後在彈出的界面中選擇 Match Offsets to Previous Clip

點擊右鍵,然後在彈出的界面中選擇 Match Offsets to Previous Clip

匹配偏移之後,守衛在第一個動畫結束時(29幀,頭頂紅色箭頭的守衛)的位置朝向同第二個動畫開始時(30幀,綠色箭頭的幽靈)匹配

接下來再一次播放Timeline,儘管位置朝向都已經匹配了。我們仍然可以發現兩個動畫Clip之間依然有抖動,這是由於動畫在不同的姿態之間切換。在第idle動畫結束的時候,守衛是保持雙腳併攏的端正站姿。而在Run_Left開始的時候,守衛向前屈身且雙腳是分開的。

創建兩個動畫之間的融合過渡可以用來消除抖動。通過調整clip的大小,使Clip重疊來構造融合區域。在本例中,Idle動畫和Run_Left動畫的過渡中,Idle動畫調整為延遲到36幀,Run_Left動畫拖動到從25幀開始。剩下的屬性保留他們的默認值。

創建兩個動畫之間的融合來平滑過渡兩個動畫

當Idle動畫過渡到Run_Left的時候,融合消除了兩個不同姿態之間的明顯抖動,身體的大多數部位的過渡都很自然。然而還是不完美,因為在不同位置的腳之間混合會導致不自然的滑步。要修正滑步,你可以手動調整動畫Clip的root offset,讓兩個動畫之間的腳的位置盡量地靠攏,以此來減輕滑步的情況。選中Timeline編輯器中的動畫Clip來手動調整root offset。在Inspector 編輯器窗口中,展開Animation Playable Asset然後展開Clip Root Motion Offsets。

選中動畫片段,在Inspector 編輯器窗口中,展開Animation Playable Asset然後展開Clip Root Motion Offsets

Clip Root Motion Offsets中,位置和旋轉都不為0,這是由於之前我們執行過Match Offsets to Previous Clip,已經把他們設置為和前一個動畫結束時的值一樣。

在Clip Root Motion Offsets下面,打開調整位移和旋轉的工具,工具線框繪製在場景視圖中。可以使用下面任一種方法來調整動畫片段的root offset position。

  • 在在場景視圖中,拖動線框
  • 在Inspector窗口中,直接修改成想要的值。

開啟移動工具(點擊藍色箭頭處的移動按鈕)後在場景里可以看到線框工具(紅色箭頭處)。使用移動操作可以手動修改被選中的動畫片段的motion offset

六、使用Animation Override Tracks和Avatar Masking

本節主要講解如何使用Animaton Override track和Avatar Mask取代Animation track的上半身動畫。通過這個方法可以用來在Timeline中實現例如在跑的時候,同時揮手的動畫表現。

本節內容只展示在TImeline中如何使用Avatar Mask,同時假設你已經為一個守衛創建了一個有動畫的Timeline實例,例如跑步動畫。

守衛被綁定到Animation Track,同時Timeline中加入了Run_Forward動畫,這個動畫只循環一次

右鍵點擊Animation Track,在彈出的右鍵菜單中選擇Add Override Track。一個命名為Override 0的Animation Override track關聯到被選中的Animation track。需要注意的是,Animation override track不需要綁定GameObject。因為Override track被綁定到上面的Animation track,因此它實際上是被綁定到的同一個GameObject:守衛。

在右鍵菜單中選擇Add Override Track來添加一個 Override Track到Timeline

從項目中拖拽一個上半身動畫到Override track。例如這裡我們拖拽一個站立的同時揮手的動畫(Waving_Arms),同時把這個動畫的在Timeline中的長度調整到和Run_Forward一樣。

Animation Override Track包含了一個靜止站立且同時在揮手的動畫

播放Timeline,Waving_Arms動畫完全覆蓋Run_Forward動畫。我們可以通過給Animation Override track指定一個Avatar Mask來實現把Waving_Arms 動畫的上半身和Run_Forward動畫的下半身組合到一起。

選中Override track,在Inspector窗口中可以設置AvatarMask

從工程裡面,拖拽AvatarMask到AvatarMask屬性中去,勾選Apply Avatar Mask的按鈕。然後,Avatar Mask圖標將會出現在Track 名字的旁邊。

LowerBodyMask在Inspector窗口中設置給Animation Override track

紅色圓圈處的Avatar Mask標誌著Animation track使用了Avatar Mask

再次播放Timeline,我們可以到守衛的上半身動畫來自Waving_Arms,下半身動畫來自Run_Forward。可以通過點擊Avatar Mask圖標來臨時關閉Avatar Mask。

當Avatar Mask被關閉後,Avatar Mask的圖標消失,然後Waving_Arms將會完全覆蓋Run_Forward

七、寫在最後

關於Timeline的分享就到這裡了,大家對Timline的基本工程流程已經大致的了解了吧:)。一定會有朋友會問,怎麼不先來點迷霧偵探開發中的乾貨?嗯,可以確定的是迷霧偵探中的一些乾貨分享,正在趕往知乎的路上,因為研發小哥哥小姐姐們太忙,所以稍微走得慢了些,被Timline這篇搶了個先。如果覺得還不錯的話,請關注我們,您的支持給予我們持續前進的動力喲。

推薦閱讀:

103_Context 上下文
關於 ISART Digital,你想知道的都在這裡
如何與美術外包更有效率的合作
台味的飛刀折了。。。。
《Exploring in UE4》開篇

TAG:遊戲從業者 | 遊戲開發 | Unity遊戲引擎 |