Unity3D Timeline 工作流

一、前言

這是Timline學(xué)習(xí)系列的第二篇,本節(jié)內(nèi)容主要講解Timeline基本的工作流程。通過(guò)本章,你將學(xué)會(huì)如何創(chuàng)建Timeline,如何用Timeline來(lái)制作動(dòng)畫,以及使用humanoid動(dòng)畫等知識(shí)。

本章主要包含下列5個(gè)小節(jié)的內(nèi)容:

  • 創(chuàng)建Timeline資源和Timeline實(shí)例
  • 通過(guò)Infinite clip記錄簡(jiǎn)單動(dòng)畫
  • 把Infinite clip轉(zhuǎn)化成Animation Clip
  • 創(chuàng)建humanoid動(dòng)畫
  • 使用Animation Override Tracks和Avatar Masking

前方多圖預(yù)警,用手機(jī)閱讀的朋友,盡量在wifi環(huán)境下閱讀:)。BTW,圖片資源來(lái)自Unity的官方手冊(cè)。

二、創(chuàng)建Timeline資源和Timeline實(shí)例

要在場(chǎng)景里面使用Timeline資源,要借助Playable Director組件來(lái)關(guān)聯(lián)Timeline資源和GameObject。和Playable Director組件關(guān)聯(lián)后的Timeline資源會(huì)產(chǎn)生一個(gè)Timeline實(shí)例。需要注意的是,擁有Playable Director組件的GameObject必須同時(shí)也要有Animator組件。

在創(chuàng)建Timeline資源的時(shí)候,Timeline也會(huì)自動(dòng)創(chuàng)建Timeline實(shí)例,同時(shí)Timeline編輯器也會(huì)自動(dòng)創(chuàng)建所依賴的其他組件,例如Animator。

你可以通過(guò)下面的步驟來(lái)創(chuàng)建Timeline:

  1. 選中場(chǎng)景中的GameObject。

  2. 打開Timeline編輯器(菜單:Window > Timeline).如果你選擇的GameObject沒(méi)有PlayableDirector或者PlayerDirector的Playable 還沒(méi)有設(shè)置Timeline資源,那么Timeline編輯器會(huì)提示你點(diǎn)擊Create按鈕。

當(dāng)選中的GameObject還沒(méi)有和Timeline資源關(guān)聯(lián)的時(shí)候

1.點(diǎn)擊Create. Unity會(huì)彈出一個(gè)對(duì)話框提示你將被創(chuàng)建的Timeline資源的名字和保存路徑。你也可以修改要要保存的路徑和文件名。

2.點(diǎn)擊Save.

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

  • 保存Timeline資源到工程。如果你沒(méi)有修改Timeline資源要保存的名字和位置,Timeline資源的默認(rèn)命名將會(huì)使用被選中的GameObject的名字加上“Timeline”為后綴。例如,選中的GameObject的名字是“Enemy”,那么默認(rèn)保存在工程中的Timeline資源的名字叫“EnemyTimeline”

  • 添加一個(gè)空的Animation Track到Timeline資源上

  • 添加一個(gè)Playable Director組件到選中的GameObject上,并且設(shè)置把Playable的屬性設(shè)置成Timeline資源(這樣會(huì)創(chuàng)建Timeline實(shí)例)。

  • 在Playable Director的Bindings中,Animation track被設(shè)置為被選中的GameObject。由于Animation track還沒(méi)有clip,因此被選中的GameObject將靜止不動(dòng)。

  • 添加Animator組件到選中的GameObject上。Animator組件通過(guò)Timeline實(shí)例來(lái)驅(qū)動(dòng)GameObject。

三、通過(guò)Infinite clip錄制簡(jiǎn)單動(dòng)畫

本節(jié)內(nèi)容講解在Timeline中錄制動(dòng)畫。

你可以直接在Animation track里面錄制動(dòng)畫。當(dāng)你直接往一個(gè)空的Animation track錄制動(dòng)畫的時(shí)候,你就創(chuàng)建了一個(gè)Infinite clip.

什么是Infinite clip呢?我們定義為通過(guò)Timeline的編輯器窗口錄制的關(guān)鍵幀動(dòng)畫為Infinite動(dòng)畫。Infinite clip不能修改位置,裁剪,或者分離,這是因?yàn)镮nfinite clip覆蓋了整個(gè)Animation track,沒(méi)有確切的大小。

在創(chuàng)建Infinite clip之前,必須要先為GameObject添加一個(gè)空的Animation track。點(diǎn)擊軌道的中的Record按鈕,開啟動(dòng)畫錄制模式。Record按鈕只適用于用來(lái)制作簡(jiǎn)單的動(dòng)畫,例如立方體,球體,燈光等。如果綁定的是類人形的GameObject,則Record按鈕是不可用的。

點(diǎn)擊空的Animation Track上的Record按鈕,進(jìn)入動(dòng)畫錄制模式

當(dāng)Track進(jìn)入錄制模式時(shí),Clip區(qū)域被繪制成紅色,并且提示有“Recording…”的信息。同時(shí)Record按鈕保持閃爍。

Timeline 編輯器在錄制模式下

在錄制模式下,對(duì)GameObject的動(dòng)畫相關(guān)屬性的任何修改,都會(huì)在Timeline的播放頭(playhead)的位置設(shè)置一個(gè)Key。動(dòng)畫相關(guān)屬性包括transform以及添加到GameObject的所有組件。

創(chuàng)建一個(gè)動(dòng)畫時(shí),首先要把Timeline的播放頭放在第一個(gè)關(guān)鍵幀的位置,然后按下面其中的的一種方法來(lái)操作:

  • 在Inspector窗口中,右鍵點(diǎn)擊屬性的名字,然后選擇Add Key。這個(gè)操作為屬性添加一個(gè)關(guān)鍵幀,但不會(huì)改變它的值。同時(shí)可以看到,一個(gè)白色的菱形出現(xiàn)在infinite clip的播放頭的位置,表示當(dāng)前的Key。

  • 在Inspector窗口中,改變屬性的值。Timeline用修改后的值為屬性添加一個(gè)關(guān)鍵幀到infinite clip。

  • 在場(chǎng)景視圖里面,移動(dòng)、旋轉(zhuǎn)或者縮放GameObject,Timeline將自動(dòng)為修改后的屬性添加一個(gè)關(guān)鍵幀到infinite clip中去。

紅的背景標(biāo)志著已經(jīng)有一個(gè)服務(wù)于這個(gè)屬性的動(dòng)畫曲線被添加到clip了
添加一個(gè)白色菱形來(lái)放置key到infinite clip中

把播放頭移動(dòng)到Timeline的不同位置,并修改GameObject動(dòng)畫相關(guān)的屬性,在每一個(gè)位置,Timeline編輯器為修改的屬性添加一個(gè)白色的菱形到Infinite clip上,同時(shí)添加對(duì)應(yīng)的動(dòng)畫曲線。

在錄制模式下,你可以右鍵點(diǎn)擊屬性的名字,執(zhí)行一些有用的操作。例如添加一個(gè)key而不修改它的值,切換到前一個(gè)或者后一個(gè)key,刪除key等等。例如,右鍵點(diǎn)擊Position,并在右鍵菜單中選擇Add Key

右鍵點(diǎn)擊Position,執(zhí)行Key相關(guān)的操作

再次點(diǎn)擊閃爍的Record按鈕,結(jié)束動(dòng)畫錄制。使用Curves view可以編輯關(guān)鍵幀。另外你也可以雙擊Infinite Clip,然后通過(guò)Animation編輯器來(lái)編輯關(guān)鍵幀。

通過(guò)保存場(chǎng)景和工程來(lái)保存Timeline資源和Infinite clip. Timeline編輯器把關(guān)鍵幀動(dòng)畫從Infinite clip保存成資源。資源命名為“Recorded”并且保存在TimeAsset內(nèi)部。

錄制的動(dòng)畫Clip保存在Timeline資源內(nèi)部

對(duì)于數(shù)量超過(guò)1個(gè)的Infinite clip的情況下,后面的clip的命名從數(shù)字1開始。例如一個(gè)Timeline資源有3個(gè)已經(jīng)錄制好的Infinite clips,他們的命名為:“Recorded”,“Recored(1)”, 以及“Recored(2)”。需要注意的是:如果刪除一個(gè)Timeline資源,它所包含的所有clips也會(huì)被刪除。

四、把Infinite clip轉(zhuǎn)化成Animation Clip

由于Infinite clip占用了整個(gè)Animation track,因此我們不能裁剪,分離,以及修改位置。如果我們想要執(zhí)行這些操作,首選需要把Infinite clip轉(zhuǎn)化為Animation clip。

點(diǎn)擊track菜單(紅圈位置)

點(diǎn)擊Track 菜單圖標(biāo)(紅圈位置)然后選擇Convert to Clip Track。另外也可以右鍵點(diǎn)擊軌道,然后在彈出的菜單里面選擇Convert to Clip Track。

Infinite clip轉(zhuǎn)化成了Animation Clip

五、創(chuàng)建Humanoid動(dòng)畫

本節(jié)內(nèi)容主要講解通過(guò)Timeline來(lái)驅(qū)動(dòng)一個(gè)人形角色、以及如何匹配Clip的偏移,手動(dòng)調(diào)整Clip偏移,以及創(chuàng)建兩個(gè)Clip的融合來(lái)盡量消除兩個(gè)動(dòng)畫之間的抖動(dòng)和滑步。盡管本節(jié)所舉的例子是使用的人形角色,但是這個(gè)調(diào)整動(dòng)畫的方法是適用于任何GameObject的。

首先我們假設(shè)這里已經(jīng)創(chuàng)建了一個(gè)Timeline實(shí)例,把一個(gè)人形角色的GameObejct綁定到Animation track

人形守衛(wèi)綁定到空的Animation track

從工程里拖拽一個(gè)motion clip到Animation track中來(lái)創(chuàng)建一個(gè)新的Animation clip。例如,拖拽一個(gè)Idle姿態(tài)的動(dòng)畫到Timeline編輯器。

綁定了人形守衛(wèi)的Animation track 拖拽進(jìn)了一個(gè) Idle動(dòng)畫

添加第二個(gè)motion clip。在這個(gè)例子中,一個(gè)命名為Run_Left的動(dòng)畫片段被拖拽進(jìn)Animation track.調(diào)整Run_Left的長(zhǎng)度到合適的大小。在例子中,Run_Left調(diào)整為包含一個(gè)循環(huán),因此守衛(wèi)可以一邊跑一邊向左轉(zhuǎn)向。

Animation Track包含了Idle動(dòng)畫和 Rune_Left動(dòng)畫

在播放Timeline實(shí)例的時(shí)候,注意守衛(wèi)的位置在兩個(gè)動(dòng)畫為來(lái)回跳。因?yàn)槭匦l(wèi)在Idle動(dòng)畫結(jié)束時(shí)候的位置和Run_Left開始播放時(shí)的位置不匹配導(dǎo)致的。

守衛(wèi)的位置在第一個(gè)動(dòng)畫clip(29幀處)和第二個(gè)動(dòng)畫(30幀處)跳動(dòng)

要修正這個(gè)問(wèn)題,需要匹配兩個(gè)動(dòng)畫clip的位置偏移。Timeline編輯器提供了幾個(gè)不同的方法來(lái)匹配偏移,在本例中,要實(shí)現(xiàn)第二個(gè)動(dòng)畫匹配第一個(gè)動(dòng)畫的偏移,選中Run_Left clip, 點(diǎn)擊右鍵,然后在彈出的界面中選擇 Match Offsets to Previous Clip

點(diǎn)擊右鍵,然后在彈出的界面中選擇 Match Offsets to Previous Clip
匹配偏移之后,守衛(wèi)在第一個(gè)動(dòng)畫結(jié)束時(shí)(29幀,頭頂紅色箭頭的守衛(wèi))的位置朝向同第二個(gè)動(dòng)畫開始時(shí)(30幀,綠色箭頭的幽靈)匹配

接下來(lái)再一次播放Timeline,盡管位置朝向都已經(jīng)匹配了。我們?nèi)匀豢梢园l(fā)現(xiàn)兩個(gè)動(dòng)畫Clip之間依然有抖動(dòng),這是由于動(dòng)畫在不同的姿態(tài)之間切換。在第idle動(dòng)畫結(jié)束的時(shí)候,守衛(wèi)是保持雙腳并攏的端正站姿。而在Run_Left開始的時(shí)候,守衛(wèi)向前屈身且雙腳是分開的。

通過(guò)創(chuàng)建兩個(gè)動(dòng)畫之間的融合過(guò)渡來(lái)消除抖動(dòng)。通過(guò)調(diào)整clip的大小,讓Clip重疊來(lái)構(gòu)造融合區(qū)域。在本例中,Idle動(dòng)畫和Run_Left動(dòng)畫的過(guò)渡中,Idle動(dòng)畫調(diào)整為延遲到36幀,Run_Left動(dòng)畫拖動(dòng)到從25幀開始。剩下的屬性保留他們的默認(rèn)值。

創(chuàng)建兩個(gè)動(dòng)畫之間的融合來(lái)平滑過(guò)渡兩個(gè)動(dòng)畫

當(dāng)Idle動(dòng)畫過(guò)渡到Run_Left的時(shí)候,融合消除了兩個(gè)不同姿態(tài)之間的明顯抖動(dòng),身體的大多數(shù)部位的過(guò)渡都很自然。然而還是不完美,因?yàn)樵诓煌恢玫哪_之間混合會(huì)導(dǎo)致不自然的滑步。要修正滑步,你可以手動(dòng)調(diào)整動(dòng)畫Clip的root offset,讓兩個(gè)動(dòng)畫之間的腳的位置盡量地靠攏,以此來(lái)減輕滑步的情況。選中Timeline編輯器中的動(dòng)畫Clip來(lái)手動(dòng)調(diào)整root offset。在Inspector 編輯器窗口中,展開Animation Playable Asset然后展開Clip Root Motion Offsets。

選中動(dòng)畫片段,在Inspector 編輯器窗口中,展開Animation Playable Asset然后展開Clip Root Motion Offsets

Clip Root Motion Offsets中,位置和旋轉(zhuǎn)都不為0,這是由于之前我們執(zhí)行過(guò)Match Offsets to Previous Clip,已經(jīng)把他們?cè)O(shè)置為和前一個(gè)動(dòng)畫結(jié)束時(shí)的值一樣。

在Clip Root Motion Offsets下面,打開調(diào)整位移和旋轉(zhuǎn)的工具,工具線框繪制在場(chǎng)景視圖中。可以使用下面任一種方法來(lái)調(diào)整動(dòng)畫片段的root offset position。

  • 在在場(chǎng)景視圖中,拖動(dòng)線框

  • 在Inspector窗口中,直接修改成想要的值。

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

六、使用Animation Override Tracks和Avatar Masking

本節(jié)主要講解如何使用Animaton Override track和Avatar Mask取代Animation track的上半身動(dòng)畫。通過(guò)這個(gè)方法可以用來(lái)在Timeline中實(shí)現(xiàn)例如在跑的同時(shí),同時(shí)揮手的動(dòng)畫表現(xiàn)。

本節(jié)內(nèi)容只展示在TImeline中如何使用Avatar Mask,同時(shí)假設(shè)你已經(jīng)為一個(gè)守衛(wèi)創(chuàng)建了一個(gè)有動(dòng)畫的Timeline實(shí)例,例如跑步動(dòng)畫。

守衛(wèi)被綁定到Animation Track,同時(shí)Timeline中加入了Run_Forward動(dòng)畫,這個(gè)動(dòng)畫只循環(huán)一次

右鍵點(diǎn)擊Animation Track,在彈出的右鍵菜單中選擇Add Override Track。一個(gè)命名為Override 0的Animation Override track關(guān)聯(lián)到被選中的Animation track。需要注意的是,Animation override track不需要綁定GameObject。因?yàn)镺verride track被綁定到上面的Animation track,因此它實(shí)際上是被綁定到的同一個(gè)GameObject:守衛(wèi)。

在右鍵菜單中選擇Add Override Track來(lái)添加一個(gè) Override Track到Timeline

從項(xiàng)目中拖拽一個(gè)上半身動(dòng)畫到Override track。例如這里我們拖拽一個(gè)站立的同時(shí)揮手的動(dòng)畫(Waving_Arms),同時(shí)把這個(gè)動(dòng)畫的在Timeline中的長(zhǎng)度調(diào)整到和Run_Forward一樣。

Animation Override Track包含了一個(gè)靜止站立且同時(shí)在揮手的動(dòng)畫

播放Timeline,Waving_Arms動(dòng)畫完全覆蓋Run_Forward動(dòng)畫。我們可以通過(guò)給Animation Override track指定一個(gè)Avatar Mask來(lái)實(shí)現(xiàn)把Waving_Arms 動(dòng)畫的上半身和Run_Forward動(dòng)畫的下半身組合到一起。

選中Override track,在Inspector窗口中可以設(shè)置AvatarMask

從工程里面,拖拽AvatarMask到AvatarMask屬性中去,勾選Apply Avatar Mask的按鈕。然后,Avatar Mask圖標(biāo)將會(huì)出現(xiàn)在Track 名字的旁邊。

LowerBodyMask在Inspector窗口中設(shè)置給Animation Override track
紅色圓圈處的Avatar Mask標(biāo)志著Animation track使用了Avatar Mask

再次播放Timeline,我們可以到守衛(wèi)的上半身動(dòng)畫來(lái)自Waving_Arms,下半身動(dòng)畫來(lái)自Run_Forward??梢酝ㄟ^(guò)點(diǎn)擊Avatar Mask圖標(biāo)來(lái)臨時(shí)關(guān)閉Avatar Mask。

當(dāng)Avatar Mask被關(guān)閉后,Avatar Mask的圖標(biāo)消失,然后Waving_Arms將會(huì)完全覆蓋Run_Forward

七、總結(jié)

這是Timeline系列的第二篇,主要講Timeline的基本工作流程的,接下來(lái)的一篇,我會(huì)寫Timline編輯器的相關(guān)具體功能和使用。

BTW:Timeline的官方手冊(cè)早就讀完了,把自己理解的東西通過(guò)文字寫出來(lái),確實(shí)是個(gè)耗時(shí)但是又有趣的事情,希望自己能堅(jiān)持寫作下去。我們?cè)陧?xiàng)目中也有一些Timline的進(jìn)階使用,以后會(huì)專門用一篇文章來(lái)進(jìn)階用法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前言 Unity 3D引擎在2017.1版本中正式發(fā)布了Timeline,它可以用來(lái)創(chuàng)建游戲過(guò)場(chǎng)動(dòng)畫、影片、以...
    windknife閱讀 9,965評(píng)論 0 19
  • 模型(Mesh) 在Unity3D中使用三維模型,主要依靠Mesh Filter組件載入多邊形表面物體(polyg...
    shimmery閱讀 21,976評(píng)論 2 34
  • This article is a record of my journey to learn Game Deve...
    蔡子聰閱讀 4,098評(píng)論 0 9
  • 林生活在一個(gè)普通的家庭,父母務(wù)農(nóng),雖然生活過(guò)的艱苦,父母依然擠出學(xué)費(fèi),讓他繼續(xù)學(xué)業(yè),林也沒(méi)有讓父母失望,一直都是以...
    郝明_閱讀 252評(píng)論 0 7
  • 什么是我的生活 活著 好好的活著 然后做自己想做的事情 活著,活著 快樂(lè)活著 自在活著 風(fēng)還是風(fēng) 雨還是雨 我是風(fēng)...
    唐丙閱讀 220評(píng)論 0 0

友情鏈接更多精彩內(nèi)容