基于上节中创建好Timeline以后,再进行本节的相关操作。
创建TimeLineMute脚本
脚本实现通过按键实时控制轨道的屏蔽操作。
注意:通过代码屏蔽轨道后,运行结束后轨道也是保持屏蔽的状态,所以需要每次开始时,先将所有轨道解开屏蔽的状态。
脚本代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
public class TimeLineMute : MonoBehaviour
{
//首先获取组件
PlayableDirector m_playabledirector;
TimelineAsset m_Timelineasset;
void Start()
{
//找到场景中包含该组件的对象
m_playabledirector = FindObjectOfType<PlayableDirector>();
//找到该对象中TimeLineAsset组件
m_Timelineasset = (TimelineAsset)m_playabledirector.playableAsset;
//得到组件后,先给每个轨道解禁
for(int i=1;i<=10;i++)
{
TrackAsset thetrack = m_Timelineasset.GetOutputTrack(i);
thetrack.muted = false;//到这里为止,通过代码设置,场景中轨道确实被mute了,但是轨道中的内容还是一样执行,可能是没刷新。不知道为什么
}
double t0 = m_playabledirector.time;
m_playabledirector.RebuildGraph();
m_playabledirector.time = t0;
m_playabledirector.Play();
}
//设置TimelineAsset中轨道的禁用
public void MuteTrack(int inNum)
{
TrackAsset thetrack = m_Timelineasset.GetOutputTrack(inNum);
thetrack.muted = true;//到这里为止,通过代码设置,场景中轨道确实被mute了,但是轨道中的内容还是一样执行,可能是没刷新。不知道为什么
double t0 = m_playabledirector.time;
m_playabledirector.RebuildGraph();
m_playabledirector.time = t0;
m_playabledirector.Play();
//加了后续代码后就可以了正常隐藏了
}
void Update()
{
if (Input.GetKeyDown(KeyCode.M))
{
MuteTrack(5);
//是按照每个轨道所占的轨道数进行操作的,暂时还没有发现Group一组屏蔽的代码操作
MuteTrack(6);
MuteTrack(7);
MuteTrack(8);
MuteTrack(9);
}
}
}