AnimationTrack

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立

控制 AnimationController 上的動畫播放。這個對象無法創建,而是由 Animator:LoadAnimation() 方法返回。

概要

屬性

  • 唯讀
    未複製
    平行讀取

    用於創建此 AnimationAnimationTrack 對象。

  • 唯讀
    未複製
    平行讀取

    一個只有閱取時返回 true 的屬性,當 AnimationTrack 正在播放。

  • 唯讀
    未複製
    平行讀取

    只讀取的屬性,返回 AnimationTrack 的長度(以秒為單位)。這將返回 0 直到動畫載入完畢,因此可能無法立即使用。

  • 平行讀取

    設定動畫在完成後會重複的程度。如果在播放結果時變更,將在動畫完成後生效。

  • 設置 AnimationTrack 的優先權。依據這是設置的,在一次播放多個動畫時,這個屬性會看起來這個屬性來決定哪個 Keyframe 將在一起播放。

  • 唯讀
    未複製
    平行讀取

    Class.AnimationTrack 的速度是一個只有讀取的屬性,可以提供 AnimationTrack 的當前播放速度。這有一個預設值為 1 的速度值。當速度與 1 相等時,動畫所需的時間會相等於 AnimationTrack.Length (以秒計)。

  • 未複製
    平行讀取

    返回 AnimationTrack 的位置在秒鐘內,玩源動畫。可以設置跳過動畫的特定時間。

  • 唯讀
    未複製
    平行讀取

    只有讀取的屬性,其中包含 AnimationTrack 目前的重量。它的預設值為 1。

  • 唯讀
    未複製
    平行讀取

    只讀取 Class.AnimationTrack 的現有重量。

方法

活動

屬性

Animation

唯讀
未複製
平行讀取

用於創建此 AnimationAnimationTrack 對象。若要創建 AnimationTrack,您必須將 2>Class.Animation2> 對象載入到 5>Class.AnimationController5> 使用 8>Class.Animator:LoadAnimation()8> 方法。

範例程式碼

Listen For New Animations

local function listenForNewAnimations(humanoid)
humanoid.AnimationPlayed:Connect(function(animationTrack)
local animationName = animationTrack.Animation.Name
print("Animation playing " .. animationName)
end)
end
local humanoid = script.Parent:WaitForChild("Humanoid")
listenForNewAnimations(humanoid)

IsPlaying

唯讀
未複製
平行讀取

一個只有閱取時返回 true 的屬性,當 AnimationTrack 正在播放。

此屬性可以被開發人員使用來檢查動畫是否已經播放,然後再播放它(因為這會導致重新啟動)。如果開發人員想要獲得所有播放 AnimationTracksHumanoidAnimationController 上,他們應該使用 1>

範例程式碼

AnimationTrack IsPlaying

local function playOrAdjust(animationTrack, fadeTime, weight, speed)
if not animationTrack.IsPlaying then
animationTrack:Play(fadeTime, weight, speed)
else
animationTrack:AdjustSpeed(speed)
animationTrack:AdjustWeight(weight, fadeTime)
end
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playOrAdjust(animationTrack, 1, 0.6, 1)

Length

唯讀
未複製
平行讀取

只讀取的屬性,返回 AnimationTrack 的長度(以秒為單位)。這將返回 0 直到動畫載入完畢,因此可能無法立即使用。

AnimationTrack.Speed 的 Class.AnimationTrack 與 1 相等時,動畫將需要 AnimationTrack (以秒計) 才能完成。

範例程式碼

Playing Animation for a Specific Duration

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)

Looped

平行讀取

此屬性設定動畫在完成後是否重複。如果在播放結果時變更,則會在動畫完成後生效。

Class.AnimationTrack 的內部預設值為動畫編輯器設定的方式。但此屬性可以變更,讓您可以控制遊戲運行時的 AnimationTrack 。 循環也正確處理反向播放的動畫 (AnimationTrack.Speed )。 當第一個關關鍵格框達到

這個屬性允許開發人員有一個循環和非循環的同一個動畫,而不需要上傳兩個版本到 Roblox。

範例程式碼

Animation Looping

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507770453"
local animationTrack = animator:LoadAnimation(animation)
animationTrack.Looped = false
task.wait(3)
animationTrack:Play()
task.wait(4)
animationTrack.Looped = true
animationTrack:Play()
Play AnimationTrack for a Number of Loops

local function playForNumberLoops(animationTrack, number)
animationTrack.Looped = true
animationTrack:Play()
local numberOfLoops = 0
local connection = nil
connection = animationTrack.DidLoop:Connect(function()
numberOfLoops = numberOfLoops + 1
print("loop: ", numberOfLoops)
if numberOfLoops >= number then
animationTrack:Stop()
connection:Disconnect() -- it's important to disconnect connections when they are no longer needed
end
end)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playForNumberLoops(animationTrack, 5)
平行讀取

這個屬性設定了 AnimationTrack 的優先權。依據這個設置,在一次播放多個動畫時,會看到這個屬性來決定哪個 Keyframe 將在一起播放。

Class.AnimationTrack 的優先權設定為 Studio 的 動畫編輯器 發布時的狀態。它使用 Enum.AnimationPriority ,這有 7 個優先級等級:

  1. Action4(最高優先權)
  2. 行動3
  3. Action2
  4. 行動
  5. 移動
  6. 空閒
  7. 核心 (最低優先權)

通過編輯器或此屬性設定動畫優先權,允許多個動畫在不吸擾的情況下播放。當兩個播放動畫指向不同的目標移動同一手臂時, AnimationTrack 以最高優先權顯示。如果兩個動畫都有相同的優先權,動畫軌跡將被用來結合動畫

這個屬性也允許開發者在不同的優先權下播放相同的動畫,而不需要在 Roblox 上傳額外的版本。

Speed

唯讀
未複製
平行讀取

Class.AnimationTrack 的速度是一個只有讀取的屬性,可以提供 AnimationTrack 的當前播放速度。這有一個預設值為 1 的速度值。當速度與 1 相等時,動畫所需的時間會相等於 AnimationTrack.Length (以秒計)。

如果速度已調整,則可以通過將長度乘以速度來計算要播放的軌道所需的時間。速度是一個無量的單位。

速度可以用來連接動畫的長度到不同的遊戲事件(例如重新充能一個能力),而不需要上傳相同動畫的不同變體。

此屬性只閱取,您可以使用 AnimationTrack:AdjustSpeed() 來變更它。

範例程式碼

Animation Speed

local ContentProvider = game:GetService("ContentProvider")
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507770453"
ContentProvider:PreloadAsync({ animation })
local animationTrack = animator:LoadAnimation(animation)
local normalSpeedTime = animationTrack.Length / animationTrack.Speed
animationTrack:AdjustSpeed(3)
local fastSpeedTime = animationTrack.Length / animationTrack.Speed
print("At normal speed the animation will play for", normalSpeedTime, "seconds")
print("At 3x speed the animation will play for", fastSpeedTime, "seconds")
Playing Animation for a Specific Duration

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)

TimePosition

未複製
平行讀取

返回 AnimationTrack 的位置在秒鐘內,玩源動畫。可以設置跳過動畫的特定時間。

時間位置可以設置為瞬間擷取動畫中特定點,但 AnimationTrack 必須正在播放才能執行。它也可以用於 AnimationTrack:AdjustSpeed() 與 Class.AnimationTrack:Freeze 結合,以將動畫設置為所需位置 (由設置速度為 0)。

範例程式碼

Freeze Animation at Position

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Play the animation if it is not playing
animationTrack:Play()
end
-- Set the speed to 0 to freeze the animation
animationTrack:AdjustSpeed(0)
-- Jump to the desired TimePosition
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Play the animation if it is not playing
animationTrack:Play()
end
-- Set the speed to 0 to freeze the animation
animationTrack:AdjustSpeed(0)
-- Jump to the desired TimePosition
animationTrack.TimePosition = (percentagePosition / 100) * animationTrack.Length
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
freezeAnimationAtTime(animationTrack, 0.5)
freezeAnimationAtPercent(animationTrack, 50)

WeightCurrent

唯讀
未複製
平行讀取

當重量設置在 AnimationTrack 時,它不會立即變更,而是從 WeightCurrent 移動到 AnimationTrack.WeightTarget 。這時間會由播放動畫或調整重量所造成的時間來決定。

WeightCurrent 可以與 AnimationTrack.WeightTarget 對比,以確認目標的重量是否已達到所需的重量。注意這些值不應與 == 運算器的平等值,因為這兩個值都是漂浮。要確認 WeightCurrent 是否達到目標重量,請確認這兩個值之間的距離是否足夠小 (請參閱下面的代碼示例)。

動畫重量系統用於確定在同一優先權下播放的 AnimationTracks 是否會被混合在一起。預設重量為一,且不會在任何

範例程式碼

WeightCurrent and WeightTarget

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation1 = Instance.new("Animation")
animation1.AnimationId = "rbxassetid://507770453"
local animation2 = Instance.new("Animation")
animation2.AnimationId = "rbxassetid://507771019"
task.wait(3) -- arbitrary wait time to allow the character to fall into place
local animationTrack1 = animator:LoadAnimation(animation1)
local animationTrack2 = animator:LoadAnimation(animation2)
animationTrack1.Priority = Enum.AnimationPriority.Movement
animationTrack2.Priority = Enum.AnimationPriority.Action
animationTrack1:Play(0.1, 5, 1)
animationTrack2:Play(10, 3, 1)
local done = false
while not done and task.wait(0.1) do
if math.abs(animationTrack2.WeightCurrent - animationTrack2.WeightTarget) < 0.001 then
print("got there")
done = true
end
end

WeightTarget

唯讀
未複製
平行讀取

AnimationTrack.WeightTarget 是一個只讀取的屬性,它將當前重量的 AnimationTrack 的重量設為預設值 1

WeightCurrent 可以與 AnimationTrack.WeightTarget 對比,以確認目標的重量是否已達到所需的重量。注意這些值不應與 == 運算器的平等值,因為這兩個值都是漂浮。要確認 WeightCurrent 是否達到目標重量,請確認這兩個值之間的距離是否足夠小 (請參閱下面的代碼示例)。

動畫重量系統用於確定在同一優先權下播放的 AnimationTracks 是否會被混合在一起。預設重量為一,且不會在任何

範例程式碼

WeightCurrent and WeightTarget

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation1 = Instance.new("Animation")
animation1.AnimationId = "rbxassetid://507770453"
local animation2 = Instance.new("Animation")
animation2.AnimationId = "rbxassetid://507771019"
task.wait(3) -- arbitrary wait time to allow the character to fall into place
local animationTrack1 = animator:LoadAnimation(animation1)
local animationTrack2 = animator:LoadAnimation(animation2)
animationTrack1.Priority = Enum.AnimationPriority.Movement
animationTrack2.Priority = Enum.AnimationPriority.Action
animationTrack1:Play(0.1, 5, 1)
animationTrack2:Play(10, 3, 1)
local done = false
while not done and task.wait(0.1) do
if math.abs(animationTrack2.WeightCurrent - animationTrack2.WeightTarget) < 0.001 then
print("got there")
done = true
end
end

方法

AdjustSpeed

void

此功能會改變動畫的 AnimationTrack.Speed。一個正向的速度會將動畫前進,一個負向的速度會將它倒轉,而 0 則會暫停。

An AnimationTrack 的初始速度設為參數在 AnimationTrack:Play() 。但是跟軌的速度可以在播放時變更,使用 AdjustSpeed 。當速度等於 1 時,跟軌的完成時間會等同於 AnimationTrack.Length (以秒計) 。

調整時,可以由速度乘以長度來計算要播放的軌道所需的時間。速度是一個無法量化的量。

速度可以用來連接動畫的長度到不同的遊戲玩法事件(例如重新充能能力),而不需要上傳相同動畫的不同變體。

參數

speed: number

播放速度將會變更的動畫。

預設值:1

返回

void

範例程式碼

Playing Animation for a Specific Duration

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)
Animation Speed

local ContentProvider = game:GetService("ContentProvider")
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507770453"
ContentProvider:PreloadAsync({ animation })
local animationTrack = animator:LoadAnimation(animation)
local normalSpeedTime = animationTrack.Length / animationTrack.Speed
animationTrack:AdjustSpeed(3)
local fastSpeedTime = animationTrack.Length / animationTrack.Speed
print("At normal speed the animation will play for", normalSpeedTime, "seconds")
print("At 3x speed the animation will play for", fastSpeedTime, "seconds")

AdjustWeight

void

改變動畫的重量,並且由可選的 fadeTime 參數決定它所需的時間,以便達到 AnimationTrack.WeightCurrent 達到 AnimationTrack.WeightTarget

當重量設置在 AnimationTrack 時,它不會立即變更,而是從 WeightCurrent 移動到 AnimationTrack.WeightTarget 。這時間會由播放動畫或調整重量所造成的時間來決定。

WeightCurrent 可以與 AnimationTrack.WeightTarget 對比,以確認目標的重量是否已達到所需的重量。注意這些值不應與 == 運算器的平等值,因為這兩個值都是漂浮。要確認 WeightCurrent 是否達到目標重量,請確認這兩個值之間的距離是否足夠小 (請參閱下面的代碼示例)。

動畫重量系統用於確定 AnimationTracks 在同一優先權下播放時會混合在一起。預設重量是

參數

weight: number

動畫的重量將要變更。

預設值:1
fadeTime: number

動畫在舊重量和新重量之間淡出的時間。

預設值:0.100000001

返回

void

範例程式碼

AnimationTrack Change Weight

local function changeWeight(animationTrack, weight, fadeTime)
animationTrack:AdjustWeight(weight, fadeTime)
local startTime = tick()
while math.abs(animationTrack.WeightCurrent - weight) > 0.001 do
task.wait()
end
print("Time taken to change weight " .. tostring(tick() - startTime))
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
changeWeight(animationTrack, 0.6, 1)

GetMarkerReachedSignal

此功能返回一個 eventAnimationTrack.KeyframeReached 事件相似,但只會在 KeyframeMarker 被擊中時才會發生。差別允許更大的控制事件何時會發觸發。

要了解更多關於使用此功能的內容,請參閱 動畫事件動畫編輯器 文章中。

更多關於鑰匙框

Keyframe 名稱可以在 Roblox 動畫編輯器 中設定動畫創建或編輯時。但是,不能由 Script 在現有動畫上設置。

Keyframe 名稱不需要是唯一的。例如,如果 Animation 有三個名為 "EmitParticles" 的關鍵框,此功能所返回的連接事件將在每次這些關鍵框之一被達到時發射。

也看:

參數

name: string

信號的名稱,KeyFrameMarker 正在創建的信號名稱。


返回

當動畫到達創建的 KeyFrameMarker 時,信號已創建並發射。

範例程式碼

Listening to Keyframe Markers

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.Character:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Create new "Animation" instance
local kickAnimation = Instance.new("Animation")
-- Set its "AnimationId" to the corresponding animation asset ID
kickAnimation.AnimationId = "rbxassetid://2515090838"
-- Load animation onto the humanoid
local kickAnimationTrack = humanoid:LoadAnimation(kickAnimation)
-- Play animation track
kickAnimationTrack:Play()
-- If a named event was defined for the animation, connect it to "GetMarkerReachedSignal()"
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
print(paramString)
end)

GetTimeOfKeyframe

將提供的名稱的第一個 Class.Keyframe 返回 AnimationTrack 。如果多個 Class.Keyframe|Keyframes 共用相同的名稱,它將在動畫中返回最早的一個。

此功能將在使用與違用無效的 keyframe 名稱 (例如不存在) 或基礎 Animation 尚未載入時返回錯誤。若要處理此問題,請確認只有正確的 keyframe 名稱才會使用,並且動畫必須載入才能召喚此功能。

要確認動畫是否載入完畢,請確認 AnimationTrack.Length 是否大於零。

參數

keyframeName: string

Keyframe 相關的名稱。


返回

時間,以秒為單位,在正常播放速度下發生。

範例程式碼

Jump To Keyframe

local function jumpToKeyframe(animationTrack, keyframeName)
local timePosition = animationTrack:GetTimeOfKeyframe(keyframeName)
if not animationTrack.IsPlaying then
animationTrack:Play()
end
animationTrack.TimePosition = timePosition
end
local ANIMATION_ID = 0
local KEYFRAME_NAME = "Test"
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://" .. ANIMATION_ID
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
jumpToKeyframe(animationTrack, KEYFRAME_NAME)

Play

void

AnimationTrack:Play() 呼叫時,軌道的動畫將開始播放,軌道的重量將從 0 提升到指定的重量 (預設為 1) 在指定的淡出時間 (預設為 0.1) 中增加。

Class.AnimationTrack 的速度將會在速度參數 (預設為 1) 決定。當速度與 1 相同時,軌道所需的秒數會與軌道的 AnimationTrack.Length 屬性相等。例如,2 的速度會使軌道在完成時間與速度相加。

動畫開始時重量和速度也可以變更,使用 AnimationTrack:AdjustWeight()AnimationTrack:AdjustSpeed() 方法來改變動畫的重量和速度。

如果開發人員想在特定點使用 AnimationTrack.TimePosition 開始動畫,那麼在此之前播放動畫的重要性。

參數

fadeTime: number

動畫的重量應該在什麼時候漸漸消失。

預設值:0.100000001
weight: number

動畫要播放的重量。

預設值:1
speed: number

動畫的播放速度。

預設值:1

返回

void

範例程式碼

Playing Animation for a Specific Duration

local function playAnimationForDuration(animationTrack, duration)
local speed = animationTrack.Length / duration
animationTrack:Play()
animationTrack:AdjustSpeed(speed)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765000"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playAnimationForDuration(animationTrack, 3)
Freeze Animation at Position

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Play the animation if it is not playing
animationTrack:Play()
end
-- Set the speed to 0 to freeze the animation
animationTrack:AdjustSpeed(0)
-- Jump to the desired TimePosition
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Play the animation if it is not playing
animationTrack:Play()
end
-- Set the speed to 0 to freeze the animation
animationTrack:AdjustSpeed(0)
-- Jump to the desired TimePosition
animationTrack.TimePosition = (percentagePosition / 100) * animationTrack.Length
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
freezeAnimationAtTime(animationTrack, 0.5)
freezeAnimationAtPercent(animationTrack, 50)

Stop

void

停止 AnimationTrack 。一旦呼叫 AnimationTrack 的播放,會停止,重量的動畫將在指定的時間長度上移動到零。

舉例來說,如果使用 Stop 的時間為 2 秒,重新設定時間的時間會取決於兩秒後的重新設定時間,這會導致 AnimationTrack 的重新設定完成後效果完全結束。請注意,無論是否使用初始重量的動畫,這都會是發生的情況。

不建議使用 0 秒的淡出時間來嘗試覆蓋此效果並立即終止動畫,因為這會導致 AnimationTrack 姿勢凍結。

參數

fadeTime: number

過度動畫重量的時間,以秒計。

預設值:0.100000001

返回

void

範例程式碼

AnimationTrack Stop

local function fadeOut(animationTrack, fadeTime)
animationTrack:Stop(fadeTime)
local startTime = tick()
while animationTrack.WeightCurrent > 0 do
task.wait()
end
local timeTaken = tick() - startTime
print("Time taken for weight to reset: " .. tostring(timeTaken))
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
fadeOut(animationTrack, 1)

活動

DidLoop

這個事件會在 AnimationTrack 完成一個更新環後發生。

目前它也可能在非循環動畫軌跡的正確結束發射,但此行為不應被視為可靠。


範例程式碼

Play AnimationTrack for a Number of Loops

local function playForNumberLoops(animationTrack, number)
animationTrack.Looped = true
animationTrack:Play()
local numberOfLoops = 0
local connection = nil
connection = animationTrack.DidLoop:Connect(function()
numberOfLoops = numberOfLoops + 1
print("loop: ", numberOfLoops)
if numberOfLoops >= number then
animationTrack:Stop()
connection:Disconnect() -- it's important to disconnect connections when they are no longer needed
end
end)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playForNumberLoops(animationTrack, 5)

Ended

發生在 AnimationTrack 完全完成移動任何東西的世界上,動畫已完成播放,"fade out" 已完成,主題是在中立姿勢。

您可以使用此動畫軌跡的對象在中立姿勢回來時執行動作,而且不會受到 AnimationTrack 或任何關聯的連接影響。


範例程式碼

AnimationTrack Ended

local InsertService = game:GetService("InsertService")
local Players = game:GetService("Players")
-- Create an NPC model to animate.
local npcModel = Players:CreateHumanoidModelFromUserId(129687796)
npcModel.Name = "JoeNPC"
npcModel.Parent = workspace
npcModel:MoveTo(Vector3.new(0, 15, 4))
local humanoid = npcModel:WaitForChild("Humanoid")
-- Load an animation.
local animationModel = InsertService:LoadAsset(2510238627)
local animation = animationModel:FindFirstChildWhichIsA("Animation", true)
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
-- Connect to Stopped event. This fires when animation stops of
-- it's own accord, or we explicitly call Stop.
animationTrack.Stopped:Connect(function()
print("Animation stopped")
end)
-- Connect to Ended event. This fires when when animation is completely
-- finished affecting the world. In this case it will fire 3 seconds
-- after we call animationTrack:Stop because we pass in a 3
-- second fadeOut.
animationTrack.Ended:Connect(function()
print("Animation ended")
animationTrack:Destroy()
end)
-- Run, give it a bit to play, then stop.
print("Calling Play")
animationTrack:Play()
task.wait(10)
print("Calling Stop")
animationTrack:Stop(3)

KeyframeReached

播放 AnimationTrack 的每次播放時發生時,都會發生在 Keyframe 中,名稱不是預設名稱 - "Keyframe"。

此事件允許開發者在動畫中在預定點上執行代碼 (由 Keyframe 名稱設置) 。這允許 Roblox 動畫的預設功能在添加 SoundsParticleEffects 至不同點數中在動畫中擴展。

Keyframe 名稱不需要是唯一的。例如,如果有三個名為「粒子」的關鍵框,關鍵框達到事件將會發生,每次達到一個關鍵框時。

KeyframeScript 在播放動畫之前無法設置它們。

參數

keyframeName: string

已到達 Keyframe 的名稱。


Stopped

發射 AnimationTrack 播放完成時的火焰。

此事件有一些使用。它可以用來等待直到 AnimationTrack 停止再繼續 (例如, 如果連接一個連續播放動畫的動畫到一起). 它也可以用來清除任何 Instances 在動畫播放期間創建的。


範例程式碼

AnimationTrack Stopped

local function yieldPlayAnimation(animationTrack, fadeTime, weight, speed)
animationTrack:Play(fadeTime, weight, speed)
animationTrack.Stopped:Wait()
print("Animation has stopped")
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
yieldPlayAnimation(animationTrack, 1, 0.6, 1)