Unity學(xué)習(xí)筆記11影視內(nèi)容創(chuàng)作
影視內(nèi)容創(chuàng)作
時間軸
實時動畫片創(chuàng)作
1,游戲引擎被稱為內(nèi)容創(chuàng)作引擎
2,實時真實感光照效果、實時物理等特效的仿真
3,友好、靈活的創(chuàng)作工具
4,自然實現(xiàn) VR 效果
時間軸和動畫控制的區(qū)別
timeline用來生成各種動畫效果,Cinemachine用來靈活的控制虛擬攝像機(jī)
1,animation只能控制單個物體,而timeline可以使得多個物體協(xié)同運(yùn)動(比如在播放動畫的時候,timeline可以
控制發(fā)出對應(yīng)的聲音,播放特定的粒子系統(tǒng)特效,進(jìn)行攝像機(jī)跟隨等)。
2,在timeline中可以有多個軌道,每個軌道上面也可以包含多個片段(這些片段可以移動,剪切,或者他們之間
進(jìn)行融合)。
3,timeline加入Unity的時間要晚于animation。
簡單實踐
windows窗口-->Sequencing-->timeline。新建一個空物體,為其創(chuàng)建一個timeline。
將需要timeline控制的物體拖拽到timeline窗口中,選擇需要的控制方式。
點(diǎn)擊三個點(diǎn)可以添加動畫片段等

在時間軸上可以通過直接拖拽的方式來控制動畫片段的播放。
簡單動畫
時間軸的工作流
1,創(chuàng)建時間軸資源和時間軸實例
2,使用無限片段錄制動畫(錄制對象為游戲物體)
3,(錄制完成后)將無限片段轉(zhuǎn)換為動畫片段
簡單實踐
Animation Track 動畫軌道
點(diǎn)擊紅色錄制按鈕,然后會開始錄制選中的物體

選中對應(yīng)的物體后,右鍵可以為其位置,旋轉(zhuǎn)等添加關(guān)鍵幀

添加后

拖動關(guān)鍵幀的位置,選中位置或者旋轉(zhuǎn),直接拖拽場景中的物體,錄制完成后運(yùn)行游戲測試效果。
右鍵有一個Convert ?To ?Clip ?Track 選項

就是把錄制好的動畫轉(zhuǎn)換為動畫片段。
Activation ?Track 激活軌道,可以讓攝像機(jī)在特定的時間處于激活狀態(tài)。(默認(rèn)情況是主攝像機(jī)處于激活狀態(tài))
新建兩個攝像機(jī),分別對著兩個物體,拖拽到timeline中,選擇激活軌道

角色動畫
timeline也可以控制角色動畫
角色動畫的特殊性
1,角色動畫使用骨架動畫
2,在動畫片段之間容易產(chǎn)生問題(比如角色在運(yùn)動時,走路到跑步動畫的轉(zhuǎn)換之間可能會出現(xiàn)問題,位置不對應(yīng)
等)
3,可以使用一些特殊效果(比如使用動畫遮罩來嫁接不同身體部位的動畫)
簡單實踐
新建一個場景,創(chuàng)建timeline,

移除角色的控制腳本,

移除后

現(xiàn)在角色的運(yùn)動不再由腳本來控制,可以通過timeline來控制。
為角色添加幾個動畫

如果移動角色的位置,希望在其他地方播放角色動畫,這時角色會自己移動回來,因為此時的控制權(quán)已經(jīng)在
timeline上,如果要移動,需要選中動畫,

點(diǎn)擊十字圖標(biāo)進(jìn)行移動,這時的變換才會反映到timeline中。
如果希望動畫是連續(xù)播放的,需要選中后面的動畫右鍵,選擇Match Offsets ?To ?Previous ?Clip 即可。
在timeline上進(jìn)行動畫的融合:選中動畫向前移動即可

,經(jīng)過動畫的融合,使角色的動作看起來更加的自然。
如果存在滑步現(xiàn)象,還可以對動畫進(jìn)行微調(diào),用鼠標(biāo)滾輪可以放大timeline時間軸,拖動播放來進(jìn)行觀察,選中動
畫片段,在存在滑步現(xiàn)象的地方選中十字圖標(biāo)進(jìn)行調(diào)整角色的位置。(也可以直接修改圖標(biāo)下面的數(shù)值進(jìn)行定量的
微調(diào))。
新建一個角色,拖拽到timeline中后,添加一段動畫,然后右鍵選擇Add ?Override Track(替換性的軌道),該
軌道上面的動畫會替換掉原軌道上面的動畫。一般不會武器替換,選擇替換軌道,需要給角色加一個遮罩Avatar
Mask,來決定替換哪些部位。

比如下面這個,上半身是彎腰走路,下半是正常走路


可以建立分組,便于管理

分組

右鍵軌道可以鎖定,靜音(Mute)等操作。
腳本控制
常見的軌道Track
Animation Track ?物體的動畫控制
Audio Track ?音頻軌道(可以控制音頻,添加聲音在上面)
Activation ?Track ?激活軌道(控制物體的激活與否)
Control Track 控制軌道(控制游戲物體的時間相關(guān)的內(nèi)容,可以從一個timeline改變另一個timeline。為父物體
實例化一個預(yù)制件,比如添加粒子效果)
自定義軌道Playable Track
1,Playable Track 允許用戶自定義相關(guān)動畫效果
2,可以根據(jù)自己的需要進(jìn)行定制化的開發(fā)
3,在代碼中繼承PlayableBehaviour和PlayableAsset兩個類,在其中完成自定義的動畫功能
使用Unity實現(xiàn)時間軸的腳本控制
控制軌道可以對其他的timeline進(jìn)行控制,右鍵控制軌道

在此添加要控制的其他timeline。
Rigbody中的 Is Kinematic 是否開啟動力學(xué),開啟此項,物體不受力的作用
掛接了timeline的物體,默認(rèn)載入時就會直接播放,也可以通過腳本來控制。
新建一個腳本和空物體Controller,將腳本掛接上去
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;//需要添加
public class Timeline_Controller : MonoBehaviour
{
? ?[SerializeField]//可序列化的,這樣tl_event就可以在unity界面中開放出來被賦值了
? ?public UnityEvent tl_event;
? ?// Start is called before the first frame update
? ?void Start()
? ?{
? ? ? ?
? ?}
? ?// Update is called once per frame
? ?void Update()
? ?{
? ? ? ?if(Input.GetKeyDown(KeyCode.Space))
? ? ? ?{
? ? ? ? ? ?tl_event.Invoke();//如果用戶按下空格鍵,invoke觸發(fā)
? ? ? ?}
? ?}
}
將需要被控制的timeline拖拽上去,然后添加需要控制的事件

然后需要將被控制的timeline的play ?On Awake 勾選掉(不會自動播放)。
新建腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.UI;
public class MyPlayableAsset : PlayableAsset
{
? ?public ExposedReference<Text> myText;//用來顯示一些信息
? ?//override 是指虛函數(shù)
? ?public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
? ?{
? ? ? ?var playable = ScriptPlayable<MyPlayableBehaviour>.Create(graph);
? ? ? ?//MyPlayableBehaviour 是一個自定義的類
? ? ? ?playable.GetBehaviour().status = myText.Resolve(graph.GetResolver());
? ? ? ?//GetBehaviour 得到其行為
? ? ? ?return playable;
? ?}
}
public class MyPlayableBehaviour : PlayableBehaviour
{
? ?public Text status;
? ?public override void OnBehaviourPlay(Playable playable, FrameData info)
? ?{
? ? ? ?base.OnBehaviourPlay(playable, info);
? ? ? ?if(status!=null)
? ? ? ?{//如果文本內(nèi)容不為空
? ? ? ? ? ?status.gameObject.SetActive(true);
? ? ? ? ? ?status.text = "Playing";
? ? ? ?}
? ?}
? ?public override void OnBehaviourPause(Playable playable, FrameData info)
? ?{
? ? ? ?if (status != null)
? ? ? ?{
? ? ? ? ? ?status.text = "End playing";
? ? ? ?}
? ? ? ?base.OnBehaviourPause(playable, info);
? ?}
}
在timeline上的自定義軌道上添加

然后建立一個Text放上去

運(yùn)行游戲可以看到,播放時文本是Playing ? 播放完成后是End playing
Cinemachine
作用
1,過程化的游戲內(nèi)攝像機(jī)自動控制系統(tǒng)
2,用于游戲過場動畫,影視化效果,實時動畫
3,特別適合于需要鏡頭調(diào)度的場合
使用Cinemachine的便利性
1,解決了攝像機(jī)控制所需要的復(fù)雜數(shù)學(xué)和邏輯計算
2,攝像機(jī)控制會自動反應(yīng)對場景內(nèi)容的修改
3,適用于各種游戲類型
4,和其他的Unity工具配合緊密
簡單實踐
先導(dǎo)入該包,才可使用

建立一個基礎(chǔ)的場景和一個小動畫

添加一個

在其屬性界面中,添加跟隨和觀察的物體

將主攝像機(jī)添加到時間軸上,選擇Cinemachine track類型,然后如圖

添加后在屬性界面將剛才的Cinemachine添加上去

拖動時間軸可以看到攝像機(jī)的效果。
再在場景中添加一個虛擬攝像機(jī)(這個是推拉搖移軌道式camera)

通過路徑點(diǎn)來決定其軌道,在其屬性界面可添加路徑點(diǎn)

在其屬性界面

將這個Enable勾選,鏡頭就會自動的推拉搖移,也需要為其添加跟隨和觀察的物體

然后將這個Cinemachine同樣添加到時間軸上,拖動時間軸即可看到效果。
和動畫一樣,對二者進(jìn)行融合,使其轉(zhuǎn)換看起來更自然
