游戲原型系列 vol.14 通過C#腳本啟動時間軸-2019.3
摘要
在本教程中,我們將通過C#腳本使用Playable Director啟動時間軸。
?
1.通過C#腳本啟動時間軸
通過腳本啟動時間軸可以更好地控制播放哪個時間軸以及何時播放。這對過場動畫和互動電影特別有用。
通過腳本控制Playable Director時,可以在啟動和停止Playable Director時調(diào)用回調(diào)函數(shù)。通常的用法是在過場動畫開始時禁用玩家輸入并阻止NPC /敵人的動作和移動,并在時間軸停止后恢復(fù)游戲狀態(tài)。
我們的腳本還將在時間軸啟動時執(zhí)行一個回調(diào)函數(shù),在時間軸停止時執(zhí)行另一個回調(diào)函數(shù)。
1. 通過從GameObject下拉菜單中選擇Create Empty 創(chuàng)建一個新的GameObject 。將其命名為Director 。
2. 通過從窗口下拉菜單中選擇Sequencing(序列)>Timeline(時間線),打開“時間線”窗口。
3. 在選擇了Director的情況下,單擊Create(創(chuàng)建)來附加一個Playable Director組件并創(chuàng)建一個Timeline Asset(時間軸資產(chǎn))(圖01 )。

4. 添加并配置所需的動畫軌道(圖02 )。

5. 將一個名為TimelinePlayer 的新腳本組件添加到Director中,然后在腳本編輯器中將其打開。
6. 添加UnityEngine.Playables命名空間:
using UnityEngine.Playables;
7. 在類定義中,我們將創(chuàng)建對Playable Director和控制面板的引用:
private PlayableDirector director;
public GameObject controlPanel;
8.將“開始(Start)”更改為“喚醒(Awake)”,然后刪除“更新(Update)”方法。
9. 在Awake中,我們將設(shè)置Playable Director參考并注冊回調(diào)函數(shù),以在Director啟動和停止時調(diào)用它們:
director = GetComponent<PlayableDirector>();
director.played += Director_Played;
director.stopped += Director_Stopped;
在接下來的兩個步驟中定義的Director_Played和Director_Stopped是返回類型為void的函數(shù),其唯一參數(shù)為PlayableDirector類型。
10. 一旦開始播放時間軸,Director_Played將隱藏用于啟動時間軸的UI面板。
private void Director_Played(PlayableDirector obj){
????controlPanel.SetActive(false);
}
11. 時間軸停止后,Director_Stopped將顯示UI面板。
private void Director_Stopped(PlayableDirector obj){
????controlPanel.SetActive(true);
}
12. 最后,我們準(zhǔn)備定義啟動時間軸的函數(shù):
public void StartTimeline(){
????director.Play();
}
13. 完整腳本應(yīng)如下所示:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Playables;
public class TimelinePlayer : MonoBehaviour
{
????private PlayableDirector director;
????public GameObject controlPanel;
?
????private void Awake()
????{
????????director = GetComponent<PlayableDirector>();
????????director.played += Director_Played;
????????director.stopped += Director_Stopped;
????}
?
????private void Director_Stopped(PlayableDirector obj)
????{
????????controlPanel.SetActive(true);
????}
?
????private void Director_Played(PlayableDirector obj)
????{
????????controlPanel.SetActive(false);
????}
?
????public void StartTimeline()
????{
????????director.Play();
????}
}
14. 保存更改并返回Unity編輯器。
15. 通過從GameObject下拉菜單中選擇UI >Button?(按鈕)來創(chuàng)建UI按鈕。
16. 單擊+ 號添加一個OnClick事件。將Director拖到Object 插槽中,然后選擇TimelinePlayer > StartTimeline()(圖03 )。

17. 在“層次結(jié)構(gòu)”視圖中選擇“?Director(主管)”。在檢查器的“Timeline Player(時間軸播放器)”組件中,將按鈕或其父畫布拖動到標(biāo)有“ Control Panel(控制面板)” 的插槽中(圖04 )。

18. 進(jìn)入播放模式,然后單擊按鈕以啟動時間軸。時間軸停止時,該按鈕保持可見(圖05 )。在播放時間軸時,它是隱藏的(圖06 )。時間軸完成播放后,該按鈕將再次變?yōu)榭梢姟?/span>


19. 退出播放模式。
?
2.結(jié)論
時間軸是一個本來就功能強(qiáng)大的系統(tǒng),可通過腳本進(jìn)一步增強(qiáng)。