當前位置:
首頁 > 最新 > 探索TimelinePlayableAPI,讓Timeline為所欲為

探索TimelinePlayableAPI,讓Timeline為所欲為

簡介

之前快速地學習了一下Timeline,需要詳細回顧的兄弟可以回頭看我的上一篇,快速了解Timeline。

這裡我們做快速的回顧,Timeline主要分為和,可以用Timeline PlayableDirector控制播放哪一個TimelineAsset

今天我們再來看看Timeline中的Track,並且動手實現一個老年迪斯科場景。

GIF

一圖流

Track

Timeline可以添加很多Track來對不同的對象做控制。

Animation Track

在Clip上控制動畫,可以在有Animator組件但是沒有AnimatorController的情況下直接播放動畫。

Audio Track

在Clip上控制音頻播放。

Activtion Track

在Clip上控制物體是否在場景中Active,GameObject.SetActive()的作用

Control Track

在Clip上可以控制和時間相關的元素,可以控制粒子系統,克隆物體,控制另一個timeline等。厲害的是我們放在Control Track上的例子特效,可以隨意地拖動Timeline來預覽效果,對特效兄弟來說是應該很強大很爽的地方。

Playable Track

控制繼承自BasicPlayableBehaviour的clip

(在2017.4.0f1版本里原先的BasicPlayableBehaviour因為性能原因已經被棄用,建議採用PlayableAsset和PlayableBehaviour)

如何有了這篇文章

雖然上面提供的幾個track已經有很強大的功能了,但是實際操作中我們會發現這些遠遠不夠,官方的Mannul上也沒有更多的介紹,有效的資料是少之又少。那麼官方演示的demo里的對話系統是怎麼通過Timeline實現的呢?

於是我開始尋找,在Youtube上找到了Unite Europe2017上的演講視頻,Extending Timeline with your own playables。

研究了一番,裡面的例子就是LightControl將自己的理解分享給大家。讓大家都能在Timeline里為所欲為。

深度理解Timeline

Timeline是建立在Playables API上的PlayableGraph系統,在這套系統中Timeline相當於是一個函數的作用,我們從Assset傳入InputData,Timeline處理後輸出OutputData到對應的Component。

這套系統中有4個關鍵部分,,,,

我希望我的這張圖可以幫助大家快速對應和理解這4個部分。

Timeline也一個Templete,可以方便快速地被複用。

The Data

用來存放數據,需要被序列化。繼承自PlayableBehaviour

The Clip

也就是asset,繼承自PlayableAsset。因為是asset,所以不能直接與場景中的物體關聯,需要關聯場景中的物體時要用ExposedReference來聲明,

並且通過Resolve方法賦值。

The Mixer

Mixer控制當前Track中所有的clip的行為,根據每個clip不同的,計算需要的結果。 Mixer在Timeline中算是最重要的部分了。

The Track

把Mixer計算的結果輸出,可以指定輸出到綁定的物體上。繼承自TrackAsset。有好幾個特性可以綁定,

TrackColor : 定義在編輯器中Track的標識顏色

BindingObejctType : 當前Track上的Mixer輸出後的數據要傳遞的對象類型

TrackClipType : 當前Track上的Clip的類型

實踐

通過上面的探究,我們要做老年disco效果,那就來定製一個自己的track,專門用來控制Light,我們叫LightControl

創建一個新的場景添加兩個角色,一紅一藍

新建一個ParticleSytem,烘托一下Disco的氣氛

創建一個新的Timeline,DiscoTimeline

在DiscoTimeline上新建2個AnimationTrack,一個控制藍角色的動畫,一個控制紅角色的動畫

在DiscoTimeline新建一個ControlTrack,控制剛才創建的ParticleSystem

在場景中新建一個SpotLight和一個PointLight

在DiscoTimeline中新建一個TrackGroup,命名為PlayableLight

在DiscoTimeline中新建我們的LightControl Track,將SpotLight與這個Track綁定,命名為SpotLight

在DiscoTimeline中新建我們的LightControl Track,將PointLight與這個Track綁定,命名為PointLight

將我們自定義的Clip添加2段到SpotLightTrack上,在一個Clip上的LookAtTarget上綁定藍角色,另一個Clip上的LookAtTarget綁定到紅角色

將我們自定義的Clip添加2段到PointLightTrack上,設置變換的燈光顏色和強度。

最後的Timeline就是這樣

Play and Enjoy It

結尾

關於Playable API比較有趣的是,Playable使用C#結構體而非C++對象來保存對象。使用結構體的目的是避免分配GC所需的內存。這樣用起來可能稍微有點複雜,但由於該API承載了未來的很多功能,所以必須注重性能問題。

掌握了Timeline的系統設計理念後,我們基本上就能掌握Timeline,實現自己想要的效果了,希望大家能打開腦洞,用Timeline創造出更多好玩的東西來。

另外視頻中提到的PreviewMode我還沒有非常明白,就先不寫出來了,如果有兄弟知道的話,希望你能不吝賜教。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 非正常程序猿 的精彩文章:

TAG:非正常程序猿 |