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就更好理解了是每一帧都会进入。

相关推荐
吴梓穆14 小时前
untiy TextMeshPro (TMP) text 操作 中文字符集 字体材质操作(添加纹理 添加描边 添加阴影)
unity
想你依然心痛17 小时前
嵌入式单元测试:Unity/CMock框架与硬件在环测试——测试驱动、桩函数
unity·单元测试·游戏引擎
xcLeigh18 小时前
Unity基础:Game视图详解——游戏预览、分辨率模拟与性能显示
游戏·unity·游戏引擎·音频·视频·game·play模式
xcLeigh1 天前
Unity基础:Scene视图操作完全指南——视角控制、物体选择与场景导航
unity·游戏引擎·scene·试图·场景导航
mxwin1 天前
Unity Shader exp 函数的算法与渲染应用
算法·unity·游戏引擎·shader
mxwin1 天前
Unity URP Exposure曝光原理与实战应用
unity·游戏引擎
WarPigs2 天前
AB包自定义打包工具
unity
叶帆19 天前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
久数君19 天前
AI三维建模工具“造形家”:地理场景三维化的高效解决方案
unity·glb·ai算法·ai三维建模工具·地图框选·造形家·城市建筑模型
会思考的猴子19 天前
Unity VFX 属性 Postion 和 TargetPostion
unity