Unity Timeline学习笔记(2) - PlayableTrack

PlayableTrack 是可自定义播放的轨道。我们可以通过进入轨道后调用自己的函数方法,使用起来也是比较顺手的。

添加轨道

我们点击加号添加

这样就有一个空轨道了,然后我们创建两个测试脚本。

添加脚本

分别是Playable Behaviour和PlayableAsset脚本。

Asset脚本是可以拖动到轨道上的,通过Asset脚本来调用Behaviour脚本的方法,直接贴上脚本:

首先是PlayableAsset

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class PlayableAssetTest : PlayableAsset
{
    public string testName;
    public int testInt;

    // Factory method that generates a playable based on this asset
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        //return Playable.Create(graph);
        PlayableTest t = new PlayableTest();
        t.testName = testName;
        t.testInt = testInt;

        return ScriptPlayable<PlayableTest>.Create(graph, t);

    }
}

他在CreatePlayble的时候,我们实例化Playable Behaviour脚本,并传入想传入的参数。

Playable Behaviour的代码如下:

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

// A behaviour that is attached to a playable
public class PlayableTest : PlayableBehaviour
{
    public string testName;
    public int testInt;
    // 当开始运行Timeline的时候
    public override void OnGraphStart(Playable playable)
    {
        Debug.Log("TimeLine 开始播放");
    }

    // 当停止运行Timeline的时候
    public override void OnGraphStop(Playable playable)
    {
        Debug.Log("TimeLine 停止播放");
    }

    // 当进入区域内触发Play
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        Debug.Log($"进入滑块区域内{testName},Int:{testInt}");
    }

    // 当出了区域触发,或者开始的时候触发,或者停止运行的时候
    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        Debug.Log($"Pause{testName},Int:{testInt}");
    }


    // 在区域内每个Frame地方都会触发
    public override void PrepareFrame(Playable playable, FrameData info)
    {
        //Debug.Log("PlayableTest PrepareFrame");
    }
}

然后我们把PlayableAssetTest 拖入轨道

轨道的长度位置和动画一样来调整就可以了,

运行结果和总结

我们运行看看这些函数是如何触发的。

我们看到在编辑器运行后,首先进入的就是OnGraphStart和OnBehaviourPause。

当播放到脚本块后,刚进入就进入了OnBehaviourPlay,当播放出了脚本块后会调用OnBehaviourPause,当整个Timeline结束后会调用到OnGraphStop。

基本上都很好理解,只有这个OnBehaviourPause比较特殊,相当于Timeline在调用播放激活的时候会调用一次,不管是不是在当前滑块范围内(滑块在第一帧)。然后当出了滑块区域会调用一次。或者Timeline被强制停止播放都会。

这里和信号(Signal Track)有很大分别,大家在使用的时候就知道如果某些东西只有在Timeline周期处理的用PlayableTrack比较合适,某些点可以用信号轨道。

PrepareFrame就更好理解了是每一帧都会进入。

相关推荐
土了个豆子的11 小时前
unity中的动画混合树
unity·游戏引擎
奔跑的犀牛先生14 小时前
unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键
unity
Dr.勿忘1 天前
C#面试常考随笔8:using关键字有哪些用法?
开发语言·unity·面试·c#·游戏引擎
存储服务专家StorageExpert1 天前
答疑解惑:如何监控EMC unity存储系统磁盘重构rebuild进度
运维·unity·存储维护·emc存储
追逐梦想永不停1 天前
Unity实现按键设置功能代码
unity
我命由我123452 天前
游戏引擎 Unity - Unity 下载与安装
c语言·开发语言·c++·后端·unity·c#·游戏引擎
车载诊断技术2 天前
车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇
网络·unity·架构·汽车·电子电器框架·车载充电器(obc)
我命由我123452 天前
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
c语言·c++·后端·unity·c#·游戏引擎·ue4
我命由我123452 天前
游戏开发领域 - 游戏引擎 UE 与 Unity
开发语言·c++·unity·c#·游戏引擎·unreal engine·unreal engine 4
一个一定要撑住的学习者2 天前
Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案
人工智能·unity·游戏引擎