也是冷不丁的要做这块的东西.翻博客翻了半天也没有非常一文解决我需求的.整理好了就自己写个以备不时之需? ,也分享给其他需要的人
先上干货:
创建Timeline资产
_timelineAsset = ScriptableObject.CreateInstance<TimelineAsset>();
资产上创建一条条的内容
var track = _timelineAsset.CreateTrack<ActivationTrack>(null, "Track1");
var track1 = _timelineAsset.CreateTrack<AnimationTrack>(null, "TrackAnimator");
设置单条的clip内容
var clip = track.CreateDefaultClip();
clip.start = 2;
clip.duration = 2f;
再上运行后效果
最后是完整代码
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
public class Wd : WDParent
{
public GameObject bingdi1;
public GameObject bingdi2;
private PlayableDirector _playabledirector;
private TimelineAsset _timelineAsset;
Dictionary<string, PlayableBinding> bindingDict = new Dictionary<string, PlayableBinding>();
public override void Start()
{
_timelineAsset = ScriptableObject.CreateInstance<TimelineAsset>();
_playabledirector = gameObject.AddComponent<PlayableDirector>();
AddTrack();
_playabledirector.playableAsset = _timelineAsset;
foreach (var bind in _playabledirector.playableAsset.outputs)
{
if (!bindingDict.ContainsKey(bind.streamName))
{
bindingDict.Add(bind.streamName, bind);
}
}
SetTrackDynamic("Track1", bingdi1);
SetTrackDynamic("Track2", bingdi2);
}
//根据名称设置绑定的物体
public void SetTrackDynamic(string trackName, GameObject gameObject)
{
if (bindingDict.TryGetValue(trackName, out PlayableBinding pb))
{
_playabledirector.SetGenericBinding(pb.sourceObject, gameObject);
}
}
/// <summary>
/// 添加时间轨
/// </summary>
private void AddTrack()
{
//创建timeline一条一条的滑轨条
var track = _timelineAsset.CreateTrack<ActivationTrack>(null, "Track1");
var track1 = _timelineAsset.CreateTrack<AnimationTrack>(null, "TrackAnimator");
var track2 = _timelineAsset.CreateTrack<ActivationTrack>(null, "Track2");
//设置时间轨道上的clips 设置开始时间和持续时间 end是只读的不可以直接设置
var clip = track.CreateDefaultClip();
clip.start = 2;
clip.duration = 2f;
//连续添加
clip = track.CreateDefaultClip();
clip.start = 8;
clip.duration = 2;
}
}
?
|