Declare a dictionary to store the name and curve information of the custom clip
public Dictionary<string, CurveInfo> curveDict = new Dictionary<string, CurveInfo>();
public PlayableDirector Director ;
List<TrackAsset> tracks = new List<TrackAsset>();
public Dictionary<string, PlayableBinding> bindingDict = new Dictionary<string, PlayableBinding>();
private bool InitAttributes(PlayableDirector Director)
{
if (Director == null)
{
return false;
}
bindingDict = new Dictionary<string, PlayableBinding>() {
};
//根据组件 Playable Director 获得轨道
foreach (PlayableBinding pb in Director.playableAsset.outputs)
{
if (!bindingDict.ContainsKey(pb.streamName))
{
bindingDict.Add(pb.streamName, pb);
var track = bindingDict[pb.streamName].sourceObject as TrackAsset;
if (track != null)
{
//根据绑定的组件,判断是否是自定义轨道
if (pb.outputTargetType == typeof(Volume))
{
if (!tracks.Contains(pb.sourceObject as PostProcessTrack))
{
tracks.Add(pb.sourceObject as PostProcessTrack);
//遍历轨道上所有的clip
foreach (TimelineClip clip in track.GetClips())
{
//遍历每一个clip上所有的binding
foreach (var binding in AnimationUtility.GetCurveBindings(clip.curves))
{
string cliptype = (clip.asset as PostProcessClip).clipName;
if (curveDict.Keys.Contains(cliptype))
{
curveDict[cliptype].bindings.Add(binding);
}
else
{
CurveInfo info = new CurveInfo(clip);
info.bindings.Add(binding);
curveDict.Add(cliptype, info);
}
}
}
}
}
}
}
}
return bindingDict.Count != 0;
}
public class CurveInfo
{
public List<EditorCurveBinding> bindings;
public TimelineClip clip;
public CurveInfo(TimelineClip c)
{
if (bindings==null)
{
bindings = new List<EditorCurveBinding>() {
};
}
clip = c;
}
}