En la animaciones, transición es el proceso de generar marcos intermedios entre dos puntos clave en una secuencia.Al diseñar una interfaz de usuario, puedes usar tweening para transitar suavemente de un estado a otro, como:
- Aumentar suavemente el tamaño de un botón cuando un usuario lo selecciona.
- Menús de interfaz de usuario deslizantes dentro y fuera de los bordes de la pantalla.
- Animar gradualmente una barra de salud entre dos anchos cuando un usuario recibe un impulso de salud.
Adolescentes de una sola propiedad
Posición
Para intercalar la posición de un : :
- Establece el AnchorPoint para el objeto.
- Pasa un TweenInfo y la posición objetivo a TweenService:Create() .
- Juega con el preadolescente con Tween:Play().
El siguiente fragmento de código mueve un ImageLabel dentro de un ScreenGui al centro exacto de la pantalla:
Tween de la interfaz de usuario - Posición
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()
Tamaño
Para reducir el tamaño de un : :
- Ata un UIAspectRatioConstraint a el objeto para mantener su proporción de aspecto diseñada al pasar por la transición.
- Pasa un TweenInfo y el tamaño objetivo a TweenService:Create() .
- Juega con el preadolescente con Tween:Play().
El siguiente fragmento de código escala un ImageLabel dentro de un ScreenGui a 40% de la anchura o altura de la pantalla (cualquiera de los dos sea menor) desde el punto de anclaje central del objeto:
UI Tween - Tamañ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 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()
Rotación
Para mediar la rotación de un :
- Establece el AnchorPoint para que el objeto gire alrededor.
- Determine el objetivo Rotation para el objeto.
- Pasa un TweenInfo y la rotación objetivo a TweenService:Create() .
- Juega con el preadolescente con Tween:Play().
UI Tween - Tamañ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 targetRotation = 45local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Rotation = targetRotation})tween:Play()
Transparencia
Múltiples propiedades controlan la transparencia de la interfaz de usuario, dependiendo del introducirde objeto.Puedes transicionar cada una de estas propiedades individualmente o combinarlas a través de un transición de múltiples propiedades.Alternativamente, puedes aumentar la transparencia general de un objeto colocándolo dentro de un CanvasGroup y transfiriendo el grupo GroupTransparency .
UI Tween - Transparencia de imagen
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 - Transparencia del grupo de lienzos
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()
Colores
Múltiples propiedades controlan el color de la interfaz de usuario, dependiendo del introducirde objeto.Puedes transicionar cada una de estas propiedades individualmente o combinarlas a través de un transición de múltiples propiedades.Alternativamente, puedes cambiar el color general de un objeto colocándolo dentro de un CanvasGroup y transfiriendo el grupo GroupColor3 .
UI Tween - Color de imagen
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 - Color del grupo de lienzos
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()
Trazo
Múltiples propiedades controlan las fronteras de la interfaz de usuario, dependiendo del introducirde objeto.
Alternativamente, puedes aplicar un UIStroke hijo y reducir su grosor, color y/o transparencia.
Objeto de UI | Propiedades |
---|---|
UIStroke | Color , Thickness , Transparency |
UI Tween - Color y espesor del trazado de la interfaz de usuario
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 de propiedad múltiple
Puedes combinar cualquiera de los adolescentes de una sola propiedad en adolescentes más complejos pasando múltiples propiedades objetivo a TweenService:Create() , por ejemplo posición + rotación o tamaño + transparencia .
Interfaz de usuario adolescente - Posición y rotación
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 - Tamaño y transparencia
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()
Secuencias de preadolescente
Puedes encadenar animaciones de interfaz de usuario para que ocurran una tras otra al jugar a los adolescentes siguientes sobre el evento Completed del intermediación/interpolación de movimientoanterior.Por ejemplo, el siguiente script mueve un objeto al centro de la pantalla, luego lo gira en 45°.
Secuencia de transición de UI
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})
-- Jugar inicialmente la posición de intermediación/interpolación de movimiento
positionTween:Play()
-- Reproducir la rotación del tween al finalizar la rotación del intermediación/interpolación de movimiento
positionTween.Completed:Connect(function()
rotationTween:Play()
end)
Opciones de alivio
Usando las opciones de suavización de , puedes controlar el estilo de suavización y la dirección de las animaciones de la interfaz de usuario .
Estilo
Enum.EasingStyle establece la velocidad de interpolación desde el principio hasta el finalizar. Por defecto, el estilo de suavización se establece en Enum.EasingStyle.Quad .
Estilo | Descripción |
---|---|
Lineal | Se mueve a una velocidad constante. |
Sine | La velocidad se determina por una onda de sine para un suave movimiento de relajación. |
Cuádruple | Similar a Sine pero con una curva más afilada ligeramente basada en la interpolación cuadrática. |
Cubicado | Similar a Cuádruple pero con una curva más afilada ligeramente basada en la interpolación cuadrática. |
Cuarto | Similar a Cubic pero con una curva más afilada basada en la interpolación cuadrática. |
Quinto | Similar a Cuarto pero con una curva más afilada basada en la interpolación cuadrática. |
Exponencial | La curva más afilada basada en la interpolación exponencial. |
Circular | Sigue un arco circular, de modo que la aceleración es más repentina y la desaceleración más gradual en comparación con Quint o Exponencial . |
Volver | Sobrepasa ligeramente al objetivo, luego se retira al lugar. |
Rebote | Rebota hacia atrás múltiples veces después de alcanzar el objetivo, antes de finalmente asentarse. |
Elástico | Se mueve como si estuviera atado a una banda de goma, superando al objetivo varias veces. |

Estilo de facilidad - Cubo
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Dirección
Enum.EasingDirection define cómo la interpolación de estilo de relajamiento se aplica a un objeto, con un valor predeterminado de Fuera .Tenga en cuenta que un preadolescente con estilo de suavización Lineal no se ve afectado, ya que la interpolación lineal es constante desde el principio hasta finalizar.
Dirección | Descripción |
---|---|
In | El estilo de suavización se aplica en una dirección hacia adelante. |
Fuera | El estilo de suavización se aplica en una dirección inversa. |
En salida | El estilo de suavización se aplica hacia adelante para la primera mitad y en reversa para la segunda mitad. |
Dirección de alivio - InOut
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic, Enum.EasingDirection.InOut)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Animar texto
Puedes mejorar fácilmente la interfaz de usuario basada en texto, como los banners de escena, las instrucciones del jugador y las ventanas de diálogo, con efectos animados.
Efecto de tipowriter
El efecto de "tipo de máquina de escribir" es ideal para TextLabels que cuenten una historia, generen conversaciones de NPC, etc.
Crea un nuevo ModuleScript dentro de ReplicatedStorage .
Renombra el nuevo script AnimateUI .
Pega el siguiente código en el script:
ModuleScript - Animación de UIlocal 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-- Traduzca el texto si es posibleif translator thendisplayText = translator:Translate(guiObject, text)end-- Reemplazar las etiquetas de salto de línea para que el bucle gráfico no pierda esos caracteresdisplayText = displayText:gsub("<br%s*/>", "\n")-- Eliminar etiquetas de texto enriquecido ya que la animación de carácter por carácter romperá las etiquetasdisplayText = displayText:gsub("<[^<>]->", "")-- Establecer texto traducido/modificado en el padreguiObject.Text = displayTextlocal index = 0for first, last in utf8.graphemes(displayText) doindex += 1guiObject.MaxVisibleGraphemes = indextask.wait(delayBetweenChars)endendreturn AnimateUICrea un TextLabel en una ubicación adecuada, como dentro de un ScreenGui padre a StarterGui.
Inserte un nuevo LocalScript como hijo directo de la etiqueta y pegue el siguiente código.Tenga en cuenta que cada mensaje se produce llamando AnimateUI.typeWrite() con parámetros para el objeto padre, la cadena para Saliday el retraso entre caracteres.
Guión locallocal ReplicatedStorage = game:GetService("ReplicatedStorage")local AnimateUI = require(ReplicatedStorage:WaitForChild("AnimateUI"))local label = script.Parent-- Cargar traductor si el juego está localizado--Animación de UI.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)