Custom Typing Effect

Hello, I was wanting to add some type of custom typing effect and I was looking through old post and wanted to see how I could re-create this effect?

I don’t want the coloring part of this, I was referring to the sizing where it goes through each letter, increases in size, and goes back to normal.

I am familiar with Rich Text and the font size feature.

1 Like

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

2 Likes

it looks like specifically its a bunch of textlabels representing each character inside a frame with uilistlayout.

I can tell because the way the other characters react when one increases in size

2 Likes

yes, a UIListLayout would be a smart way to add padding so that when the character increases in size it doesnt overlap with other characters

2 Likes

that and it contributes to the wave effect as the rest react accordingly

1 Like

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


2 Likes

Here I was able to achieve this affect:

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


4 Likes

Yours looks cool good job! What do you think of mine?

definitely a lot smoother than mine, also like the coloring effect

Thank you! I’m glad you liked it

Thank you for the help, I’m trying to incorporate it now, how did you get rid of this weird spacing issue between the bigger and smaller letters?
image

image

  1. My size properties and position properties are set to scale.
  2. My Textlabels are set to textscaled

I simply put the text next to each other in this way and let UiListLayout do its job in orgnaizing it.

image
image
image
Hmm, maybe I’m doing something wrong?

2 Likes

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

image

see how it looks like that when the text is shrinked on the X axis

I then lead right back to this issue,
image

If I try and make any offset values, it wouldn’t work for the system I am trying to do with Usernames being set to the text box.

try using Rich Text

you can modify letters, words, and phrases without using separate TextLabels with the use of Rich Text

1 Like

try useing the padding in uilistlayout on scale