I have a question on how to make letters appear at the same speed, even if the text has not the same number of characters.
In my case, let’s say that I want to make a text appears at the rythm of 1 letter every 2 frames, the problem with keyframes is that the letters will appear slowly with a short text, and quickly with a long text.
So I created a slider controler linked to the source text (text.sourceText.length;) that return the number of characters of the text.
Then I created another slider controler (named “Animate On”) linked to an “Opacity Animator” on the Start value, with wich I can key the start and end value (On Start value:
V = linear(effect(“Animate On”)(“Slider”),0,100,0,effect(“Character Count”)(“Slider”));
and on End value:
But here is the problem, the speed is variable depending on the length of the text.
I looked for a way of making the letters appearing at the same speed but I do not find any solution.
I put a simple project to see, because it is hard to explain in detail.
If someone can help me here, it would be great help.
Hey Gregory, first of – well done that you uploaded a project file to test with. Its a lot easier to find a workaround this way!
I think it can be simplified, but a few things to clarify: 1. Essentially, what you need to achieve is for phrase to animate phrase in a constant speed. Depending on their chars count, animation will change in duration if its 1letter / 2 frames. Is this correct assumption? 2. If above is correct, keyframes has to go away completely from animate On slider. As now its the reason why animation duration is not constant for each letter. You are forcing it to fit within 20 frames, disregarding phrase length.
Based on above thoughts and with least changes to existing structure.
~ Remove keyframes from Animate On; ~ Set Animate On slider to setting, for characters animation count/frame. 1 will be 1char every frame, 2 stands for 1 char every 2 frames, etc. ~ Remove keyframes from Range Selector.
Apply below expression to achieve this, applied to yours Animator 2 Range Selector 1>Start.
var animSpeedPerChar = effect("Animate On")("Slider");
var numChars = effect("Character Count")("Slider");
var frameDur = thisComp.frameDuration
var animLength = animSpeedPerChar * numChars * frameDur;
var res = linear(time, 0, animLength, 0, numChars)
Gregory, no worries, glad I understood the needs! There are without a doubt many ways on achieving the same things through a different technique – thus, don’t hesitate to explore the options – only though trial and error ideas pops in front of us. Good luck!