Class.AnimationController 에 대한 애니메이션 재생을 제어합니다. 이 개체는 생성할 수 없으며, 대신 Animator:LoadAnimation() 메서드에 의해 반환됩니다.
요약
속성
이 AnimationTrack 을 만드는 데 사용된 Class.Animation 개체.
Class.AnimationTrack()이 재생할 때 진실로 반환하는 읽기 전용 속성입니다.
길이(초)를 반환하는 읽기 전용 속성입니다. 이렇게 하면 애니메이션이 완전히 로드된 후 0을 반환하므로 즉시 사용할 수는 없습니다.
애니메이션이 완료된 후 반복되는지 여부를 설정합니다. 결과를 플레이할 때 변경하면 애니메이션이 완료된 후에 효과가 적용됩니다.
이 속성은 다음과 같은 순위를 설정합니다. AnimationTrack 에 대해 이것이 설정된 순위에 따라 여러 애니메이션을 동시에 재생하면 이 속성에 액세스하여 각 Keyframe 에서 어느 Poses 가 재생되는지 알아낼 수 있습니다.
Class.AnimationTrack 의 속도는 현재 재생 속도를 제공하는 읽기 전용 속성입니다. 이 속도는 기본 값 1을 가지고 있습니다. 속도가 1일 때, 애니메이션이 완료되는 데 걸리는 시간은 AnimationTrack (초)입니다.
원본 애니메이션을 재생하여 위치를 시간 내에 반환합니다. AnimationTrack 이 트랙을 점프하도록 설정할 수 있습니다.
현재 무게를 제공하는 AnimationTrack의 읽기 전용 속성입니다. 기본값은 1입니다.
현재 무게를 제공하는 AnimationTrack의 읽기 전용 속성.
메서드
애니메이션의 AnimationTrack.Speed 를 변경합니다. 속도가 음수인 값은 애니메이션을 빠르게 재생하고, 긍정적인 값은 애니메이션을 느리게 재생합니다. 0은 멈춥니다.
획득한 애니메이션 무게를 변경하는 옵션 시간 단위 기간으로 획득한 애니메이션 무게를 변경합니다.Changes the weight of an animation, with the optional fadeTime parameter determining how long it takes for AnimationTrack.WeightCurrent to reach AnimationTrack.WeightTarget .
지정된 Class.KeyframeMarker 가 있는 경우 발생하는 KeyframeMarker 을 반환합니다.
지정된 이름의 첫 번째 Keyframe의 시간 위치를 반환합니다. AnimationTrack .
플레이어는 AnimationTrack 을 플레이합니다. AnimationTrack 을 호출한 후 지정된 횟수, 무게 및 속도로 플레이합니다.
Class.AnimationTrack 의 재생을 중지합니다. AnimationTrack 의 재생이 플레이백되면 중지되고 애니메이션 무게는 옵션 흐림시간 매개 변수에 따라 길이 지정된 시간에 대해 0으로 이동합니다.
이벤트
이전 애니메이션 루프 종료 후 다음 업데이트에서 AnimationTrack 루프가 발생하면 화재됩니다.
세계에서 무언가를 완전히 이동할 때 AnimationTrack 이 발생합니다. 애니메이션은 완료되었으며, "흐느끼기"가 완료되었고, 주제는 중립 자세에 있습니다.
Class.AnimationTrack의 재생 시 모든 경우 기본 이름이 아닌 - "Keyframe."인 Keyframe에 도달합니다.
Class.AnimationTrack 가 재생을 완료했을 때 화재됩니다. 애니메이션 트랙은 애니메이션이 "사라지는" 동안 주제를 계속 애니메이션화할 수 있습니다. 애니메이션 트랙이 완전히 완료된 때 애니메이션 주제를 잡을 수 있도록 AnimationTrack.Ended 이벤트를 사용하십시오.
속성
Animation
이 Animation 을 생성하기 위해 사용된 AnimationTrack 개체. AnimationTrack 을 생성하려면 2>Class.AnimationContainer2> 에 5>Class.Animation5> 개체를 로드해야 합니다. 8>Class.Animator:LoadAnimation()8>
코드 샘플
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
Class.AnimationTrack()이 재생할 때 진실로 반환하는 읽기 전용 속성입니다.
이 속성은 개발자가 애니메이션이 플레이되기 전에 확인하는 데 사용할 수 있습니다(이렇게 하면 다시 시작되므로 플레이를 중지할 수 있습니다). 개발자가 원하는 경우 AnimationTracks 또는 Class.
코드 샘플
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
길이(초)를 반환하는 읽기 전용 속성입니다. 이렇게 하면 애니메이션이 완전히 로드된 후 0을 반환하므로 즉시 사용할 수는 없습니다.
Class.AnimationTrack.Speed 의 Class.AnimationTrack 가 1과 같을 때 애니메이션은 AnimationTrack (초) 를 완료하기 위해 필요합니다.
코드 샘플
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의 음수 값은 게임이 실행되는
이 속성을 사용하면 개발자가 Roblox에 두 가지 버전의 동일한 애니메이션을 업로드할 필요 없이 루프 및 루프 아닌 변형을 가질 수 있습니다.
코드 샘플
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()
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)
Priority
이 속성은 AnimationTrack의 우선 순위를 설정합니다. 이 속성을 설정하는 것에 따라 여러 애니메이션을 동시에 재생하면 이 속성에 액세스하여 어느 Keyframe 이 재생되어야 하는지 알아낼 수 있습니다.
Class.AnimationTrack의 우선 순위 속성은 Studio의 애니메이션 편집기에서 설정되고 게시하는 방식으로 기본적으로 설정됩니다. 우선 순위 수준은 7개이며 Enum.AnimationPriority입니다.
- 액션 4(최우선 순위)
- 액션3
- 액션2
- 액션
- 이동
- 비활동
- 핵심(최우선 순위)
애니메이션 우선 순위를 설정하려면 편집기 또는 이 속성을 통해 애니메이션을 여러 개 플레이하거나 충돌하지 않고 애니메이션을 플레이할 수 있습니다. 두 애니메이션이 동일한 방식으로 대상을 이동하는 경우 우선 순위가 가장 높은 AnimationTrack가
이 속성을 사용하면 개발자가 Roblox에 추가 버전을 업로드할 필요 없이 동일한 애니메이션을 다른 우선 순위에 따라 재생할 수 있습니다.
Speed
Class.AnimationTrack 의 속도는 현재 재생 속도를 제공하는 읽기 전용 속성입니다. 이 속도는 기본 값 1을 가지고 있습니다. 속도가 1일 때, 애니메이션이 완료되는 데 걸리는 시간은 AnimationTrack (초)입니다.
속도가 조정되면 트랙에서 재생할 때 실제 시간을 계산하려면 길이를 속도로 나눕니다. 속도는 단위 없는 값입니다.
속도는 동일한 애니메이션의 길이를 다른 게임 이벤트(예: 능력 재충전)에 연결하는 데 사용할 수 있습니다.
이 속성은 읽기 전용이며 AnimationTrack:AdjustSpeed()를 사용하여 변경할 수 있습니다.
코드 샘플
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")
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 는 플레이어에게 도달하려면 플레이어가 해야 합니다. 또한 Class.AnimationTrack:AdjustSpeed() 와 함께 사용하면 애니메이션을 원하는 시점에 얼음 상태로 만들 수 있습니다(속도를 0로 설정).
코드 샘플
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에 설정하면 즉시 변경되지 않지만 무게Current에서 AnimationTrack.WeightTarget로 이동합니다. 이 작업을 수행하는 데 걸리는 시간은 애니메이션이 재생될 때 지정된 타임아웃 매개 변수에 따라 결정됩니다.
WeightCurrent 는 원하는 무게에 도달했는지 확인하기 위해 AnimationTrack.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 의 무게에 대해 읽기 전용 속성입니다. 기본
WeightCurrent 는 원하는 무게에 도달했는지 확인하기 위해 AnimationTrack.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
이 함수는 애니메이션의 AnimationTrack.Speed를 변경합니다. 속도에 대한 긍정적인 값은 애니메이션을 앞으로 플레이하고, 부정적인 값은 뒤로 플레이하며 0은 중지합니다.
AnimationTrack의 초기 속도는 Class.AnimationTrack:Play() 에 매개 변수로 설정됩니다. 그러나 트랙의 속도는 플레이 중에 변경될 수 있습니다, 조정 속도를 사용하여 트랙의 속도를 변경할 수 있습니다. 속도가 1일 이면 애니메이션 완료에 걸리는 시간은 Class.AnimationTrack.Length
조정된 시간에 따라 트랙이 재생될 때의 실제 시간을 계산하려면 길이를 속도로 나눕니다. 속도는 단위 없는 값입니다.
속도는 동일한 애니메이션의 길이를 다른 게임 플레이 이벤트(예: 능력 재충전)에 연결하는 데 사용할 수 있습니다(예: 다른 변형의 애니메이션 업로드 필요 없음).
매개 변수
애니메이션이 변경될 재생 속도입니다.
반환
코드 샘플
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)
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
획득한 애니메이션 무게를 변경하는 옵션 시간 단위 기간으로 획득한 애니메이션 무게를 변경합니다.Changes the weight of an animation, with the optional fadeTime parameter determining how long it takes for AnimationTrack.WeightCurrent to reach AnimationTrack.WeightTarget .
무게를 AnimationTrack에 설정하면 즉시 변경되지 않지만 무게Current에서 AnimationTrack.WeightTarget로 이동합니다. 이 작업을 수행하는 데 걸리는 시간은 애니메이션이 재생될 때 지정된 타임아웃 매개 변수에 따라 결정됩니다.
WeightCurrent 는 원하는 무게에 도달했는지 확인하기 위해 AnimationTrack.WeightTarget 과 비교할 수 있습니다. 이 값들은 모두 부동 소수점이므로 이러한 값과 동일한 값을 검사하는 것은 좋지 않습니다. 무게 현재 값이 대상 값에 도달했는지 확인하려면 해당 값 간의 거리
애니메이션 무게 시스템은 동일한 우선 순위에 있는 애니메이션이 혼합되는 방법을 결정하기 위해
매개 변수
애니메이션에 적용할 무게를 변경합니다.
애니메이션이 오래된 무게와 새로운 무게 사이에서 얼마나 지속되는지 지정합니다.
반환
코드 샘플
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
이 함수는 event 이벤트와 유사하게 작동하지만 AnimationTrack.KeyframeReached 를 클래스 KeyframeMarker 에 명중하면만 발생합니다. 이 차이로 이벤트 발생 시간을 더 엄격하게 제어할 수 있습니다.
이 함수를 사용하는 방법에 대해서는 <a href="https://developer.microsoft.com/en-us/microsoft-edge/ animations/">Animation Events</a> 를 참조하십시오.
키 프레임에 대해 자세히 알아보기
Keyframe 이름은 애니메이션을 만들거나 편집할 때 Roblox 애니메이션 편집기 에서 설정할 수 있습니다. 그러나 플레이할 때까지 기존 애니메이션에 대해 Script 에 의해 설정될 수 없습니다.
Keyframe 이름은 고유하지 않아도 됩니다. 예를 들어, Animation 에 세 개의 키 프레임이 있으면 이 함수에서 연결된 이벤트가 각 키 프레임이 도달될 때 발생하면 됩니다.
또한 참조하십시오.
- AnimationTrack , 클래스 인간 노이드 또는 클래스 애니메이션 컨트롤러에서 애니메이션 플레이백을 제어합니다.
매개 변수
신호가 생성되는 이유는 KeyFrameMarker의 이름입니다.
반환
애니메이션이 생성된 후 신호가 생성된 KeyFrameMarker 에 발생합니다.
코드 샘플
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
지정된 이름의 첫 번째 Keyframe의 시간 위치를 AnimationTrack에 반환합니다. 여러 개의 Keyframes이 동일한 이름을 공유하면 애니메이션에서 가장 이전 하나를 반환합니다.
이 함수는 잘못된 키프레임 이름(예: 존재하지 않는) 또는 기본 Class.Animation 이 아직 로드되지 않은 경우 오류가 발생하면 오류가 반환됩니다. 이를 처리하려면 올바른 키프레임 이름만 사용하고 애니메이션이 로드된 후에만 이 함수를 호출하십시오.
애니메이션이 로드된 지 확인하려면 AnimationTrack.Length 이 0보다 크면 애니메이션이 로드된 것입니다.
매개 변수
반환
코드 샘플
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
트랙 애니메이션이 AnimationTrack:Play() 가 호출될 때, 트랙 애니메이션이 재생되기 시작하고 애니메이션 무게가 지정된 무게(기본값: 1)로 지정된 시간(기본값: 0.1)까지 증가합니다.
속도 매개 변수 (기본값: 1)가 지정된 속도에 따라 재생됩니다. 속도가 1과 같으면 트랙이 완료될 때까지 걸리는 시간(트랙의 속성 기준: 1)과 같습니다. 예를 들어, 속도가 2인 경우 트랙이 두 배 더 빠르게 재생됩니다.
애니메이션이 플레이를 시작한 후 AnimationTrack:AdjustWeight() 및 AnimationTrack:AdjustSpeed() 메서드를 사용하여 무게와 속도를 변경할 수 있습니다.
개발자가 AnimationTrack.TimePosition를 사용하여 특정 시점에 애니메이션을 시작하려면 애니메이션이 시작되기 전에 플레이해야 합니다.
매개 변수
애니메이션 중량의 지속 시간이 끝날 때까지 지속됩니다.
애니메이션이 재생될 장소의 무게입니다.
애니메이션의 재생 속도입니다.
반환
코드 샘플
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)
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
Class.AnimationTrack 의 재생을 중지합니다. AnimationTrack 의 재생이 플레이백되면 중지되고 애니메이션 무게는 옵션 흐림시간 매개 변수에 따라 길이 지정된 시간에 대해 0으로 이동합니다.
예를 들어, AnimationTrack의 페이드 타임이 2초인 경우 무게가 0에 도달하고 효과가 완전히 종료데 2초가 걸립니다. 이 경우 애니메이션의 초기 무게에 관계없이 이 경우가 발생합니다.
이 효과를 대체하고 즉시 애니메이션을 종료하려면 0초의 희미시간을 사용하는 것이 좋지 않습니다. 이렇게 하면 현재 AnimationTrack 포즈가 얼어붙습니다.
매개 변수
애니메이션 무게가 옅어지는 시간(초).
반환
코드 샘플
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을 완료할 때마다 발생합니다.
현재 이 애니메이션 트랙의 끝에 정확히 발사되지만 이 동작은 신뢰할 수 없습니다.
코드 샘플
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 이 발생합니다. 애니메이션은 완료되었으며, "흐느끼기"가 완료되었고, 주제는 중립 자세에 있습니다.
이 애니메이션 트랙 주제가 중립 자세로 돌아 있거나 AnimationTrack 또는 연결된 모든 연결에 영향을 미치지 않고 작업할 때 사용할 수 있습니다.
코드 샘플
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
Class.AnimationTrack의 재생 시 모든 경우 기본 이름이 아닌 Keyframe에 도달하면 이 이름을 가진 키 프레임을 생성합니다.
이 이벤트는 애니메이션의 미리 정의된 지점에서 코드를 실행할 수 있습니다(Keyframe 명명)로 로블록스 애니메이션의 기본 기능을 확장할 수 있습니다. 이를 통해 애니메이션의 다른 지점에 Sounds 또는 ParticleEffects 를 추가하면 로블
Keyframe 이름은 고유하지 않아도 됩니다. 예를 들어, 애니메이션에 세 개의 "Particles"라는 키 프레임이 있으면 키 프레임 도달 이벤트가 발생하면 각 키 프레임 중 하나가 도달되었을 때마다 이벤트가 발생합니다.
Keyframe 이름은 애니메이션을 만들거나 편집할 때 Roblox 애니메이션 편집기에서 설정할 수 있습니다. 그러나 애니메이션을 플레이하기 전에 기존 애니메이션에 대한 Script 에 의해 설정될 수 없습니다.
매개 변수
Class.Keyframe의 이름에 도달했습니다.
Stopped
클래스 애니메이션 트랙이 플레이를 완료할 때마다 발생합니다.
이 이벤트는 여러 사용이 있습니다. 예를 들어, 연속 동작 시리즈를 플레이하는 등의 작업을 완료하기 전에 기다리려면 사용됩니다(예를 들어, 각 연속 동작 시리즈를 플레이하는 동안 연속 재생). 또한, 애니메이션 플레이백 동안 생성된 모든 Class.Instance|Instances
코드 샘플
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)