欢迎光临散文网 会员登陆 & 注册

游戏原型系列 vol.14 通过C#脚本启动时间轴-2019.3

2020-07-07 17:45 作者:NXL2  | 我要投稿

摘要

在本教程中,我们将通过C#脚本使用Playable Director启动时间轴。

 

1.通过C#脚本启动时间轴

通过脚本启动时间轴可以更好地控制播放哪个时间轴以及何时播放。这对过场动画和互动电影特别有用。

通过脚本控制Playable Director时,可以在启动和停止Playable Director时调用回调函数。通常的用法是在过场动画开始时禁用玩家输入并阻止NPC /敌人的动作和移动,并在时间轴停止后恢复游戏状态。

我们的脚本还将在时间轴启动时执行一个回调函数,在时间轴停止时执行另一个回调函数。

1. 通过从GameObject下拉菜单中选择Create Empty 创建一个新的GameObject 。将其命名为Director 。

2. 通过从窗口下拉菜单中选择Sequencing(序列)>Timeline(时间线),打开“时间线”窗口。

3. 在选择了Director的情况下,单击Create(创建)来附加一个Playable Director组件并创建一个Timeline Asset(时间轴资产)(图01 )。

图01:创建Director组件和时间轴资产

4. 添加并配置所需的动画轨道(图02 )。

图02:我们的时间表,带有一个简单的飞越动画

5. 将一个名为TimelinePlayer 的新脚本组件添加到Director中,然后在脚本编辑器中将其打开。

6. 添加UnityEngine.Playables命名空间:

using UnityEngine.Playables;

7. 在类定义中,我们将创建对Playable Director和控制面板的引用:

private PlayableDirector director;

public GameObject controlPanel;

8.将“开始(Start)”更改为“唤醒(Awake)”,然后删除“更新(Update)”方法。

9. 在Awake中,我们将设置Playable Director参考并注册回调函数,以在Director启动和停止时调用它们:

director = GetComponent<PlayableDirector>();

director.played += Director_Played;

director.stopped += Director_Stopped;

在接下来的两个步骤中定义的Director_Played和Director_Stopped是返回类型为void的函数,其唯一参数为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. 最后,我们准备定义启动时间轴的函数:

public void StartTimeline(){

    director.Play();

}

13. 完整脚本应如下所示:

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 (按钮)来创建UI按钮。

16. 单击+ 号添加一个OnClick事件。将Director拖到Object 插槽中,然后选择TimelinePlayer > StartTimeline()(图03 )。

图03:添加OnClick事件以启动时间轴

17. 在“层次结构”视图中选择“ Director主管)”。在检查器的“Timeline Player(时间轴播放器)”组件中,将按钮或其父画布拖动到标有“ Control Panel(控制面板)” 的插槽中(图04 )。

图04:时间轴播放器已配置

18. 进入播放模式,然后单击按钮以启动时间轴。时间轴停止时,该按钮保持可见(图05 )。在播放时间轴时,它是隐藏的(图06 )。时间轴完成播放后,该按钮将再次变为可见。

图05:不播放时间轴时,开始按钮仍然可见。
图06:播放时间轴时,该按钮处于隐藏状态。

19. 退出播放模式。

 

2.结论

时间轴是一个本来就功能强大的系统,可通过脚本进一步增强。

游戏原型系列 vol.14 通过C#脚本启动时间轴-2019.3的评论 (共 条)

分享到微博请遵守国家法律