当前位置:网站首页>Unity TimeLine使用教程
Unity TimeLine使用教程
2022-07-24 02:28:00 【Star_MengMeng】
我使用的是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 目前的常規用法
- 控制物體的顯示與隱藏
- 控制粒子系統的播放,將包含粒子系統的物體拖抓到 ControlTrack 後,可以實現粒子發射進度的控制,還可以實現倒放
- 控制其它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各種軌道使用比較靈活,同樣的效果可能會有多種實現方式,找到適合的即可。
工程截圖如下:

边栏推荐
- Rylstim Screen Recorder
- Preliminary use of 145 keep alive
- Ardunio - ULN2003 drive board and DC motor fan - control fan speed
- [FPGA tutorial case 38] communication case 8 - serial parallel serial data transmission based on FPGA
- 使用第三方账号登录
- 分享一个基于Abp 和Yarp 开发的API网关项目
- Canvas drawing (mouse click to draw and lift to end)
- Redraw the button and make your own circular LED indicator
- Pbootcms template calls the tag ordinal number from 2 or automatic number
- Reconnaître le Protocole de couche de transport - TCP / UDP
猜你喜欢

Crud operation of mongodb (2)

Research on XMPP service (I)

组件el-scrollbar的使用

The communication principle between native components, applets and clients, and the operation principle of video, map, canvas, picker, etc

LeetCode 70爬楼梯、199二叉树的右视图、232用栈实现队列、143重排链表

wallys/WiFi6 MiniPCIe Module 2T2R2 × 2.4GHz 2x5GHz MT7915 MT7975

Graduation design campus information publishing platform website source code

NetApp FAS系列一个CIFS bug引起的控制器重启案例分享
![[datasets] - downloading some datasets of flyingthings3d optical flow](/img/00/5d87b378ebab49e9dc400d8e3634f3.png)
[datasets] - downloading some datasets of flyingthings3d optical flow

Backward quantum cryptography migration! NIST announces 12 Partners
随机推荐
Is software testing still popular in 2022?
[Luogu] p1972 HH Necklace
Idea's gradle project Chinese garbled
Use of component El scrollbar
我国科学家在高安全量子密钥分发网络方面取得新进展
【补题日记】[2022杭电暑期多校1]B-Dragon slayer
Give me five minutes, give you a "cloud"
Wallys/PD-60 802.3AT Input Output802.3AT/AT 85% Efficiency 10/100/1000M GE Surge Protection
响应式pbootcms模板装修设计类网站
What is naked SQL? What middleware or plug-in is good for express to operate MySQL?
[diary of supplementary questions] [2022 Hangdian summer school 1] c-backpack
regular expression
Digital transformation behind the reshaping growth of catering chain stores
5年接觸近百比特老板,身為獵頭的我,發現昇職的秘密不過4個字
Installation, configuration and use of sentry
营员招募|心怀世界的AI青年们,联合国需要你为可持续发展助力!
Live800:客户服务无小事,别让服务击溃企业口碑
Wallys/DR4019S/IPQ4019/11ABGN/802.11AC/high power
How to judge null for different types of fields, sets, lists / sets / maps, and objects
Pbootcms template calls the tag ordinal number from 2 or automatic number