แอนิเมชัน, tweening เป็นกระบวนการการสร้างเฟรมช่วงกลางระหว่างสองจุดสำคัญในตัวอักษร เมื่อออกแบบ UI คุณสามารถใช้ tweening เพื่อเปลี่ยน GuiObject ได้อย่างราบรื่นจากสถานะหน
- เพิ่มขนาดปุ่มโดยลื่นเมาส์เมื่อผู้ใช้เลือก
- เมนู UI เลื่อนไปมาในแนวเฉียงของหน้าจอ
- การอนิเมชันเรื่อย ๆ ของแถบสุขภาพระหว่างความกว้างสองค่าเมื่อผู้ใช้ได้รับการเพิ่มสุขภาพ
ทวีนส์อสุนัข
ตําแหน่ง
เพื่อปรับ ตําแหน่ง ของ a GuiObject :
- ตั้งค่า AnchorPoint สำหรับวัตถุ
- ผ่าน a TweenInfo และตำแหน่งเป้าหมายไปยัง TweenService:Create()
- เล่นทวีนกับ Tween:Play()
ตัวอย่างโค้ดต่อไปนี้ย้าย ImageLabel ภายใน ScreenGui ไปยังศูนย์กลางของหน้าจออย่างถูกต้อง:
UI 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 tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Position = targetPosition})tween:Play()
ขนาด
เพื่อปรับขนาด ของ Class.GuiObject :
- แนบ UIAspectRatioConstraint ไว้กับวัตถุเพื่อให้ความสัมพันธ์ระหว่างมุมมองของมันเมื่อปรับแต่ง
- ผ่าน TweenInfo และขนาดเป้าหมายเป็น TweenService:Create()
- เล่นทวีนกับ Tween:Play()
ตัวอย่างโค้ดต่อไปนี้ขยาย Class.ImageLabel ภายใน Class.ScreenGui เพื่อ 40% ของความกว้างหรือความสูงของหน้าจอ (ซึ่งเป็นสิ่งที่เล็กกว่า) จากจุดศูนย์กลางของตัวอังเครื่องจักร:
UI 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 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()
การหมุน
เพื่อปรับ การหมุน ของ GuiObject :
- ตั้งค่า AnchorPoint สำหรับวัตถุเพื่อหมุนรอบ
- กำหนดเป้าหมาย Rotation สำหรับวัตถุ
- ผ่าน a TweenInfo และการหมุนเป้าหมายไปยัง TweenService:Create()
- เล่นทวีนกับ Tween:Play()
UI 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 targetRotation = 45local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Rotation = targetRotation})tween:Play()
ความโปร่งใส
หน้าตา UI การควบคุมของหลายองค์กร ขึ้นอยู่กับประเภทของวัตถุ คุณสามารถปรับแต่งความโปร่งใสของ UI แต่ละรายการได้โดยผ่าน UI ทวีคูณหลายองค์ก
UI 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")local targetTransparency = 0.8local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {ImageTransparency = targetTransparency})tween:Play()
UI Tween - ความโปร่งใสของกลุ่มบนพื้น
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()
สี
UI การควบคุมสถานะทรงตัวอย่างหลายรายการสีของเครื่องมือควบคุมสถานะทรงตัวอย่างหลายรายการขึ้นอยู่กับประเภทของวัตถุ คุณสามารถปรับแต่งสีข
วัตถุ UI | สมบัติ |
---|---|
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 |
UI 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")local targetColor = Color3.fromRGB(255, 0, 0)local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {ImageColor3 = targetColor})tween:Play()
UI Tween - สีกลุ่มบนพื้น
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()
เข็ม
UI พิมพ์
วัตถุ UI | สมบัติ |
---|---|
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 |
นอกจากนี้คุณยังสามารถใช้ลูกชาย UIStroke และปรับแต่งความหนาแน่น สี และ/หรือความโปร่งใสของมัน
วัตถุ UI | สมบัติ |
---|---|
UIStroke | Color , Thickness , Transparency |
UI Tween - 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()
ทวีนสมบัติของหลาย
คุณสามารถผสานใด ๆ ของ เด็กผู้ใหญ่ของคุณเดี่ยว ในเด็กผู้ใหญ่ที่ซับซ้อนมากขึ้นด้วยการส่งมาตรฐานต่างๆ ให้กับ TweenService:Create() เช่น การหมุน หรือ ขนาด
UI 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 = 45local tweenInfo = TweenInfo.new(2)local tween = TweenService:Create(object, tweenInfo, {Position = targetPosition, Rotation = targetRotation})tween:Play()
UI 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 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()
ลำดับการเปลี่ยนแปลง
คุณสามารถเชื่อมโยงแอนิเมชัน UI เพื่อเกิดขึ้นหนึ่งหลังอื่นโดยการเล่นวัยรุ่นต่อไปในกิจกรรม Completed ตัวอัปรุกตัวอันนี้ สกริปต์ต่อไปนี้ย้ายวัตถุไปยังศูนย์ของ
ลำดับการเปลี่ยนแปลง 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})
-- เล่นตำแหน่งเริ่มต้น
positionTween:Play()
-- เล่นการหมุนเมื่อสำเร็จการหมุนตำแหน่ง
positionTween.Completed:Connect(function()
rotationTween:Play()
end)
ตั้งค่าการปลด
โดยใช้ตัวเลือกในการปรับปรุง TweenInfo คุณสามารถควบคุมสไตล์ style และทิศทาง direction ของอนิเมชั่น UI
สไตล์
Enum.EasingStyle ปิดโดยปกติอัตราการแปลงจะตั้งค่าเป็น Enum.EasingStyle.Quad
สไตล์ | คำอธิบาย |
---|---|
เส้นสาย | เคลื่อนที่ด้วยความเร็วที่เท่าเทียมกัน |
ไซน์ | ความเร็วถูกกำหนดโดยคลื่น sin สำหรับการเคลื่อนไหวที่อ่อนโยน |
Quad | คล้ายกับ ไซน์ แต่มีเส้นโค้งที่คมขึ้นเล็กน้อยตามแนวของการแปลงของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของของ |
ลูกบาศก์ | คล้ายกับ Quad แต่มีเส้นโค้งที่คมขึ้นเล็กน้อยตามการแปลง cubic |
Quart | คล้ายกับ คิวบิค แต่มีเส้นโค้งที่คมขึ้นอยู่กับการแปลงของ quartic |
ควอนต์ | คล้ายกับ Quart แต่มีความโค้งเคียวที่คมขึ้นอยู่กับการแปลงของ quintic |
เอกซ์โพเนียล | โค้งที่แหลมคมที่สุดขึ้นอยู่กับการแปลงทวีเข็น |
วงกลม | ติดตามโคจรวงกลม, ให้ความเร่งเป็นความเร่งมากขึ้นและความเร่งเป็นความเร่งอย่างช้าเมื่อเปรียบเทียบกับ Quint หรือ Exponential หรือไม่ |
กลับ | ยิงเล็กน้อยไปยังเป้าหมายแล้วแบ็คอันที่ตำแหน่ง |
ตีกลับ | ตีกลับหลายครั้งหลังจากถึงเป้าหมาย, ก่อนที่จะตั้งค่าในที่สุด. |
ยืดหยุ่น | เคลื่อนที่เหมือนว่าติดอยู่กับเข็มขัดยาง, ยิงเป้าหมายหลายครั้ง. |
สไตล์การลดลง - ลูกบาศก์
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
ทิศทาง
Enum.EasingDirection กำหนดวิธีการที่ เส้นสายการปรับปรุง ใช้กับวัตถุโดยมีค่าเริ่มต้นของ ออก โปรดทราบว่าการปรับปรุงด้วยวิธีการปรับปรุง 0>เส้นสาย
ทิศทาง | คำอธิบาย |
---|---|
ใน | สไตล์การปลดปล่อยใช้ในทิศทางของการเดินหน้า |
ออก | สไตล์การปลดปล่อยใช้ในทิศทางที่กลับกัน |
InOut ออก | สไตล์การปลดปล่อยใช้ได้กับครึ่งแรกและในทิศทางกลับกันสำหรับครึ่งที่สอง |
เอาออก - InOut
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Cubic, Enum.EasingDirection.InOut)local tween = TweenService:Create(object, tweenInfo, {Rotation = 45})
การแสดงผลข้อความ
คุณสามารถปรับปรุง UI ขึ้นได้อย่างง่ายดาย เช่นเมนู cutscene และคำแนะนำของผู้เล่น และปุ่มเรียกร้องได้ด้วยเอฟเฟกต์อนิเมชัน
เอฟเฟ็กต์ของ Typewriter
เอฟเฟกต์ "นาฬิกาพิมพ์" เหมาะสำหรับ TextLabels ที่บอกเรื่องราว ส่งมุมมอง NPC ต่างๆ
สร้าง ModuleScript ใหม่ภายใน ReplicatedStorage
เปลี่ยนชื่อสคริปต์ใหม่ AnimateUI
วางรหัสต่อไปนี้ในสคริปต์:
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-- แปลข้อความถ้าเป็นไปได้if translator thendisplayText = translator:Translate(guiObject, text)end-- แทนที่แท็กขอบเส้นเพื่อให้แสดงผลของแกรฟเมไม่พลาดตัวละครเหล่านี้displayText = displayText:gsub("<br%s*/>", "\n")-- ลบแท็ก RichText เนื่องจากการแสดงผาสมัครเขียนของ char-by-char จะทำให้แท็กถูกแบ่งdisplayText = displayText:gsub("<[^<>]->", "")-- ตั้งค่าข้อความแปล/แก้ไขบนพ่อguiObject.Text = displayTextlocal index = 0for first, last in utf8.graphemes(displayText) doindex += 1guiObject.MaxVisibleGraphemes = indextask.wait(delayBetweenChars)endendreturn AnimateUIสร้าง TextLabel ในสถานที่ที่เหมาะสม เช่น ใน ScreenGui ที่มีลูกโดย StarterGui
ใส่ Class.LocalScript ใหม่เป็นลูกชายที่แสดงผลโดยตรงของแท็งค์และวางในรหัสต่อไปนี้ โปรดทราบว่าแต่ละข้อความนำเสนอโดยการเรียก AnimateUI.typeWrite() ด้วยพารามิเตอร์สำหรับตัวประกอบของ
สคริปต์ท้องถิ่นlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local AnimateUI = require(ReplicatedStorage:WaitForChild("AnimateUI"))local label = script.Parent-- โหลดผู้แปลภาษาถ้าเกมอยู่ในภาษาท้องถิ่น--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)