In animazioni, tweening è il processo di generazione di frame intermedi tra due punti chiave in una sequenza.Durante la progettazione di un'interfaccia utente, puoi usare il tweening per passare senza problemi da uno stato all'altro, come:
- Aumentare lentamente la dimensione di un pulsante quando un utente lo seleziona.
- Menù di scorrimento dell'interfaccia utente all'interno e all'esterno degli angoli dello schermo.
- Animare gradualmente una barra della salute tra due larghezze quando un utente riceve un aumento della salute.
Adolescenti di proprietà singola
Posizione
Per passare alla posizione di un : :
- Imposta il AnchorPoint per l'oggetto.
- Passa un TweenInfo e la posizione target a TweenService:Create() .
- Gioca con il tween con Tween:Play() .
Il seguente snippet di codice sposta un ImageLabel all'interno di un ScreenGui all'esatto centro dello schermo:
UI Tween - Posizione
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()
Dimensioni
Per ridurre la dimensione di un :
- Aggiungi un UIAspectRatioConstraint al oggetto per mantenere la sua proporzione aspect ratio progettata durante il transito.
- Passa un TweenInfo e la dimensione target a TweenService:Create() .
- Gioca con il tween con Tween:Play() .
Il seguente snippet di codice scala un ImageLabel all'interno di un ScreenGui a 40% della larghezza o dell'altezza dello schermo (che sia più piccola) dal punto di ancoraggio centrale dell'oggetto:
UI Tween - Dimensione
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()
Rotazione
Per passare la rotazione di un :
- Imposta il AnchorPoint per l'oggetto da ruotare attorno.
- Determina il bersaglio Rotation per l'oggetto.
- Passa un TweenInfo e la rotazione target a TweenService:Create() .
- Gioca con il tween con Tween:Play() .
UI Tween - Dimensione
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()
Trasparenza
Diverse proprietà controllano la trasparenza dell'interfaccia utente, a seconda del inserisci / scrividi oggetto.Puoi passare attraverso ciascuna di queste proprietà individualmente o combinarle attraverso un passaggio multi-proprietà.In alternativa, puoi aumentare la trasparenza generale di un oggetto posizionandolo all'interno di un CanvasGroup e tweenando il GruppoGroupTransparency.
UI Tween - Trasparenza dell'immagine
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 - Trasparenza del gruppo 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()
Colore
Diverse proprietà controllano il colore dell'interfaccia utente, a seconda del inserisci / scrividi oggetto.Puoi passare attraverso ciascuna di queste proprietà individualmente o combinarle attraverso un passaggio multi-proprietà.In alternativa, puoi bilanciare il colore complessivo di un oggetto posizionandolo all'interno di un CanvasGroup e bilanciando il Gruppodi GroupColor3.
UI Tween - Colore dell'immagine
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 - Colore del gruppo 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()
Tratto
Diverse proprietà controllano i bordi dell'interfaccia utente, a seconda del inserisci / scrividi oggetto.
In alternativa, puoi applicare un UIStroke figlio e tween la sua spessore, colore e/o trasparenza.
Oggetto UI | Proprietà |
---|---|
UIStroke | Color , Thickness , Transparency |
UI Tween - Colore e spessore dell'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()
Adolescenti multi-proprietà
Puoi combinare qualsiasi dei adolescenti di proprietà singola in adolescenti più complessi passando più proprietà target a TweenService:Create() , ad esempio posizione + rotazione o dimensione + trasparenza .
UI Tween - Posizione e rotazione
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 - Dimensione e Trasparenza
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()
Sequenze di mezzo
Puoi incatenare le animazioni dell'interfaccia gemellatiper accadere una dopo l'altra giocando ai successivi adolescenti sull'evento Completed precedente dell'adolescente.Ad esempio, il seguente script sposta un oggetto al centro dello schermo, quindi lo ruota di 45°.
Sequenza di transizione 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})
-- Inizialmente riproduci la posizione gemellati
positionTween:Play()
-- Riproduci la rotazione tween alla fine della rotazione della posizione
positionTween.Completed:Connect(function()
rotationTween:Play()
end)
Opzioni di alleggerimento
Usando le opzioni di alleggerimento di , puoi controllare lo stile di alleggerimento e la direzione di animazioni UI.
Stile
Enum.EasingStyle imposta il tasso di interpolazione dall'inizio alla Terminare. Per impostazione predefinita, lo stile di alleggerimento è impostato su Enum.EasingStyle.Quad .
Stile | Descrizione |
---|---|
Lineare | Si muove a una velocità costante. |
Cosine | La velocità è determinata da un'onda sine per una lieve azione di allentamento. |
Quadro | Simile a Sine ma con una curva leggermente più acuta basata sull'interpolazione (di stringhe)quadratica. |
Cubico | Simile a Quad ma con una curva leggermente più acuta basata sull'interpolazione (di stringhe)cubica. |
Quarto | Simile a Cubico ma con una curva ancora più acuta basata sull'interpolazione (di stringhe)quadratica. |
Quinto | Simile a Quarto ma con una curva ancora più acuta basata sull'interpolazione (di stringhe)quintica. |
Esponenziale | La curva più acuta basata sull'interpolazione interpolazione (di stringhe). |
Circolare | Segue un arco circolare, in modo che l'accelerazione sia più improvvisa e la decelerazione più graduale rispetto a Quint o Esponenziale . |
Indietro | Supera leggermente il bersaglio, quindi ritorna al suo Posto. |
Rimbalzo | Rimbalza all'indietro più volte dopo aver raggiunto il bersaglio, prima di essere infine seduto. |
Elastico | Si muove come se fosse attaccato a una banda di gomma, superando il bersaglio più volte. |

Stile di facilitazione - Cubico
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Direzione
Enum.EasingDirection definisce come l'interpolazione di stile di alleggerimento si applichi a un oggetto, con un predefinito di Fuori .Si noti che un tween con lo stile di alleggerimento Lineare non è interessato, poiché l'interpolazione lineare è costante dall'inizio alla Terminare.
Direzione | Descrizione |
---|---|
In | Lo stile di alleggerimento si applica in una direzione avanti. |
Fuori | Lo stile di allentamento si applica in una direzione inversa. |
InOut | Lo stile di alleggerimento si applica in avanti per la prima metà e inversamente per la seconda metà. |
Direzione di allentamento - InOut
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic, Enum.EasingDirection.InOut)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Animare il testo
Puoi facilmente migliorare l'interfaccia utente basata sul testo, come banner di cutscene, istruzioni del giocatore e prompt, con effetti animati.
Effetto della macchina da scrivere
L'effetto "macchina da scrivere" è ideale per TextLabels quelli che raccontano una storia, producono conversazioni NPC, ecc.
Crea una nuova ModuleScript all'interno di ReplicatedStorage .
Rinomina lo script nuovo AnimateUI .
Incolla il seguente codice nello script:
ModuleScript - AnimazioneUIlocal 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-- Tradurre il testo se possibileif translator thendisplayText = translator:Translate(guiObject, text)end-- Sostituisci i tag di interruzione della linea in modo che il ciclo di grafemi non perda quei caratteridisplayText = displayText:gsub("<br%s*/>", "\n")-- Rimuovi i tag RichText poiché l'animazione char-by-char distruggerà i tagdisplayText = displayText:gsub("<[^<>]->", "")-- Imposta il testo tradotto/modificato sul parentguiObject.Text = displayTextlocal index = 0for first, last in utf8.graphemes(displayText) doindex += 1guiObject.MaxVisibleGraphemes = indextask.wait(delayBetweenChars)endendreturn AnimateUICrea un TextLabel in una posizione adeguata, come all'interno di un ScreenGui genitori a StarterGui .
Inserisci un nuovo LocalScript come figlio diretto dell'etichetta e pasta nel seguente codice.Nota che ogni messaggio viene generato chiamando AnimateUI.typeWrite() con parametri per l'oggetto padre, la stringa da Outpute il ritardo tra i caratteri.
Script localelocal ReplicatedStorage = game:GetService("ReplicatedStorage")local AnimateUI = require(ReplicatedStorage:WaitForChild("AnimateUI"))local label = script.Parent-- Carica il traduttore se il gioco è localizzato--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)