Unity-可播放項(xiàng) (Playable) 示例
PlayableGraph Visualizer
本文檔中的所有示例都使用 PlayableGraph Visualizer(如下圖所示)來說明 Playables API 創(chuàng)建的樹和節(jié)點(diǎn)。PlayableGraph Visualizer 是通過 GitHub 提供的工具。
要使用 PlayableGraph Visualizer,請執(zhí)行以下操作:
1.從?GitHub 代碼倉庫下載與您的 Unity 版本對應(yīng)的 PlayableGraph Visualizer
2.通過選擇?Window?>?PlayableGraph Visualizer?打開該工具
3.使用 GraphVisualizerClient.Show(PlayableGraph graph, string name) 來注冊您的圖。

圖中的可播放項(xiàng) (Playable) 以彩色節(jié)點(diǎn)表示。線條顏色強(qiáng)度表示混合的權(quán)重。請參閱?GitHub?以了解關(guān)于此工具的更多信息。
播放游戲?qū)ο笊系膯蝹€(gè)動畫剪輯
以下示例演示一個(gè)簡單的?PlayableGraph
,它有一個(gè)鏈接到單個(gè)可播放節(jié)點(diǎn)的可播放項(xiàng)輸出??刹シ殴?jié)點(diǎn)將播放單個(gè)動畫剪輯(剪輯)。AnimationClipPlayable
?必須包裹動畫剪輯,使其與 Playables API 兼容。

使用?AnimationPlayableUtilities
?來簡化動畫可播放項(xiàng)的創(chuàng)建和播放,如以下示例中所示:__ __
創(chuàng)建動畫混合樹
以下示例演示如何使用?AnimationMixerPlayable
?來混合兩個(gè)動畫剪輯。在混合動畫剪輯之前,它們必須由可播放項(xiàng)包裹。為此,AnimationClipPlayable
(clipPlayable0 和 clipPlayable1)包裹每個(gè)?AnimationClip
(clip0 和 clip1)。SetInputWeight()
?方法動態(tài)調(diào)整每個(gè)可播放項(xiàng)的混合權(quán)重。
雖然在此示例中未顯示?AnimationMixerPlayable
,但也可使用它來混合可播放的混合器和其他可播放項(xiàng)。

混合 AnimationClip 和 AnimatorController
以下示例演示如何使用?AnimationMixerPlayable
?來混合?AnimationClip
?與?AnimatorController
。
在混合?AnimationClip
?和?AnimatorController
?之前,它們必須由可播放項(xiàng)包裹。為此,AnimationClipPlayable
?(clipPlayable) 包裹?AnimationClip
?(clip),而?AnimatorControllerPlayable
?(ctrlPlayable) 包裹 RuntimeAnimatorController (controller)。SetInputWeight(
) 方法動態(tài)調(diào)整每個(gè)可播放項(xiàng)的混合權(quán)重。
創(chuàng)建具有若干輸出的 PlayableGraph
以下示例演示如何使用以下兩個(gè)不同的可播放項(xiàng)輸出類型來創(chuàng)建?PlayableGraph
:AudioPlayableOutpu
t 和?AnimationPlayableOutput
。一個(gè)?PlayableGraph
?可以有許多不同類型的可播放項(xiàng)輸出。
此示例還演示如何通過連接到?AudioPlayableOutput
?的?AudioClipPlayable
?來播放?AudioClip
。
控制樹的播放狀態(tài)
以下示例演示如何使用?Playable.SetPlayState()
?方法來控制?PlayableGraph
?樹上節(jié)點(diǎn)的播放狀態(tài)。SetPlayState
?方法控制整個(gè)樹、其分支之一或單個(gè)節(jié)點(diǎn)的播放狀態(tài)。
設(shè)置節(jié)點(diǎn)的播放狀態(tài)時(shí),狀態(tài)會傳播到所有子節(jié)點(diǎn)(無論其播放狀態(tài)如何)。例如,如果顯式暫停了子節(jié)點(diǎn),則將父節(jié)點(diǎn)設(shè)置為“播放”也會將其所有子節(jié)點(diǎn)設(shè)置為“播放”。
在此示例中,PlayableGraph
?包含的一個(gè)混合器將混合兩個(gè)動畫剪輯。AnimationClipPlayable
?包裹每個(gè)動畫剪輯,而?SetPlayState()
?方法顯式暫停第二個(gè)可播放項(xiàng)。第二個(gè)?AnimationClipPlayable
?被顯式暫停,因此其內(nèi)部時(shí)間不會推進(jìn)而輸出相同值。確切值取決于?AnimationClipPlayable
?暫停時(shí)的具體時(shí)間。

控制樹的時(shí)序
以下示例演示如何使用 Play() 方法來播放 PlayableGraph、如何使用 SetPlayState() 方法來暫??刹シ彭?xiàng)以及如何使用 SetTime() 方法來通過變量手動設(shè)置可播放項(xiàng)的本地時(shí)間。
創(chuàng)建 PlayableBehaviour
以下示例演示如何使用?PlayableBehaviour
?公有類來創(chuàng)建自定義的可播放項(xiàng)。此示例還演示如何重載?PrepareFrame()
?虛擬方法以控制?PlayableGraph
?上的節(jié)點(diǎn)。自定義的可播放項(xiàng)可重載?PlayableBehaviour
?類的任何其他虛擬方法。
在此示例中,受控節(jié)點(diǎn)是一系列動畫剪輯 (clipsToPlay)。SetInputMethod()
?將修改每個(gè)動畫剪輯的混合權(quán)重,確保一次只播放一個(gè)剪輯,而?SetTime()
?方法將調(diào)整本地時(shí)間,以便在激活動畫剪輯時(shí)開始播放。
