Copy link to clipboard
Copied
Lets say I want to move 20 objects 10 pixels on the x axis over 10 frames. well I could copy and past the keyframes or I can make a null or parent if I want them to all happen at the same time. What do I do if I want them to all do the same animation but at different times on the timeline? Ideally I would like to make somekind of "label" that I could apply to all the objects and be able to move the objects anywhere on the timeline. So instead of duplicating 20 nulls and moving them with the object along the timeline I kind of want a master null.
Copy link to clipboard
Copied
Via expressions you can read your marker information and their time. So the easiest way to apply this would be the .valueAtTime expression and pick whip your "Master" animation property:
thisComp.layer("Master").transform.position.valueAtTime(time - thisLayer.marker.key(1).time)
More in depth tutorial here: https://www.youtube.com/watch?v=gD1V_7x4iLE&feature=emb_logo
Copy link to clipboard
Copied
Thanks TobiFrei
I was hoping there was some kind of plugin for this like in that tutorial I see the author has a easing plugin and it looks like a labeling plug-in. I'm not very good at expressions and was hoping there was something that could label everything and say everything with this label do this.
Copy link to clipboard
Copied
For just offsetting animations you could use Rift. Maybe I don't understand, what exactly you want to label?
Copy link to clipboard
Copied
You know how you can label layers "red" yellow""aqua" etc... An example would be everything with a "red" label "move 10 pixels over 10 frames" or everything with a "green" label "opacity from 0-100 over 10 frames". It doesn't necesarrly have to be a label if theres some plugin that lets you select a bunch of layers and say do "X" to all these layers.
Copy link to clipboard
Copied
Parenting is the easiest way to move multiple layers at the same time. If you want to delay the movement of the child layers all you have to do is add this expression to the Child layers Position property:
delay = 20; // number of frames to delay, can be tied to a slider
parent.fromComp( toComp( anchorPoint, time - framesToTime( delay ) ) );
This will delay all child layers by 20 frames.
If you want toe delay to be cumulative then the expression looks like this:
delay = 20; // Delay in frames, can be tied to a slider
multiplyDelay = delay * ( index - parent.index )
parent.fromComp( toComp( anchorPoint, time - framesToTime( multiplyDelay ) ) );
The second expression is one that I have saved as an animation preset.
If you don't want to use parenting then the expression gets a lot more complicated. From what you describe just parenting the layers to the Master or top layer in the comp is by far the easiest way to go. The delay will increase as the layers move down. If you need to modify the comp so the delayed layers are above the master then just change the index - parent.index to index + parent.index. The only other requirement is that the child layers must be just below (index-parent.index) or just above (index+parent.index) the parent layer.
Hope that makes sense. It's a lot simpler than the other expression.
By the way, I wouldn't give that tutorial a very good grade. The explanations are not that clear and I'm not real fond of the workflow.
Copy link to clipboard
Copied
thanks Rick
That makes sense to me and looks like pretty much what I want. The only small drawback is I would have to type in the delay value each time I wanted to move the delay on the timeline instead of just dragging the layer around but not a big deal. I just can't imagine theres not a plug-in to do what I'm thinking about.
Copy link to clipboard
Copied
I would add a controller null with a slider and replace the typed in value with the slider value. Then you could even animate the delay over time.