【Unity 插件推薦】解鎖 Timeline 時軸支配者,掌控劇情演繹的時間秘術!

目錄
【Unity 插件推薦】解鎖 Timeline 時軸支配者,掌控劇情演繹的時間秘術!

 

前言

 

今天要推薦的是 Timeline,一款專為 Unity 打造的內建多軌道動畫插件,能夠輕鬆實現專業級的過場動畫與劇情演出效果,特別適合需要強調敘事與視覺效果的遊戲設計!無論是【角色互動】、【鏡頭運鏡】,還是【場景過場動畫】,Timeline 都能為你的開發過程增添強大助力。本篇文章將結合 Timeline 的使用教學,帶你一步步掌握如何創建與運用時間軸特效,提升遊戲的整體演出品質。

我們還將提供【詳細介紹】與【補充說明】,幫助開發者快速熟悉功能,跨越技術門檻,讓你的遊戲更具吸引力!如果你正在尋找提升遊戲敘事與表現的利器,千萬不要錯過這篇介紹!

 

今天要推薦的是 Timeline,一款專為 Unity 打造的內建多軌道動畫插件,能夠輕鬆實現專業級的過場動畫與劇情演出效果,特別適合需要強調敘事與視覺效果的遊戲設計!無論是【角色互動】、【鏡頭運鏡】,還是【場景過場動畫】,Timeline 都能為你的開發過程增添強大助力。本篇文章將結合 Timeline 的使用教學,帶你一步步掌握如何創建與運用時間軸特效,提升遊戲的整體演出品質。

 

 

Unity Timeline 插件介紹

 

TimelineUnity 內建的一款強大時間軸動畫工具,專為開發者設計,用於創建專業級的過場動畫與場景切換效果。無論是在遊戲中【設計角色互動】、【控制鏡頭運動】,還是【強化敘事】與【視覺表現】,Timeline 都能輕鬆滿足需求。這款插件提供簡單直觀的操作與靈活的功能設定,幫助開發者快速打造電影級的遊戲演出效果。

 

Timeline 示意圖

 

功能特色

  1. 靈活的時間軸控制
    支援多軌道動畫創建,包含【動畫軌道】、【音效軌道】、【粒子特效】與【自訂功能】,能靈活控制角色、場景和鏡頭,實現高度個性化的演出效果。
  2. 智能化設計與高效工作流
    內建可視化編輯器,開發者可即時調整【動畫】與【事件觸發】,無需編碼即可輕鬆完成。Timeline 還能與 Unity 的其他功能模組(如 Animator Cinemachine)無縫整合,提升開發效率。
  3. 高效性能與穩定性
    經過 Unity 團隊的優化設計,Timeline 能在大型專案中穩定運行,無論是 2D 還是 3D 遊戲,都能確保流暢的動畫與視覺效果。

 

適用場景

  1. 過場動畫製作
    用於製作角色互動、鏡頭運動和劇情過場等場景,讓遊戲表現更加流暢自然,提升玩家沉浸感。
  2. 場景切換與特效展示
    適合設計【關卡轉換】、【粒子特效】與【鏡頭運動】,實現電影級的視覺效果,增強遊戲的故事敘述能力。
  3. 教學與指引場景
    在新手教學或關卡指引中,利用 Timeline 設定多軌動畫,提供更直觀的畫面指導,提升玩家理解與體驗。

 

延伸閱讀:【Unity 插件推薦】Cinemachine 虛擬相機,精準掌控每個鏡頭!

 

【Unity 插件推薦】解鎖 Timeline 時軸支配者,掌控劇情演繹的時間秘術!

 

 

Unity Timeline 安裝

 

打開 Package Manager,安裝 TimeLine,Unity 2020 預設是安裝了 TimeLine 的,可以透過 Package Manager 進行更新。

 

打開 Package Manager,安裝 TimeLine,Unity 2020 預設是安裝了 TimeLine 的,可以透過 Package Manager 進行更新。

 

 

如何創建一個 Timeline 資源

 

方法一(方法需手動新增 Playable Director 元件)

在 Project 視圖中,右键菜单 - Create - Timeline

 

在 Project 視圖中,右键菜单 - Create - Timeline。

 

即可建立 Timeline 資源(格式為 .playable)。

 

即可建立 Timeline 資源(格式為 .playable)。

 

但以這種方式建立的 Timeline 資源是沒有被引用的,需要透過 Playable Director 元件來引用這個 Timeline 資源,從而播放它。


我們可以給某個物體手動新增 Playable Director 元件,然後引用 Timeline 資源。

 

但以這種方式建立的 Timeline 資源是沒有被引用的,需要透過 Playable Director 元件來引用這個 Timeline 資源,從而播放它。


方法二(方法會自動加入 Playable Director 元件)

點擊 Unity 選單 Window - Sequencing - Timeline

 

點擊 Unity 選單 Window - Sequencing - Timeline。

 

此時會打開 Timeline 窗口,並提示你選擇一個物體:To start creating a timeline, select a GameObject。

 

此時會打開 Timeline 窗口,並提示你選擇一個物體:To start creating a timeline, select a GameObject。

 

 

當我們選中 Hierachy 視圖中的某個物體後,Timeline 窗口中會出現一個 Create 按鈕。

 

當我們選中 Hierachy 視圖中的某個物體後,Timeline 窗口中會出現一個 Create 按鈕。

 

點擊 Create 按鈕即可創建 Timeline 資源(格式為 .playable)。

 

點擊 Create 按鈕即可創建 Timeline 資源(格式為 .playable)。

 

我們還會發現,我們選中的物體,自動掛了 Playable Director 元件,並自動引用了 Timeline 資源。

 

我們還會發現,我們選中的物體,自動掛了 Playable Director 元件,並自動引用了 Timeline 資源。

 

 

Unity Timeline 創建軌道

 

Timeline 視窗左側欄右鍵選單,可以建立多種軌道。

 

在 Timeline 視窗左側欄右鍵選單,可以建立多種軌道。

 

軌道描述說明
Track Group將不同的軌道進行分類,相當於資料夾功能。
Activation Track控制物體的顯示和隱藏。
Animation Track為物體加入動畫,可以在場景中方便錄製動畫,也可以是已經製作好的 Animation Clip。
Audio Track為動畫添加音效,並可對音效進行簡單的裁切與操作。
Control Track在該軌道上可以加入粒子效果,同時也可以加入子 Timeline 進行嵌套。
Signal Track訊號軌道,可以發送訊號,觸發響應訊號的函數調用。
Playable Track在該軌道中使用者可以添加自訂的播放功能。

 

 

Unity Timeline 具體軌道的使用

 

Activation Track 軌道

這個軌道是控制物體的顯示和隱藏的,使用很簡單,創建 Activation Track 軌道後,把需要控制的物體拖到物體槽中,例如下面是控制一個立方體(Cube)的顯示與隱藏,效果如下。

 

具體軌道的使用   Activation Track 軌道  這個軌道是控制物體的顯示和隱藏的,使用很簡單,創建 Activation Track 軌道後,把需要控制的物體拖到物體槽中,例如下面是控制一個立方體(Cube)的顯示與隱藏,效果如下。


Animation Track 軌道

Animation Track 軌道可以為物體加入動畫,可以在場景中方便地錄製動畫,也可以是已經製作好的 Animation Clip。

 

用法一:直接使用 Animation Track 來錄製動畫


將物體拖曳到 Animation Track 的物體槽中時,如果物體沒有 Animator 組件,會提示為物體掛一個 Animator 組件。

例如這裡,我們要給一個 Cube 錄製動畫,點選 Create Animator on Cube。

 

例如這裡,我們要給一個 Cube 錄製動畫,點選 Create Animator on Cube。

 

接著,點擊錄製按鈕,即可開始錄製動畫  。

 

接著,點擊錄製按鈕,即可開始錄製動畫  。

 

我們做一個簡單的位移動畫錄製。

 

我們做一個簡單的位移動畫錄製。

 

我們還可以在軌道上右键菜单 - Edit in Animation Window,打開 Animation 視窗來編輯動畫。

 

我們還可以在軌道上右键菜单 - Edit in Animation Window,

 

打開 Animation 視窗來編輯動畫。

 

用法二:播放已製作好的 Animation Clip

首先,我們給 Cube 創建一個 Animation 動畫。

 

首先,我們給 Cube 創建一個 Animation 動畫。

 

把 Cube 拖到 Animation Track 的物體槽中。

 

把 Cube 拖到 Animation Track 的物體槽中。

 

然後在軌道上右键菜单 - Add From Animation Clip,選擇我們上面製作好的 Animation 動畫。

 

然後在軌道上右键菜单 - Add From Animation Clip,選擇我們上面製作好的 Animation 動畫。

 

即可使用 Animation Track 軌道來播放 Animation Clip 了。

 

即可使用 Animation Track 軌道來播放 Animation Clip 了。


Audio Track 軌道

Audio Track 為動畫添加音效,並可對音效進行簡單的裁切和操作。

 

導入音效資源

首先,在工程中導入一個 test.ogg 音效資源。

 

首先,在工程中導入一個 test.ogg 音效資源。


將音效資源拖入軌道中

Timeline 中建立 Audio Track 軌道,然後再軌道上右键菜单 - Add From Audio Clip。

 

在 Timeline 中建立 Audio Track 軌道,然後再軌道上右键菜单 - Add From Audio Clip。

 

選擇我們上面導入的 test.ogg 資源。

 

選擇我們上面導入的 test.ogg 資源。

 

即可在軌道上看到資源音軌。

 

即可在軌道上看到資源音軌。


可在軌道上對音效做簡單的編輯

我們可以對音軌做裁剪。

 

我們可以對音軌做裁剪。

 

還可以將音軌做分割。

 

還可以將音軌做分割。

 

分割成兩個片段。

 

分割成兩個片段。

 

Control Track 軌道

Control Track 軌道可以加入粒子效果,同時也可以加入子 Timeline 進行嵌套。

 

控製粒子特效

先創建一個粒子。

 

先創建一個粒子。

 

然後將粒子拖到 Control Track 軌道中(或在軌道上右键菜单 - Add From Game Object,然後選擇對應的粒子 GameObject)。

即可使用 Control Track 軌道播放粒子。

 

即可使用 Control Track 軌道播放粒子。

 

有趣的是,我們還可以在軌道上倒放預覽粒子。

 

有趣的是,我們還可以在軌道上倒放預覽粒子。

 

甚至對粒子做裁切分割。

 

甚至對粒子做裁切分割。

 

甚至對粒子做裁切分割。

 

嵌套 Timeline

先創建一個SubTimeline,在 SubTimeline 中控制 Cube 移動。

 

先創建一個SubTimeline,在 SubTimeline 中控制 Cube 移動。

 

在後在原來的 Timeline(主 Timeline)中創建 Control Track 軌道,並把 SubTimeline(子 Timeline)拖動到軌道中,這樣,就實現了 Timeline 嵌套。

 

在後在原來的 Timeline(主 Timeline)中創建 Control Track 軌道,並把 SubTimeline(子 Timeline)拖動到軌道中,這樣,就實現了 Timeline 嵌套。

 

效果如下。

 

效果如下。


Signal Track 軌道

Signal Track 訊號軌道,可以發送訊號,觸發響應訊號的函數呼叫。

 

 回應訊號的物體和腳本

在 Hierachy 中建立一個空物體,重名 SignalReceiver。

 

在 Hierachy 中建立一個空物體,重名 SignalReceiver。

 

建立一個 C# 腳本 SignalTest.cs,掛到上面的物體上(會自動綁定掛上 SignalReceiver 元件),用於回應訊號。


程式碼如下:

 

using UnityEngine;

using UnityEngine.Timeline;

[RequireComponent(typeof(SignalReceiver))]

public class SignalTest : MonoBehaviour

{

    // 信号的响应函数

   public void OnReceiveSignal()

   {

       Debug.Log("OnReceiveSignal: Hello Signal");

   }

}
 

建立一個 C# 腳本 SignalTest.cs,掛到上面的物體上(會自動綁定掛上 SignalReceiver 元件),用於回應訊號。


建立 Signal Track 軌道,設定響應物體

Timeline 中建立 Signal Track 訊號軌道。

 

在 Timeline 中建立 Signal Track 訊號軌道。

 

將 SignalReceiver 物體拖曳到訊號軌道的物體槽中。

 

將 SignalReceiver 物體拖曳到訊號軌道的物體槽中。


創建訊號發射器 Signal Emitter

建立一個訊號發射器資源(Signal Emitter),在 Project 視圖右键菜单 - Create - Signal。

 

建立一個訊號發射器資源(Signal Emitter),在 Project 視圖右键菜单 - Create - Signal。

 

建立一個訊號發射器資源(Signal Emitter),在 Project 視圖右键菜单 - Create - Signal。


將訊號發射器拖曳到軌道上。

 

 將訊號發射器拖曳到軌道上。


給訊號發射器設定響應函數

點擊軌道上的信號發射器,在 Inspector 視圖中會顯示信號訊息,Add Reaction 按鈕,添加信號的響應函數。

 

點擊軌道上的信號發射器,在 Inspector 視圖中會顯示信號訊息,Add Reaction 按鈕,添加信號的響應函數。

 

預設信號接收對象就是 SignalReceiver 組件所在的物體。

 

預設信號接收對象就是 SignalReceiver 組件所在的物體。

 

點擊 No Function 可以列出物體上的組件和組件中的所有 public 屬性和方法,這裡我們設定響應函數為 SignalTest 腳本的 OnReceiverSignal 函數。

 

點擊 No Function 可以列出物體上的組件和組件中的所有 public 屬性和方法,這裡我們設定響應函數為 SignalTest 腳本的 OnReceiverSignal 函數。

 

運行效果

 

 運行效果

 

 

Playable Track 軌道

 

在 Playable Track 軌道,可以添加自訂的播放功能。

 

PlayableAsset 和 PlayableBehaviour 腳本

需要寫兩個類,一個繼承 PlayableAsset,一個繼承 PlayableBehaviour。

 

需要寫兩個類,一個繼承 PlayableAsset,一個繼承 PlayableBehaviour。


using UnityEngine;

using UnityEngine.Playables;

public class MoveObjPlayableAsset : PlayableAsset

{

   public GameObject go;

   public Vector3 pos;

   public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)

   {

       var bhv = new MoveObjPlayableBehaviour();

       bhv.go = go;

       bhv.pos = pos;

       return ScriptPlayable<MoveObjPlayableBehaviour>.Create(graph, bhv);

   }

}

 

using UnityEngine;

using UnityEngine.Playables;

public class MoveObjPlayableBehaviour : PlayableBehaviour

{

   public GameObject go;

   public Vector3 pos;

   public override void OnGraphStart(Playable playable)

   {

       base.OnGraphStart(playable);

       Debug.Log("OnGraphStart=======================");

   }

   public override void OnGraphStop(Playable playable)

   {

       base.OnGraphStop(playable);

       Debug.Log("OnGraphStop=======================");

   }

   public override void OnBehaviourPlay(Playable playable, FrameData info)

   {

       // 這里的邏輯是改變物體的坐標,具體邏輯就看具體需求

       base.OnBehaviourPlay(playable, info);

       Debug.Log("OnBehaviourPlay=======================");

       if (null != go)

       {

           go.transform.position = pos;

       }

   }

   public override void OnBehaviourPause(Playable playable, FrameData info)

   {

       base.OnBehaviourPause(playable, info);

       Debug.Log("OnBehaviourPause=======================");

       if (null != go)

       {

           go.transform.position = Vector3.zero;

       }

   }

   public override void OnBehaviourDelay(Playable playable, FrameData info)

   {

       base.OnBehaviourDelay(playable, info);

       Debug.Log("OnBehaviourDelay=======================");

   }

}
 

將 PlayableAsset 拖曳到軌道上

將 MoveObjPlayableAsset 腳本直接拖曳到 PlayableTrack 軌道上,具體的腳本邏輯在中 MoveObjPlayableBehaviour 實現,本例是設定物體的座標。

 

將 MoveObjPlayableAsset 腳本直接拖曳到 PlayableTrack 軌道上,具體的腳本邏輯在中 MoveObjPlayableBehaviour 實現,本例是設定物體的座標。

 

點擊軌道上的 MoveObjPlayableAsset,可以在 Inspector 視圖中看到對應的參數。

 

點擊軌道上的 MoveObjPlayableAsset,可以在 Inspector 視圖中看到對應的參數。


動態設定 PlayableAsset 參數

現在,我們另外寫一個腳本(Runner.cs),運行的時候動態地給 MoveObjPlayableAsset 設定 GO 物件。

首先我們將軌道名字改成 MyPlayableTest,因為下面的程式碼需要透過名字來取得改軌道物件。

 

首先我們將軌道名字改成 MyPlayableTest,因為下面的程式碼需要透過名字來取得改軌道物件。

 

把 Runner.cs 腳本掛到 Timeline 物體上,賦值 Timeline 變數和 Cube 變量,如下。

Runner.cs 程式碼如下。

 

using UnityEngine;

using UnityEngine.Playables;

using UnityEngine.Timeline;

public class Runner : MonoBehaviour

{

   public PlayableDirector timelinePlayer;

   public GameObject cube;

   void Start()

   {

       var timeline = timelinePlayer.playableAsset;

       foreach (var binding in timeline.outputs)

       {

           // 軌道名

           var trackName = binding.streamName;

           if ("MyPlayableTest" == trackName)

           {

               // 軌道

               var track = binding.sourceObject as TrackAsset;

               // 軌道上的片段,每個片段都是PlayableAsset的子類

               var clipList = track.GetClips();

               foreach (var clip in clipList)

               {

                   if (clip.asset is MoveObjPlayableAsset)

                   {

                       var moveObjPlableAsset = clip.asset asMoveObjPlayableAsset;

                       // 動態設置go對象的坐標

                       moveObjPlableAsset.go = cube;

                       moveObjPlableAsset.pos = new Vector3(-4.91f, 0, 0);

                       break;

                   }

               }

           }

       }

   }

}

 

運行效果

 

運行效果

 

 

Unity Timeline 答疑

 

Timeline 如何實現倒放?

先看下正放的效果:

 

先看下正放的效果:


我們可以通過 PlayableDirector 的 time 屬性,從大到小,即可實現倒放,例:

 

using UnityEngine;

using UnityEngine.Playables;

public class Runner: MonoBehaviour

{

   public PlayableDirector timelinePlayer;

   private double m_timer;

   void Start()

   {

       // 獲取總時長

       m_timer = timelinePlayer.duration;

       timelinePlayer.Play();

   }

   void Update()

   {

       // 倒放

       if (m_timer > 0)

           m_timer -= Time.deltaTime;

       timelinePlayer.time = m_timer;

   }

}
 

運行 Unity,倒放效果如下。

 

運行 Unity,倒放效果如下。

 

 

時軸支配者插件網站

 

Timeline

官方文檔:Timeline

————————————————

以上內容改編節錄 CSDN 作者:林新發

 

更多好用插件:【Unity 好用插件推薦】持續更新,一起讓遊戲開發事半功倍!

 

 

 

本文原創(或整理)於亞洲電玩通,未經作者與本站同意不得隨意引用、轉載、改編或截錄。

特約作家簡介

X
A
Y
B
JamXu的頭像
JamXu
十年遊戲研發
二十年遊戲台主
三十年遊戲玩家

經中華網龍遊戲企劃進入遊戲圈,然後被雷打到去學程式前後端又學了點設計帶帶幾個研發團隊,見證了 3D 渲染技術及遊戲引擎互相進步,也見證了研發代理的更迭與博弈遊戲的興起,再毅然研究起 SEO 網路行銷社群廣告投放,深信自研自賣才是最大贏家,期望能為台灣研發重回輝煌時光貢獻一點力量。如果你也有遊戲夢,歡迎交流認識。


支持贊助 / DONATE

 

亞洲電玩通只是很小的力量,但仍希望為復甦台灣遊戲研發貢獻一點動能,如果您喜歡亞洲電玩通的文章,或是覺得它們對您有幫助,歡迎給予一些支持鼓勵,不論是按讚追蹤或是贊助,讓亞洲電玩通持續產出,感謝。

亞洲電玩通AsiaGameMaster - Steam 遊戲鑑賞家
亞洲電玩通AsiaGameMaster - FB 粉絲專頁
亞洲電玩通AsiaGameMaster - IG 粉絲專頁
亞洲電玩通AsiaGameMaster - Twitter
亞洲電玩通AsiaGameMaster - Yoytube 粉絲專頁
亞洲電玩通AsiaGameMaster - Tiktok

BTC

亞洲電玩通AsiaGameMaster - BTC 鏈贊助地址

352Bw8r46rfXv6jno8qt9Bc3xx6ptTcPze

 

ETH

亞洲電玩通AsiaGameMaster - ETH 鏈贊助地址

0x795442E321a953363a442C76d39f3fbf9b6bC666

 

TRON

亞洲電玩通AsiaGameMaster - TRON 鏈贊助地址

TCNcVmin18LbnXfdWZsY5pzcFvYe1MoD6f

延伸閱讀