Unity TimeLine 扩展类 方便操作PlayableDirector

public static class PlayableExtend 
{ 
    /// <summary>
    /// 获取绑定的轨道
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="playableDirector"></param>
    /// <param name="trackname"></param>
    /// <returns></returns>
    public static PlayableBinding GetPlayableBinding(this PlayableDirector playableDirector, string trackname)
    {
        foreach (PlayableBinding pb in playableDirector.playableAsset.outputs)//每次都用循环获取 这里性能可能会有影响
        {
            if (pb.streamName.Equals(trackname))
            {
                return pb;
            }
        }
        throw new NullReferenceException($"未找到对应的[{trackname}]名称!");
    } 
    /// <summary>
    /// 一次性获取所有的轨道信息
    ///  
    /// </summary>
    /// <param name="playableDirector"></param>
    /// <returns></returns>
    public static Dictionary<string, PlayableBinding> GetPlayableBindings(this PlayableDirector playableDirector)
    {
        Dictionary<string, PlayableBinding> bindingDict = new Dictionary<string, PlayableBinding>();   //获取TimeLine的轨道 
        foreach (PlayableBinding pb in playableDirector.playableAsset.outputs)
        {
            if (!bindingDict.ContainsKey(pb.streamName))
            {
                bindingDict.Add(pb.streamName, pb);  
            }
        }
        return bindingDict;
    } 
    /// <summary>
    /// 设置对应的轨道mute
    /// </summary>
    /// <param name="playableDirector"></param>
    /// <param name="trackname"></param>
    /// <param name="value"></param>
    public static void SetTackMute(this PlayableDirector playableDirector,string trackname,bool value)
    {
        var ass = playableDirector.GetPlayableBinding(trackname).sourceObject as TrackAsset;
        ass.muted = value; 
    }

    /// <summary>
    /// 设置对应的轨道mute,并重新绘制
    /// 在PlayableBehaviour下 会没有效果并且报错
    /// </summary>
    /// <param name="playableDirector"></param>
    /// <param name="trackname"></param>
    /// <param name="value"></param>
    public static void SetTackMuteRebuildGraph(this PlayableDirector playableDirector, string trackname, bool value)
    {
        var ass = playableDirector.GetPlayableBinding(trackname).sourceObject as TrackAsset;
        ass.muted = value;

        double t0 = playableDirector.time;
        playableDirector.RebuildGraph();
        playableDirector.time = t0;
        playableDirector.Play();
    }

    /// <summary>
    /// 获取轨道对应轨道类型
    /// 比如 获取轨道中 AnimationTrackAsset 对其操作
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="playableDirector"></param>
    /// <param name="trackName"></param>
    /// <returns></returns>
    public static T GetTrackAsset<T>(this PlayableDirector playableDirector,string trackName) where T: TrackAsset
    {  
        return playableDirector.GetPlayableBinding(trackName).sourceObject as T;
    }

    /// <summary>
    /// 绑定对应的物体
    /// 比如说重新绑定 animatortrack 中的对象
    /// 传入 轨道名称 和对象对应的动画器(Animator)
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="playableDirector"></param>
    /// <param name="trackName"></param>
    /// <param name="_object"></param>
    public static void SetBind<T>(this PlayableDirector playableDirector,string trackName,T _object) where  T : Behaviour
    { 
        playableDirector.SetGenericBinding(playableDirector.GetPlayableBinding(trackName).sourceObject, _object);
    }
}

使用的版本 是2019.4 LTS

TimeLine 版本是 1.6.2

刚好用到 TimeLine 来做一下特殊击杀

整理了一下本次常用的方法,写成了扩展类

有些地方不是很了解,在这里抛砖引玉,有问题一起讨论。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity TimelineUnity引擎中的一个功能强大的工具,用于创建和编辑时间轴动画序列。它允许开发人员以可视化的方式组织、调整和控制游戏中的动画、音频和事件。通过使用Unity Timeline,开发人员可以轻松地创建复杂的动画序列,而无需编写大量的代码。 Timeline播放指针是Timeline中的一个重要元素,它代表了在预览时的精确时间点。可以通过点击Timeline的时间轴或在播放指针位置的输入框内输入时间值来将播放指针放在特定的时间。输入的数字会根据Timeline的设置转化成秒或帧数。例如,如果Timeline的时间轴表示秒且每秒有30帧,当输入180时,输入框中的值会转化成秒,并将播放指针移动到6:00的位置。 Unity Timeline还提供了Track视图,通过Track视图可以对游戏对象的属性、动画、音频和事件进行编辑和控制。可以在Track视图中创建和管理各种型的轨道,包括动画轨道、音频轨道和事件轨道等,以便对不同型的内容进行组织和管理。 总之,Unity Timeline是一个可以帮助开发人员创建和编辑时间轴动画序列的工具,通过它可以实现对动画、音频和事件的可视化控制和组织。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [[干货分享]Unity3D 深入解析Timeline编辑器](https://blog.csdn.net/momohou2000/article/details/106189543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值