Unity TimeLine custom track Curve related

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;
 
    }
}

Guess you like

Origin blog.csdn.net/qq_43388137/article/details/124407016
Recommended