Na animações, transição é o processo de gerar quadros intermediários entre dois pontos-chave em uma sequência.Ao projetar uma interface de usuário, você pode usar transições para transicionar um GuiObject suavemente de um estado para outro, como:
- Aumentar suavemente o tamanho de um botão quando um usuário o seleciona.
- Menus de UI deslizantes dentro e fora dos cantos da tela.
- Animar gradualmente uma barra de saúde entre duas larguras quando um usuário recebe um aumento de saúde.
Adolescentes de propriedade única
Posição
Para transicionar a posição de um : :
- Defina o para o Objeto.
- Passe um TweenInfo e a posição alvo para TweenService:Create().
- Jogue o pré-adolescente com Tween:Play().
O seguinte trecho de código move um ImageLabel dentro de um ScreenGui para o centro exato da tela:
UI Tween - Posição
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")object.AnchorPoint = Vector2.new(0.5, 0.5)local targetPosition = UDim2.new(0.5, 0, 0.5, 0)local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Position = targetPosition})tween:Play()
Tamanho
Para reduzir o tamanho de um :
- Anexe um UIAspectRatioConstraint a o objeto para manter sua proporção de aspecto projetada ao transicionar.
- Passe um TweenInfo e o tamanho alvo para TweenService:Create().
- Jogue o pré-adolescente com Tween:Play().
O seguinte trecho de código escala um ImageLabel dentro de um ScreenGui para 40% da largura ou altura da tela (qualquer que seja menor) a partir do ponto de âncora central do Objeto:
UI Tween - Tamanho
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")object.AnchorPoint = Vector2.new(0.5, 0.5)local aspectRatioConstraint = Instance.new("UIAspectRatioConstraint")aspectRatioConstraint.Parent = objectlocal targetSize = UDim2.new(0.4, 0, 0.4, 0)local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Size = targetSize})tween:Play()
Rotação
Para transicionar a rotação de um GuiObject :
- Defina o AnchorPoint.
- Determine o alvo Rotation para o Objeto.
- Passe um TweenInfo e a rotação alvo para TweenService:Create().
- Jogue o pré-adolescente com Tween:Play().
UI Tween - Tamanho
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")object.AnchorPoint = Vector2.new(0.5, 0.5)local targetRotation = 45local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Rotation = targetRotation})tween:Play()
Transparência
Múltiplas propriedades controlam a transparência da interface de usuário, dependendo do digitarde objeto.Você pode transicionar cada uma dessas propriedades individualmente ou combiná-las através de um transição multi-propriedade.Alternativamente, você pode aumentar a transparência geral de um Objetocolocando-o dentro de um CanvasGroup e transpassando o grupo de GroupTransparency.
UI Tween - Transparência da Imagem
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")local targetTransparency = 0.8local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {ImageTransparency = targetTransparency})tween:Play()
UI Tween - Transparência do Grupo de Canvas
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local canvasGroup = ScreenGui:WaitForChild("CanvasGroup")local targetTransparency = 0.8local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(canvasGroup, tweenInfo, {GroupTransparency = targetTransparency})tween:Play()
Cor
Múltiplas propriedades controlam a cor da interface de usuário, dependendo do digitarde objeto.Você pode transicionar cada uma dessas propriedades individualmente ou combiná-las através de um transição multi-propriedade.Alternativamente, você pode tonificar a cor geral de um Objetocolocando-o dentro de um CanvasGroup e tonificando o grupo GroupColor3.
UI Tween - Cor da Imagem
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")local targetColor = Color3.fromRGB(255, 0, 0)local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {ImageColor3 = targetColor})tween:Play()
UI Tween - Cor do Grupo de Canvas
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local canvasGroup = ScreenGui:WaitForChild("CanvasGroup")local targetColor = Color3.fromRGB(255, 0, 0)local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(canvasGroup, tweenInfo, {GroupColor3 = targetColor})tween:Play()
Traço
Múltiplas propriedades controlam as bordas da interface de usuário, dependendo do digitarde objeto.
Alternativamente, você pode aplicar uma criança UIStroke e adolescente sua espessura, cor e/ou transparência.
Objeto de UI | Propriedades |
---|---|
UIStroke | Color , Thickness , Transparency |
UI Tween - Cor e espessura do traço da interface de usuário
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("TextLabel")local stroke = Instance.new("UIStroke")stroke.Color = Color3.fromRGB(255, 255, 255)stroke.Thickness = 5stroke.Parent = objectlocal targetColor = Color3.fromRGB(255, 0, 0)local targetThickness = 10local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(stroke, tweenInfo, {Color = targetColor, Thickness = targetThickness})tween:Play()
Adolescentes multifuncionais
Você pode combinar qualquer um dos adolescentes de propriedade única em tweens mais complexos passando várias propriedades alvo para , por exemplo posição + rotação ou tamanho + transparência .
UI Tween - Posição e Rotação
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")object.AnchorPoint = Vector2.new(0.5, 0.5)local targetPosition = UDim2.new(0.5, 0, 0.5, 0)local targetRotation = 45local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Position = targetPosition, Rotation = targetRotation})tween:Play()
UI Tween - Tamanho e Transparência
local TweenService = game:GetService("TweenService")local Players = game:GetService("Players")local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")local ScreenGui = PlayerGui:WaitForChild("ScreenGui")local object = ScreenGui:WaitForChild("ImageLabel")object.AnchorPoint = Vector2.new(0.5, 0.5)local aspectRatioConstraint = Instance.new("UIAspectRatioConstraint")aspectRatioConstraint.Parent = objectlocal targetSize = UDim2.new(0.4, 0, 0.4, 0)local targetTransparency = 0.8local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Size = targetSize, ImageTransparency = targetTransparency})tween:Play()
Sequências de transição
Você pode encadear animações de UI para ocorrer uma após a outra, ao jogar adolescentes subsequentes sobre o evento do interseçãoanterior Completed.Por exemplo, o seguinte script move um objeto para o centro da tela, então o gira em 45°.
Sequência de Tween da Interface de Usuário
local TweenService = game:GetService("TweenService")
local Players = game:GetService("Players")
local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")
local ScreenGui = PlayerGui:WaitForChild("ScreenGui")
local object = ScreenGui:WaitForChild("ImageLabel")
object.AnchorPoint = Vector2.new(0.5, 0.5)
local targetPosition = UDim2.new(0.5, 0, 0.5, 0)
local targetRotation = 45
local tweenInfo = TweenInfo.new(2)
local positionTween = TweenService:Create(object, tweenInfo, {Position = targetPosition})
local rotationTween = TweenService:Create(object, tweenInfo, {Rotation = targetRotation})
-- Inicialmente jogar posição interseção
positionTween:Play()
-- Jogar transição de rotação após a conclusão da interseçãode posição
positionTween.Completed:Connect(function()
rotationTween:Play()
end)
Opções de facilitação
Usando as opções de relaxamento de , você pode controlar o estilo de relaxamento e direção de animações de UI.
Estilos
Enum.EasingStyle define a taxa de interpolação de início a terminar/parar/sair. Por padrão, o estilo de alívio é definido como Enum.EasingStyle.Quad .
Estilos | Descrição |
---|---|
Lineal | Mova-se a uma velocidade constante. |
Sinais | A velocidade é determinada por uma onda seno para um leve movimento de relaxamento. |
Quad | Semelhante a Sine mas com uma curva ligeiramente mais afiada com base em interpolação quadrática. |
Cúbico | Semelhante a Quad mas com uma curva ligeiramente mais afiada com base em interpolação cúbica. |
Quarto | Semelhante a Cúbico mas com uma curva ainda mais afiada com base na interpolação quartica. |
Quinto | Semelhante a Quarto mas com uma curva ainda mais afiada com base na interpolação quintética. |
Exponencial | A curva mais afiada baseada em interpolação exponencial. |
Circular | Segue um arco circular, de modo que a aceleração seja mais repentina e a desaceleração mais gradual em relação a Quint ou Exponencial . |
Voltar | Supera ligeiramente o alvo, então volta ao local. |
Salto | Salta para trás várias vezes depois de atingir o alvo, antes de finalmente se estabelecer. |
Elástico | Mova-se como se estivesse anexado a uma faixa de borracha, excedendo o alvo várias vezes. |

Estilo de facilitação - Cúbico
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Direção
define como a interpolação de estilo de alívio se aplica a um Objeto, com um padrão de Fora .Observe que um pré-adolescente com estilo de alívio Linear não é afetado, pois a interpolação linear é constante de início a terminar/parar/sair.
Direção | Descrição |
---|---|
In | O estilo de alívio se aplica em uma direção para frente. |
Fora | O estilo de relaxamento se aplica em uma direção inversa. |
Fora | O estilo de relaxamento se aplica para a frente na primeira metade e para trás na segunda metade. |
Direção de alívio - InOut
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic, Enum.EasingDirection.InOut)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Animar texto
Você pode facilmente melhorar a interface de usuário baseada em texto, como banners de cutscene, instruções do jogador e prompts, com efeitos animados.
Efeito de máquina de escribir
O efeito "máquina de escrever" é ideal para TextLabels que contam uma história, produzem conversas de NPC, etc.
Crie um novo ModuleScript dentro de ReplicatedStorage .
Renomeie o novo script AnimateUI .
Cole o seguinte código no script:
ModuleScript - AnimateUIlocal LocalizationService = game:GetService("LocalizationService")local Players = game:GetService("Players")local SOURCE_LOCALE = "en"local translator = nillocal AnimateUI = {}function AnimateUI.loadTranslator()pcall(function()translator = LocalizationService:GetTranslatorForPlayerAsync(Players.LocalPlayer)end)if not translator thenpcall(function()translator = LocalizationService:GetTranslatorForLocaleAsync(SOURCE_LOCALE)end)endendfunction AnimateUI.typeWrite(guiObject, text, delayBetweenChars)guiObject.Visible = trueguiObject.AutoLocalize = falselocal displayText = text-- Traduza o texto se possívelif translator thendisplayText = translator:Translate(guiObject, text)end-- Substitua as tags de quebra de linha para que o ciclo gráfico não perca esses caracteresdisplayText = displayText:gsub("<br%s*/>", "\n")-- Remova as tags RichText pois a animação char-by-char quebrará as tagsdisplayText = displayText:gsub("<[^<>]->", "")-- Definir texto traduzido/modificado no paiguiObject.Text = displayTextlocal index = 0for first, last in utf8.graphemes(displayText) doindex += 1guiObject.MaxVisibleGraphemes = indextask.wait(delayBetweenChars)endendreturn AnimateUICrie um TextLabel em um local adequado, como dentro de um ScreenGui pai para StarterGui.
Insira um novo LocalScript como filho direto da etiqueta e cole o seguinte código.Observe que cada mensagem é emitida ao chamar AnimateUI.typeWrite() com parâmetros para o Objetopai, a string a ser emitida e o atraso entre os caracteres.
LocalScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local AnimateUI = require(ReplicatedStorage:WaitForChild("AnimateUI"))local label = script.Parent-- Carregue o tradutor se o jogo for localizado--AnimateUI.loadTranslator()local message1 = [[Beyond this door is the<br /><font size="46" color="rgb(255,50,25)">Great Zorgoth...</font> <font size="40">🗡</font>]]AnimateUI.typeWrite(label, message1, 0.05)task.wait(1)local message2 = [[...who rules this dungeon <font color="rgb(255,200,50)">unchallenged!</font> <font size="30">😈</font>]]AnimateUI.typeWrite(label, message2, 0.05)