Unity TimeLine使用教程

Star_MengMeng 2022-07-24 02:28:17 阅读数:525

unitytimeline使用教程

我使用的是Unity 2020.3.25,TimeLine版本是1.5.2。

TimeLine可以添加以下幾種Track

1.Activation Track一般用來控制GameObject的顯示和隱藏

例如通過控制CineMachine的相機顯隱實現鏡頭切換

 

2.Animation Track控制動畫的播放或錄制動作

        a.角色的動畫切換,可以理解為另一種狀態機

將主角拖入新建的 Animation Track,再講角色對應Clips拖入序列幀,可以控制動畫播放的長度及混合情况。

        b.錄制比特置、旋轉、縮放等動畫(“小紅點”左邊的“線段”可以展開動畫曲線)

 點擊新建的Animation Track右邊小紅點,進入錄制狀態,在需要錄制的GameObject對象上,右擊Add Key

 如果對錄制好的動畫進行修改,可以選擇Update Key

 使用方式和Animation動畫的錄制相似

 3.Audio Track主要是控制音頻的播放和切換,同時音頻也可設置混合。

 4.Control Track沒有暴露屬性。

  • ControlTrack 目前的常規用法
    1. 控制物體的顯示與隱藏
    2. 控制粒子系統的播放,將包含粒子系統的物體拖抓到 ControlTrack 後,可以實現粒子發射進度的控制,還可以實現倒放
    3. 控制其它timeline的播放
  • ControlTrack 可以拖拽場景中絕大部分的物體到軌道上,也可以拖拽大部分 Assets 目錄下的 prefab 到軌道上。
  • ControlTrack 可以控制帶有 Animator 的物體的顯隱,但是無法控制其動畫的播放進度,用控制動畫的播放還是需要使用 Animation Track。

5.Signal Track類似動畫的幀事件(Event),可以在特定幀觸發事件的回調

首先場景中需要創建一個Signal Receiver事件接收器,再創建一個Signal文件,設置Runtime Only對象及對應的回調函數。

Signal我這邊保存在Assets目錄下了。

 之後將場景中的Signal Emitter拖到新建的Signal Track裏,再將Assets目錄下的Signal拖到對應的幀上。當運行到當前幀時,就會觸發裏面的回調函數。

 6.Playable Track自定義軌道

Playable Track不能往裏面添加任何Clip。這是因為這個軌道裏面放置的是自定義Clip,需要通過代碼來實現。

下面通過一個小栗子來闡述。現在咱們定個小目標:通過自定義Clip修改燈光的顏色和亮度(當然了,這個功能可以通過Animation Track實現,但是我偏不用)。我們是為了學習自定義Clip,所以用自定義Clip來實現。

創建自定義clip需要二個脚本

  • 一個用於處理邏輯:需要繼承PlayableBehaviour
  • 一個用於存放數據:需要繼承PlayableAsset

下面會用到Playable API,Playable API的核心原則是分離邏輯和數據。

處理邏輯

我們先創建一個脚本繼承PlayableBehaviour,在這個脚本裏編寫處理的邏輯。處理的邏輯是啥呢?實際上就是隨著Timeline的時間變化,這個clip會如何變化。代碼如下:

using UnityEngine;
using UnityEngine.Playables;
public class LightControlBehaviour : PlayableBehaviour
{
public Light light = null;
public Color color = Color.white;
public float intensity = 1f;
public override void ProcessFrame(Playable playable, FrameData info, object playerData)
{
if (light != null)
{
light.color = color;
light.intensity = intensity;
}
}
}

這個代碼有啥作用呢?首先它確定需要修改Light組件的哪些屬性。

然後重寫了PlayableBehaviour的ProcessFrame方法。ProcessFrame會在Timeline每幀更新的時候調用。在這個方法中,你可以修改Light組件的屬性。

處理數據

接下來為自定義clip創建PlayableAsset,用來保存數據,代碼如下:

using UnityEngine;
using UnityEngine.Playables;
public class LightControlAsset : PlayableAsset
{
public ExposedReference<Light> light;
public Color color = Color.white;
public float intensity = 1.0f;
public override Playable CreatePlayable (PlayableGraph graph, GameObject owner)
{
var playable = ScriptPlayable<LightControlBehaviour>.Create(graph);
var lightControlBehaviour = playable.GetBehaviour();
lightControlBehaviour.light = light.Resolve(graph.GetResolver());
lightControlBehaviour.color = color;
lightControlBehaviour.intensity = intensity;
return playable;
}
}

你會發現Playable API為了實現數據和邏輯的分離,稍微有些麻煩,代碼量還是比較大的。

PlayableAsset有兩個目的。

  • 首先它包含clip的數據,這些數據會在Timeline資源中序列化。
  • 其次它創建PlayableBehaviour並給它賦值,最後輸出一個Playable圖。(PlayableGraph,這你可能對Playable圖不了解,沒關系,先略過它。)

CreatePlayable方法中第一行代碼如下:

var playable = ScriptPlayable<LightControlBehaviour>.Create(graph);

這行代碼會為graph添加自定義行為LightControlBehaviour,這樣就可以在PlayableBehaviour設置Light的屬性。

LightControlAsset類的成員屬性中ExposedReference的作用是什麼呢?因為PlayableAsset是個資源,它不能直接引用場景中的對象。此時ExposedReference會講Light作為一個屬性暴露出來,可以在Timeline中設置它,然後在CreatePlayable中可以使用該對象。

使用Playable Track並且添加自定義Clip

現在就可以在Timline中添加Playable Track,然後右鍵點擊該新軌道添加自定義clip,菜單中會顯示剛才添加的自定義Clip。

  • Add From Light 可以從場景中選擇一個Light添加
  • Add Light Control Asset可以直接添加一個clip,然後選中clip後,將Light組件指定給clip,就可以預覽結果了。

內置Playable Track是個接收自定義Clip的通用軌道,它能接收簡單的自定義Playable clip,例如上面的那個例子。對於較複雜的情况,還可以使用自定義軌道。

7.Cinemachine Track對相機的系列操作,鏡頭切換也可用這個。

TimeLine各種軌道使用比較靈活,同樣的效果可能會有多種實現方式,找到適合的即可。 

工程截圖如下:

 

版权声明:本文为[Star_MengMeng]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/205/202207240226275486.html