En animations, l'animation est le processus de génération de cadres intermédiaires entre deux points clés dans une séquence.Lors de la conception d'une interface utilisateur, vous pouvez utiliser le transitionnement pour transiter doucement d'un état à un autre, comme :
- Augmentation progressive de la taille d'un bouton lorsqu'un utilisateur le sélectionne.
- Menus d'interface glissants à l'intérieur et à l'extérieur des bords de l'écran.
- Animer progressivement une barre de santé entre deux largeurs lorsqu'un utilisateur reçoit un boost de santé.
Adolescents à une seule propriété
Position
Pour passer la position de GuiObject :
- Définissez le AnchorPoint pour l'objet.
- Passez un TweenInfo et la position cible à TweenService:Create().
- Jouez avec l'adolescent avec Tween:Play() .
Le fragment de code suivant déplace un ImageLabel à l'intérieur d'un ScreenGui au centre exact de l'écran :
Tween d'interface utilisateur - Position
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()
Taille
Pour diviser la taille de une GuiObject :
- Attachez un UIAspectRatioConstraint à l'objet pour maintenir sa proportion aspect conçue lors du passage à l'adolescence.
- Passez un TweenInfo et la taille cible à TweenService:Create().
- Jouez avec l'adolescent avec Tween:Play() .
Le fragment de code suivant met à l'échelle un ImageLabel dans une ScreenGui à 40% de la largeur ou de la hauteur de l'écran (cela qui est le plus petit) à partir du point d'ancrage du centre de l'objet :
Tween d'interface utilisateur - Taille
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()
Rotation
Pour faire pivoter la rotation d'un GuiObject :
- Définissez le AnchorPoint pour l'objet à tourner autour.
- Déterminez la cible Rotation pour l'objet.
- Passez un TweenInfo et la rotation cible à TweenService:Create().
- Jouez avec l'adolescent avec Tween:Play() .
Tween d'interface utilisateur - Taille
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()
透明ité transparence
Plusieurs propriétés contrôlent la transparence de l'interface utilisateur, en fonction du taperd'objet.Vous pouvez faire varier chacune de ces propriétés individuellement ou combiner à travers une transition multiple de propriété .Alternativement, vous pouvez modifier la transparence globale d'un objet en le plaçant à l'intérieur d'un CanvasGroup et en transférant le groupe GroupTransparency.
UI Tween - Transparence de l'image
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 - Transparence du groupe de toile
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()
Couleur
Plusieurs propriétés contrôlent la couleur de l'interface utilisateur, en fonction du taperd'objet.Vous pouvez faire varier chacune de ces propriétés individuellement ou combiner à travers une transition multiple de propriété .Alternativement, vous pouvez atténuer la couleur globale d'un objet en le plaçant à l'intérieur d'un CanvasGroup et en atténuant la couleur du groupe GroupColor3.
Objet d'interface utilisateur | Propriétés |
---|---|
Frame | BackgroundColor3 , BorderColor3 |
TextLabel | BackgroundColor3 , BorderColor3 , TextColor3 , TextStrokeColor3 |
TextButton | BackgroundColor3 , BorderColor3 , TextColor3 , TextStrokeColor3 |
ImageLabel | BackgroundColor3 , BorderColor3 , ImageColor3 |
ImageButton | BackgroundColor3 , BorderColor3 , ImageColor3 |
UI Tween - Couleur de l'image
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 - Couleur du groupe de toile
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()
Courbe
Plusieurs propriétés contrôlent les bordures de l'interface utilisateur, en fonction du taperd'objet.
Alternativement, vous pouvez appliquer un enfant UIStroke et tweener sa taille, sa couleur et/ou sa transparence.
Objet d'interface utilisateur | Propriétés |
---|---|
UIStroke | Color , Thickness , Transparency |
UI Tween - Couleur et épaisseur du contour de l'interface utilisateur
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()
Adolescents à plusieurs propriétés
Vous pouvez combiner n'importe lequel des adolescents à une seule propriété dans des adolescents plus complexes en passant plusieurs propriétés cibles à TweenService:Create() , par exemple position + rotation ou taille + transparence .
Interface utilisateur adolescente - Position et rotation
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()
Interface utilisateur adolescente - Taille et transparence
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()
Séquences d'adolescent
Vous pouvez relier des animations d'interface utilisateur pour se produire les unes après les autres en jouant des tweens suivants sur l'événement du précédent tween Completed.Par exemple, le script suivant déplace un objet au centre de l'écran, puis le fait pivoter de 45°.
Séquence d'adolescent 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})
-- Jouer initialement la position tween
positionTween:Play()
-- Jouer une rotation d'écran à la fin de la tweende position
positionTween.Completed:Connect(function()
rotationTween:Play()
end)
Options d'allègement
En utilisant les options d'assouplissement de , vous pouvez contrôler l'assouplissement du style et de la direction des animations d'interface utilisateur.
Style
Enum.EasingStyle définit le taux d'interpolation du début à terminer. Par défaut, le style de relâchement est défini à Enum.EasingStyle.Quad .
Style | Avertissement |
---|---|
Linéaire | Se déplace à une vitesse constante. |
Cosine | La vitesse est déterminée par une onde sinusoïdale pour un mouvement de relâchement doux. |
Quadruple | Semblable à Sine mais avec une courbe légèrement plus aiguisée basée sur une interpolation quadratique. |
Cubique | Semblable à Quad mais avec une courbe légèrement plus aiguisée basée sur une interpolation cubique. |
Quart | Semblable à Cubique mais avec une courbe encore plus aiguisée basée sur une interpolation quadratique. |
Quinzaine | Semblable à Quart mais avec une courbe encore plus aiguisée basée sur une interpolation quintique. |
Ex exponentielle | La courbe la plus aiguisée basée sur une interpolation exponentielle. |
Circulaire | Suit un arc circulaire, de sorte que l'accélération est plus soudaine et la décélération plus graduelle par rapport à Quint ou exponentielle . |
Retour | Dépasse légèrement la cible, puis revient à sa emplacement. |
Rebond | Rebondit en arrière plusieurs fois après avoir atteint la cible, avant de s'installer finalement. |
Élastique | Se déplace comme si attaché à une bande en caoutchouc, dépassant la cible plusieurs fois. |

Style d'allègement - Cubique
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Diréction
définit comment l'interpolation du style de relâchement s'applique à un objet, avec une valeur par défaut de Out .Remarquez qu'un adolescent avec un style d'amortissement linéaire Linear n'est pas affecté, car l'interpolation linéaire est constante du début à terminer.
Diréction | Avertissement |
---|---|
In | Le style d'assouplissement s'applique dans une direction avant. |
Hors | Le style d'assouplissement s'applique dans une direction inverse. |
En sortie | Le style d'assouplissement s'applique en avant pour la première moitié et en arrière pour la deuxième moitié. |
Direction d'allègement - InOut
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic, Enum.EasingDirection.InOut)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
Animer le texte
Vous pouvez facilement améliorer l'interface utilisateur basée sur le texte, telle que les bannières de scène coupée, les instructions du joueur et les invites, avec des effets animés.
Effet de la machine à écrire
L'effet "machine à écrire" est idéal pour TextLabels ceux qui racontent une histoire, produisent des conversations de PNJ, etc.
Créez un nouveau ModuleScript dans ReplicatedStorage .
Renommer le nouveau script AnimateUI .
Collez le code suivant dans le script :
ModuleScript - Animation d'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-- Translatez le texte si possibleif translator thendisplayText = translator:Translate(guiObject, text)end-- Remplacer les balises de rupture de ligne afin que la boucle graphique ne manque pas ces caractèresdisplayText = displayText:gsub("<br%s*/>", "\n")-- Supprimer les balises RichText car l'animation char-by-char brisera les balisesdisplayText = displayText:gsub("<[^<>]->", "")-- Définir un texte traduit/modifié sur le parentguiObject.Text = displayTextlocal index = 0for first, last in utf8.graphemes(displayText) doindex += 1guiObject.MaxVisibleGraphemes = indextask.wait(delayBetweenChars)endendreturn AnimateUICréez un TextLabel à un endroit approprié, comme dans un ScreenGui parenté à StarterGui .
Insérez un nouveau LocalScript comme enfant direct du label et collez le code suivant.Notez que chaque message est produit en appelant AnimateUI.typeWrite() avec des paramètres pour l'objet parent, la chaîne à sortieet le délai entre les caractères.
Lecteur localScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local AnimateUI = require(ReplicatedStorage:WaitForChild("AnimateUI"))local label = script.Parent-- Charger le traducteur si le jeu est localisé--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)