Unity-PlayableGraph
PlayableGraph 定義一組綁定到 GameObject 或組件的可播放輸出項(xiàng)。PlayableGraph 還定義一組可播放項(xiàng)及其依賴關(guān)系。圖 1 提供了一個示例。
PlayableGraph 負(fù)責(zé)管理可播放項(xiàng)及其輸出的生命周期。使用 PlayableGraph 可創(chuàng)建、連接和銷毀可播放項(xiàng)。


可播放項(xiàng)是一種繼承 IPlayable 接口的 C# 結(jié)構(gòu)體。它用于定義其與其他可播放項(xiàng)的關(guān)系。同樣,可播放項(xiàng)輸出是繼承 IPlayableOutput 接口的 C# 結(jié)構(gòu)體,用于定義 PlayableGraph 的輸出。
圖 2 顯示了最常見的核心可播放項(xiàng)類型。圖 3 顯示了核心可播放項(xiàng)輸出類型。


可播放項(xiàng)核心類型和可播放項(xiàng)輸出類型以 C# 結(jié)構(gòu)的形式實(shí)現(xiàn),從而避免為收集垃圾而分配內(nèi)存。
“Playable”是所有可播放項(xiàng)的基本類型,這意味著您總是可以隱式將一個可播放項(xiàng)轉(zhuǎn)換為 Playable。相反的情況并不成立,如果將“Playable”顯式轉(zhuǎn)換為不兼容類型,則會拋出異常。它還定義能在可播放項(xiàng)上執(zhí)行的所有基本方法。要訪問特定于類型的方法,您需要將可播放項(xiàng)轉(zhuǎn)換為相應(yīng)類型。
PlayableOutput
?也是如此,它是所有可播放項(xiàng)輸出的基本類型,定義了基本方法。
注意:Playable
?和?PlayableOutput
?未暴露大量方法。但“PlayableExtensions”和“PlayableOutputExtensions”靜態(tài)類提供了擴(kuò)展方法。
所有非抽象可播放項(xiàng)都有一個公有靜態(tài)方法?Create()
,該方法創(chuàng)建相應(yīng)類型的可播放項(xiàng)?!癈reate()”方法始終將 PlayableGraph 作為其第一個參數(shù),該圖擁有新創(chuàng)建的可播放項(xiàng)。某些類型的可播放項(xiàng)可能需要其他參數(shù)。非抽象可播放項(xiàng)輸出還會暴露?Create()
?方法。
有效的可播放項(xiàng)輸出應(yīng)鏈接到可播放項(xiàng)。如果可播放項(xiàng)輸出未鏈接到可播放項(xiàng),則可播放項(xiàng)輸出不執(zhí)行任何操作。要將可播放項(xiàng)輸出鏈接到可播放項(xiàng),請使用?PlayableOutput.SetSourcePlayable()
?方法。對于該特定可播放項(xiàng)輸出,鏈接的可播放項(xiàng)充當(dāng)可播放項(xiàng)樹的根。
要將兩個可播放項(xiàng)連接在一起,請使用?PlayableGraph.Connect()
?方法。請注意,某些可播放項(xiàng)不能有輸入。
使用?PlayableGraph.Create()
?靜態(tài)方法來創(chuàng)建 PlayableGraph。
使用?PlayableGraph.Play()
?方法來播放 PlayableGraph。
使用?PlayableGraph.Stop()
?方法來停止播放 PlayableGraph。
使用?PlayableGraph.Evaluate()
?方法來評估 PlayableGraph 在特定時間的狀態(tài)。
使用?PlayableGraph.Destroy()
?方法來手動銷毀 PlayableGraph。此方法會自動銷毀 PlayableGraph 創(chuàng)建的所有可播放項(xiàng)和可播放項(xiàng)輸出。必須手動調(diào)用此銷毀方法來銷毀 PlayableGraph,否則 Unity 會發(fā)出一條錯誤消息。