Unity Timeline运行时脚本控制Mute和UnMute(Mute/UnMute a timeline track via scripting)

Unity Timeline运行时脚本控制Mute和UnMute

效果

最近遇到了一个问题就是希望能够在运行时脚本控制Timeline特定轨道的mute和unmute,本来以为是一个很简单的问题,结果发现并没有直接的API方法可以用,并且Unity官方论坛上也有很多相关讨论,这才发现原来没有那么容易。不过最终还是找到了行之有效的方法,并上传到了官方论坛上。虽然是一个简单的需求,但是这其中有几个点不得不提。

  1. Unity在Timeline控制上有些bug。在最初我使用2019.1.4f1版本,计划用signal调用mute或unmute函数,结果每次遇到signal,程序直接崩溃,崩溃率100%,后来确认了这是一个bug,据说在2020.1已结修好了,这次我换用了2020.3测试,果然是好的了。
  2. 如果timeline只有一条轨道,那么这条唯一的轨道被mute掉之后时间线会立刻回到0,哪怕你记录了track的时间。所以需要增加一条轨道来使时间线维持正常运作。
  3. timeline的轨道序号不是从0开始的,是从1开始的。

最终代码如下:

using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
public class timeLineMuteUnMute : MonoBehaviour
{
    PlayableDirector m_PlayableDirector;
    TimelineAsset m_TimelineAsset;
    // Start is called before the first frame update
    void Start()
    {
        m_PlayableDirector = FindObjectOfType<PlayableDirector>();
        m_TimelineAsset = (TimelineAsset)m_PlayableDirector.playableAsset;
    }
    public void MuteTrack(int inNum)
    {
        TrackAsset theTrack = m_TimelineAsset.GetOutputTrack(inNum);
        theTrack.muted = true;
        double t0 = m_PlayableDirector.time;
        m_PlayableDirector.RebuildGraph();
        m_PlayableDirector.time = t0;
        m_PlayableDirector.Play();
    }
    public void UnMuteTrack(int inNum)
    {
        TrackAsset theTrack = m_TimelineAsset.GetOutputTrack(inNum);
        theTrack.muted = false;
        double t0 = m_PlayableDirector.time;
        m_PlayableDirector.Stop();
        m_PlayableDirector.time = t0;
        m_PlayableDirector.Play();
        //You can also use this function.
       //TrackAsset theTrack=m_TimelineAsset.GetOutputTrack(inNum); 
        //theTrack.muted = false;
        //double t0 = m_PlayableDirector.time;
        //m_PlayableDirector.RebuildGraph();
        //m_PlayableDirector.time = t0;
        //m_PlayableDirector.Play();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.M))
            MuteTrack(2);
        if (Input.GetKeyDown(KeyCode.U))
            UnMuteTrack(2);
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值