En la animaciones, tweening es el proceso de generación de marcos intermedios entre dos puntos clave en una secuencia. Cuando diseña una interfaz de usuario, puede usar tweening para transitar un GuiObject suavemente desde un estado a otro, como:
- Aumentar lentamente el tamaño de un botón cuando un usuario lo selecciona.
- Menús de UI deslizantes dentro y fuera de los límites de la pantalla.
- Animación de salud progresiva entre dos alturas cuando un usuario recibe un impulso de salud.
Adolescentes de una propiedad
Posición
Para ajustar la posición de un GuiObject :
- Establece el AnchorPoint para el objeto.
- Determine UDim2 coordenadas para la posición de objetivo del objeto, utilizando los parámetros de escala Datatype.UDim2 en lugar de valores de píxeles exactos para que el objeto tweens al centro exacto de la pantalla.
- Pasa un TweenInfo y la posición de destino a TweenService:Create() .
- Juega con Tween:Play() .
El siguiente código de muestra mueve un ImageLabel dentro de un ScreenGui para el centro exacto de la pantalla:
IU Tween - 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 ajustar el tamaño Class.GuiObject :
- Determine UDim2 coordenadas para el tamaño del objetivo, usando los parámetros de escala Datatype.UDim2 en lugar de valores de píxeles exactos para que el objeto tweens a un porcentaje relativo del tamaño de la pantalla.
- Adiciona un UIAspectRatioConstraint al objeto para mantener su aspecto diseñado cuando se ajusta.
- Pasa un TweenInfo y el tamaño de la etiqueta a TweenService:Create() .
- Juega con Tween:Play() .
El siguiente código de ejemplo escala un ImageLabel dentro de un ScreenGui para 40% de la altura o ancho de la pantalla (que sea menor) desde el punto de anclaje del objeto:
Interfaz de usuario 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 ajustar la rotación de un GuiObject :
- Establece el AnchorPoint para que gire el objeto.
- Determine el objetivo Rotation para el objeto.
- Pasa un TweenInfo y la rotación del objetivo a TweenService:Create() .
- Juega con Tween:Play() .
Interfaz de usuario 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 de propiedades, dependiendo del introducirde objeto. Puedes ajustar cada una de estas propiedades individualmente o combinadas a través de un ajuste mult propiedad . Alternativamente, puedes ajustar la transparencia general del objeto colocándolo dentro de un CanvasGroup y ajustando el grupo de su Class.CanvasGroup.GroupTransparency
IU 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()
IU Tween - Transparencia del 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()
Color
Multiple propiedades control UI color, dependiendo del introducirde objeto. Puedes tween cada una de estas propiedades individualmente o combinado a través de un multi-propiedad tween . Alternativamente, puedes tween un color de objeto en general por colocarlo dentro de un CanvasGroup y tweening el grupo's GroupColor3 .
Objeto de Interfaz de Usuario | Propiedades |
---|---|
Frame | BackgroundColor3 , BorderColor3 |
TextLabel | BackgroundColor3 , BorderColor3 , TextColor3 , 0> Class.TextLabel.TextStrokeColor3|TextStrokeColor30> |
TextButton | BackgroundColor3 , BorderColor3 , TextColor3 , 0> Class.TextButton.TextStrokeColor3|TextStrokeColor30> |
ImageLabel | BackgroundColor3 , BorderColor3 , ImageColor3 |
ImageButton | BackgroundColor3 , BorderColor3 , ImageColor3 |
IU 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()
IU Tween - Color de 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()
Golpe
Múltiples propiedades controlan los límites de las interfaces de usuario, dependiendo del introducirde objeto.
Objeto de Interfaz de Usuario | Propiedades |
---|---|
Frame | BorderSizePixel , BorderColor3 |
TextLabel | BorderSizePixel , BorderColor3 , TextStrokeColor3 , 0> Class.TextLabel.TextStrokeTransparency|TextStrokeTransparency0> |
TextButton | BorderSizePixel , BorderColor3 , TextStrokeColor3 , 0> Class.TextButton.TextStrokeTransparencyTransparency0> |
ImageLabel | BorderSizePixel , BorderColor3 |
ImageButton | BorderSizePixel , BorderColor3 |
Alternativamente, puede aplicar un UIStroke hijo y tener su grosor, color y/o transparencia.
Objeto de Interfaz de Usuario | Propiedades |
---|---|
UIStroke | Color , Thickness , Transparency |
UI Tween - Color y grosor de UIStroke
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 propiedad múltiple
Puedes combinar cualquiera de los tweens de propiedad única en más complejos tweens al pasar varias propiedades de objetivo a TweenService:Create(), por ejemplo, posición + rotación o 2>tamaño + transparencia2>.
IU Tween - 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()
Interfaz de usuario 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 Tween
Puedes sincronizar las animaciones de la interfaz de usuario para que ocurran una después de la otra jugando a los siguientes niños en el evento de Completed del niño anterior. Por ejemplo, el siguiente script mueve un objeto al centro de la pantalla, luego lo gira por 45°.
Secuencia de Interfaz de Usuario de Tween
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 jugar posición intermediación/interpolación de movimiento
positionTween:Play()
-- Reproducir la rotación de la tween al completar la intermediación/interpolación de movimientode posición
positionTween.Completed:Connect(function()
rotationTween:Play()
end)
Opciones de fácil acceso
Al usar las opciones de fácil acceso de TweenInfo, puede controlar el estilo de fácil acceso y la dirección de la animación de la interfaz de usuario.
Estilo
Enum.EasingStyle establece la tasa de interpolación desde el principio hasta finalizar. Por defecto, el estilo de suavizado está configurado como Enum.EasingStyle.Quad .
Estilo | Descripción |
---|---|
Lineal | Se mueve a una velocidad constante. |
Sina | La velocidad se determina por una onda de sín para un movimiento de fácil movimiento. |
Quadro | Similar a Sin pero con una curva ligeramente más empinada basada en la interpolación cuadrática. |
Cubo | Similar a Quad pero con una curva ligeramente más afilada basada en la interpolación cubica. |
Quarto | Similar a Cubic pero con una curva aún más afilada basada en la interpolación cuántica. |
Quintal | Similar a Quart pero con una curva aún más afilada basada en la interpolación cuántica. |
Exponencial | La curva más afilada basada en la interpolación exponencial. |
Circular | Sigue un arco circular, por lo que la aceleración es más brusca y la desaceleración más gradual en comparación con Quint o Exponencial . |
Regresar a la página principal | Dispara un poco el objetivo, luego se pone en su lugar. |
Rebotece | Rebota hacia atrás varias veces después de alcanzar el objetivo, antes de finalmente establecerse. |
Elástico | Se mueve como si estuviera conectado a una cinta de goma, disparando varias veces al objetivo. |
Estilo de suavización - Cubo
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Dirección
Enum.EasingDirection define cómo se aplica el estilo de interpolación fácil a un objeto, con un valor predeterminado de Salir . Nota que un tween con estilo de interpolación 0>lineal0> no está afectado, ya que el estilo de interpolación lineal es constante desde el principio hasta finalizar.
Dirección | Descripción |
---|---|
En | El estilo de alivio se aplica en una dirección hacia delante. |
Salida | El estilo de alivio se aplica en una dirección contraria. |
InOut | El estilo de alivio se aplica hacia delante para la primera mitad y al revés para la segunda mitad. |
Dirección de fácil acceso - InOut
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic, Enum.EasingDirection.InOut)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Texto de Animación
Puede mejorar fácilmente la interfaz de usuario basada en texto, como los banners de cutscene, las instrucciones del jugador y las solicitudes, con efectos animados.
Efecto de escribidor mecánico
El efecto de "tipo escribidor" es ideal para TextLabels que cuentan una historia, salen de diálogo de NPC, etc.
Crear un nuevo ModuleScript dentro de Almacenamiento Replicado .
Renombrar el nuevo script AnimateUI .
Pega el siguiente código en el script:
ModuleScript - Interfaz de usuario de animaciónlocal 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-- Traducir el texto si es posibleif translator thendisplayText = translator:Translate(guiObject, text)end-- Reemplace los elementos de la línea para que el ciclo de gráficos no se pierda esos personajesdisplayText = displayText:gsub("<br%s*/>", "\n")-- Elimina las etiquetas RichText ya que la animación de char-by-char 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 de StarterGui .
Inserta un nuevo LocalScript como hijo directo de la etiqueta y pegar en el siguiente código. Nota que cada mensaje es un resultado al llamar AnimateUI.typeWrite() con parámetros para el objeto padre, la cadena para Saliday el retraso entre caracteres.
Script locallocal ReplicatedStorage = game:GetService("ReplicatedStorage")local AnimateUI = require(ReplicatedStorage:WaitForChild("AnimateUI"))local label = script.Parent-- Cargar traductor si el juego está 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)