今天要來講動畫~
在過去的單元,我們再改變一項屬性的時候,多半都是直接對屬性值做更改,但如果今天我想要以比較平滑的方式修改屬性,舉例來說,我不想要直接把物件的位置從A點移動到B點,該如何達到呢?
你可能會想到用for迴圈,但這樣有個壞處是: 你必須要等待這個屬性改變完才執行後續的程式,而這個時候我們就可以用一項服務,叫做TweenService
TweenService的寫法會像這樣
local TweenService = game:GetService("TweenService")
local object = --你要使用此服務的物件
local TweenInformation = TweenInfo.new(--動畫執行的時間, --動畫的樣式, ...)
local goal = {--以字典的方式呈現要改變的屬性}
local Tween = TweenService:Create(object, TweenInformation, goal)
Tween:Play()
上述的用法都已經使用註解解釋,現在來解釋其他函式的用意
TweenInfo: 可以新增一項動畫的屬性,裡面的參數包括 (照順序排)
動畫執行的時間 類型: 數字
動畫的樣式 類型: Enum物件
動畫的方向 類型: Enum物件
重複次數(如果值為-1則會無限重複) 類型: 整數
是否來回 類型: 布林值
延遲時間 類型: 數字
現在我們來做出以下這樣的效果
首先,環境建置你很熟了我就不講,接下來在腳本裡面做好各項定義
local TweenService = game:GetService("TweenService")
local Object = workspace:WaitForChild("Part")
local TI = TweenInfo.new(1, Enum.EasingStyle.Linear)
local Goal = {["Position"] = Vector3.new(-14, 0.5, -5)}
然後定義出Tween,也就是動畫物件,並播放他
local TweenService = game:GetService("TweenService")
local Object = workspace:WaitForChild("Part")
local TI = TweenInfo.new(1, Enum.EasingStyle.Linear)
local Goal = {["Position"] = Vector3.new(-14, 0.5, -5)}
local Tween = TweenService:Create(Object, TI, Goal)
Tween:Play()
通常我們在做動畫屬性的時候,不常會用到後面的屬性,所以在這邊我們只定義時間與樣式
你可能會覺得這樣太麻煩了,所以其實把它寫成同一行也沒有關係
game:GetService("TweenService"):Create(workspace:WaitForChild("Part"), TweenInfo.new(1, Enum.EasingStyle.Linear), {["Position"] = Vector3.new(-14, 0.5, -5)}):Play()