i would achieve this by creating each individual character as a TextLabel and positioning them next to eachother, instancing a UIScale inside of each character. you would then run a for i,v in pairs() loop through each letter/TextLabel.
this loop would tween the Scale value of the UIScale inside the TextLabel up, and then down. we dont tween the TextSize here as it would be choppy due to TextSize not accepting decimals. the loop would wait for a moment, and then continue. this makes the effect of a waving motion
i made a very unrefined prototype to convey the idea
local Frame = script.Parent.Frame
local Message = "I am testing this system!"
local IndividualCharacters = string.split(Message,"")
local TweenService = game:GetService("TweenService")
local InfoGrow = TweenInfo.new(.15,Enum.EasingStyle.Quart,Enum.EasingDirection.In)
local InfoShrink = TweenInfo.new(1,Enum.EasingStyle.Quart,Enum.EasingDirection.InOut)
for _,Character in pairs(IndividualCharacters) do
local TextLabel = Instance.new("TextLabel")
TextLabel.Text = Character
TextLabel.Size = UDim2.fromScale(0.018,0.296)
TextLabel.BackgroundTransparency = 1
local UIScale = Instance.new("UIScale")
UIScale.Parent = TextLabel
TextLabel.Parent = Frame
end
task.wait(1)
for _,Character in pairs(Frame:GetChildren()) do
if not Character:IsA("TextLabel") then continue end
local TweenGrow = TweenService:Create(Character.UIScale,InfoGrow,{Scale = 1.25})
TweenGrow:Play()
TweenGrow.Completed:Wait()
local TweenShrink = TweenService:Create(Character.UIScale,InfoShrink,{Scale = 1}):Play()
end
Here is the code I used. I encourage you to use it as a educational resource and to take notes on it. If you need help understanding anything, feel free to reach out to me:
task.wait(4)
local ts = game:GetService("TweenService")
local function animate(textLabel)
local startTween = ts:Create(textLabel, TweenInfo.new(.1, Enum.EasingStyle.Linear), {
["Size"] = UDim2.new(0.062, 0,1.3, 0),
["TextColor3"] = Color3.new(0.737255, 0.505882, 1)
})
local endTween = ts:Create(textLabel, TweenInfo.new(.1, Enum.EasingStyle.Linear), {["Size"] = UDim2.new(0.061, 0,1, 0)})
startTween:Play()
startTween.Completed:Wait()
endTween:Play()
end
while true do
for i,label in pairs(script.Parent:GetChildren()) do
if label:IsA("TextLabel") then
label.Visible = true
task.wait(.05)
end
end
for i,label in pairs(script.Parent:GetChildren()) do
if label:IsA("TextLabel") then
task.spawn(animate, label)
task.wait(.025)
end
end
task.wait(3)
for i,label in pairs(script.Parent:GetChildren()) do
if label:IsA("TextLabel") then
label.Visible = false
label.TextColor3 = Color3.new(0.133333, 0.133333, 0.133333)
end
end
end
I think you have to adjust the size on the X axis so that the textscaled is consistent with all the elements. Play around with the size until you find something you like
see how it looks like that when the text is shrinked on the X axis