AnimationTrack

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia

Kontroluje odtwarzanie animacji na Animator . Ten obiekt nie może zostać utworzony, zamiast tego zostanie zwrócony przez metodę Animator:LoadAnimation().

Podsumowanie

Właściwości

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Przedmiot Animation, który został użyty do stworzenia tego AnimationTrack.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Właściwość tylko odczytowa, która zwraca prawdę, gdy AnimationTrack gra.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Właściwość tylko odczytowa, która zwraca długość (w sekundach) AnimationTrack .Wróci to 0, dopóki animacja nie zostanie w pełni załadowana i może nie być od razu dostępna.

  • Odczyt równoległy

    Ustawia, czy animacja powtórzy się po zakończeniu. Jeśli zostanie zmieniona podczas grania, efekt zostanie włączony po zakończeniu animacji.

  • Odczyt równoległy

    Ustawia priorytet AnimationTrack .W zależności od tego, co jest ustawione, odtwarzanie wielu animacji naraz będzie szukać tej właściwości, aby określić, które Class.Keyframe``Class.Pose|Poses powinny być odtwarzane jeden nad drugim.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Prędkość AnimationTrack jest właściwością tylko do odczytu, która daje obecną prędkość odtwarzania AnimationTrack .Ma domyślną wartość 1.Gdy prędkość jest równa 1, ilość czasu potrzebnego na ukończenie animacji wynosi AnimationTrack.Length (w sekundach).

  • Bez replikacji
    Odczyt równoległy

    Zwraca pozycję w czasie w sekundach, w których AnimationTrack gra w swoją animacjaźródła.Można ustawić, aby skok ścieżki do określonej chwili w animacja.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Właściwość tylko do odczytu, która daje obecną wagę AnimationTrack. Ma domyślną wartość 1.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Właściwość tylko do odczytu, która daje obecną wagę AnimationTrack .

Metody

Zdarzenia

Właściwości

Animation

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Przedmiot Animation, który został użyty do stworzenia tego AnimationTrack.Aby utworzyć AnimationTrack, musisz załadować obiekt Animation na Animator za pomocą metody Animator:LoadAnimation().

Przykłady kodu

The following code sample prints the name of an animation whenever an AnimationTrack plays on a Humanoid. This script can be placed in a model with a Humanoid child.

Listen For New Animations

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

IsPlaying

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość tylko odczytowa, która zwraca prawdę, gdy AnimationTrack gra.

Właściwość ta może być używana przez programistów do sprawdzenia, czy animacja jest już odtwarzana, zanim ją odtworzono (ponieważ spowodowałoby to jej ponowne uruchomienie).Jeśli programista chce uzyskać wszystkie odtwarzanie AnimationTracks na Animator lub Humanoid , powinien używać Animator:GetPlayingAnimationTracks()

Przykłady kodu

This code sample includes a simple function that will play an AnimationTrack if it is not playing, or otherwise adjust its speed and weight to match the new parameters given.

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość tylko odczytowa, która zwraca długość (w sekundach) AnimationTrack .Wróci to 0, dopóki animacja nie zostanie w pełni załadowana i może nie być od razu dostępna.

Kiedy AnimationTrack.Speed z AnimationTrack jest równy 1, animacja zajmie AnimationTrack.Length (w sekundach) na ukończenie.

Przykłady kodu

The following function will play an AnimationTrack for a specific duration. This is done by changing the speed of the animation to the length of the animation divided by the desired playback duration. This could be used in situations where a developer wants to play a standard animation for different duration (for example, recharging different abilities).

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

Odczyt równoległy

Właściwość ta określa, czy animacja powtórzy się po zakończeniu.Jeśli zostanie zmieniony podczas gry, efekt zacznie obowiązywać po zakończeniu animacji.

Właściwość Looped dla AnimationTrack domyślnie ustawia sposób ustawienia w edytorze animacji.Jednak ta właściwość może zostać zmieniona, umożliwiając kontrolę nad AnimationTrack podczas gdy gra się uruchamia.Looped również prawidłowo obsługuje animacje odtwarzane w odwrotnej kolejności (negatywna AnimationTrack.Speed ).Po osiągnięciu pierwszego kluczowego kadru zostanie ponownie uruchomiony na ostatnim kluczowym kadrze.

Właściwość ta pozwala programiście mieć wariant pętlowy i niepętlowy tej samej animacja, bez konieczności przesyłania dwóch wersji do Roblox.

Przykłady kodu

The animation in this example normally loops. After the player and the animation are loaded the animation is played in a non-looped fashion then in a looped fashion.

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()

The function in this code sample will play an AnimationTrack on a loop, for a specific number of loops, before stopping the animation.

In some cases the developer may want to stop a looped animation after a certain number of loops have completed, rather than after a certain amount of time. This is where the DidLoop event can be used.

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)
Odczyt równoległy

Właściwość ta ustawia priorytet AnimationTrack .W zależności od tego, co jest ustawione, odtwarzanie wielu animacji naraz będzie szukać tej właściwości, aby określić, które Class.Keyframe``Class.Pose|Poses powinny być odtwarzane jeden nad drugim.

Właściwość priorytetowa dla domyślnie ustawiona jest tak, jak została ustawiona i opublikowana z edytora animacji Studio .Używa Enum.AnimationPriority, który ma 7 poziomów priorytetowych:

  1. Akcja4 (najwyższy priorytet)
  2. Akcja3
  3. Akcja2
  4. Akcja
  5. Przesuwanie
  6. Nieaktywny
  7. Podstawowe (najniższy priorytet)

Prawidłowo ustawione priorytety animacji, za pomocą edytora lub za pomocą tej właściwości, pozwalają na odtwarzanie wielu animacji bez konfliktów.Gdzie dwie animacje odtwarzania kierują celem do przemieszczenia tej samej kończyny w różny sposób, pokaże się AnimationTrack z najwyższym priorytetem.Jeśli obie animacje mają ten sam priorytet, ciężary ścieżek zostaną wykorzystane do połączenia animacji.

Właściwość ta pozwala również programiście odtwarzać tę samą animację przy różnych priorytetach, bez konieczności przesyłania dodatkowych wersji do Roblox.

Speed

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Prędkość AnimationTrack jest właściwością tylko do odczytu, która daje obecną prędkość odtwarzania AnimationTrack .Ma domyślną wartość 1.Gdy prędkość jest równa 1, ilość czasu potrzebnego na ukończenie animacji wynosi AnimationTrack.Length (w sekundach).

Jeśli prędkość jest dostosowana, to rzeczywisty czas, jaki zajmie odtwarzanie ścieżki, można obliczyć, dzieląc długość przez prędkość.Prędkość jest ilością bez jednostki.

Prędkość można wykorzystać do powiązania długości animacji z różnymi wydarzeniami w grze (na przykład ponowne ładowanie umiejętności) bez konieczności przesyłania różnych wariantów tej samej animacja.

Właściwość ta jest tylko odczytywana i możesz ją zmienić za pomocą AnimationTrack:AdjustSpeed().

Przykłady kodu

In this example a player and an animation is loaded. The Length of an AnimationTrack determines how long the track would take to play if the speed is at 1. If the speed is adjusted, then the actual time it will take a track to play can be computed by dividing the length by the speed.

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")

The following function will play an AnimationTrack for a specific duration. This is done by changing the speed of the animation to the length of the animation divided by the desired playback duration. This could be used in situations where a developer wants to play a standard animation for different duration (for example, recharging different abilities).

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

Bez replikacji
Odczyt równoległy

Zwraca pozycję w czasie w sekundach, w których AnimationTrack gra w swoją animacjaźródła.Można ustawić, aby skok ścieżki do określonej chwili w animacja.

Pozycja czasowa może zostać ustawiona, aby przejść do określonego punktu w animacja, ale AnimationTrack.Można go również używać w połączeniu z AnimationTrack:AdjustSpeed(), aby zamrozić animację na wybranym punkcie (ustawiając prędkość na 0).

Przykłady kodu

The following code sample includes two functions that demonstrate how AdjustSpeed and TimePosition can be used to freeze an animation at a particular point.

The first function freezes an animation at a particular point in time (defined in seconds). The second freezes at it at a percentage (between 0 or 100) by multiplying the percentage by the track length.

As TimePosition can not be used when an AnimationTrack is not playing, the functions check to make sure the animation is playing before proceeding.

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Gdy waga jest ustawiona w AnimationTrack nie zmienia się natychmiast, ale przenosi się z WeightCurrent na AnimationTrack.WeightTarget.Czas potrzebny na wykonanie tego zadania jest określony przez parametr czasu zanikania podany przy odtwarzaniu animacji lub dostosowywaniu wagi.

WeightCurrent można sprawdzić przeciwko AnimationTrack.WeightTarget, aby zobaczyć, czy osiągnięto pożądaną wagę.Zwróć uwagę, że te wartości nie powinny być sprawdzane pod kątem równości z operatorem ==, ponieważ obie te wartości są zmiennymi.Aby sprawdzić, czy WeightCurrent osiągnął docelową wagę, zaleca się sprawdzenie, czy odległość między tymi wartościami jest wystarczająco mała (zobacz przykład kodu poniżej).

System ważenia animacji jest używany do określenia, w jaki sposób AnimationTracks gra o tym samym priorytecie jest miksowana razem.Domyślna waga wynosi jeden, a żadne ruchy nie będą widoczne na AnimationTrack z wagą zerową.Poza, która jest pokazana w dowolnym momencie, jest określana przez średnią ważoną wszystkich Poses i wagę obecną każdego AnimationTrack.W większości przypadków animacje mieszania nie są wymagane, a używanie AnimationTrack.Priority jest bardziej odpowiednie.

Przykłady kodu

This code sample loads two animations onto the local player's Humanoid and demonstrates how the fadeTime paramater in AnimationTrack.Play determines how long it takes for an AnimationTrack's WeightCurrent to reach it's WeightTarget.

As WeightCurrent and WeightTarget are floats the == operator cannot be used to compare, instead it is more appropriate to check that the difference between them is sufficiently small to assume the weight fade has completed.

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

AnimationTrack.WeightTarget jest właściwością tylko do odczytu, która daje obecną wagę AnimationTrack.Ma domyślną wartość 1 i jest ustawiony, gdy AnimationTrack:Play() , AnimationTrack:Stop() lub AnimationTrack:AdjustWeight() jest wzywany.Gdy waga jest ustawiona w AnimationTrack nie zmienia się natychmiast, ale przenosi się z WeightCurrent na AnimationTrack.WeightTarget.Czas potrzebny na wykonanie tego zadania jest określony przez parametr czasu zanikania podany przy odtwarzaniu animacji lub dostosowywaniu wagi.

WeightCurrent można sprawdzić przeciwko AnimationTrack.WeightTarget, aby zobaczyć, czy osiągnięto pożądaną wagę.Zwróć uwagę, że te wartości nie powinny być sprawdzane pod kątem równości z operatorem ==, ponieważ obie te wartości są zmiennymi.Aby sprawdzić, czy WeightCurrent osiągnął docelową wagę, zaleca się sprawdzenie, czy odległość między tymi wartościami jest wystarczająco mała (zobacz przykład kodu poniżej).

System ważenia animacji jest używany do określenia, w jaki sposób AnimationTracks gra o tym samym priorytecie jest miksowana razem.Domyślna waga wynosi jeden, a żadne ruchy nie będą widoczne na AnimationTrack z wagą zerową.Poza, która jest pokazana w dowolnym momencie, jest określana przez średnią ważoną wszystkich Poses i wagę obecną każdego AnimationTrack.W większości przypadków animacje mieszania nie są wymagane, a używanie AnimationTrack.Priority jest bardziej odpowiednie.

Przykłady kodu

This code sample loads two animations onto the local player's Humanoid and demonstrates how the fadeTime paramater in AnimationTrack.Play determines how long it takes for an AnimationTrack's WeightCurrent to reach it's WeightTarget.

As WeightCurrent and WeightTarget are floats the == operator cannot be used to compare, instead it is more appropriate to check that the difference between them is sufficiently small to assume the weight fade has completed.

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

Metody

AdjustSpeed

()

Funkcja ta zmienia AnimationTrack.Speed animacja.Pozytywna wartość prędkości odtwarza animację do przodu, negatywna odtwarza ją do tyłu, a 0 ją wstrzymuje.

Początkowa prędkość ścieżki animacji jest ustawiona jako parametr w AnimationTrack:Play() .Jednak prędkość toru może zostać zmieniona podczas odtwarzania, za pomocą AdjustSpeed.Gdy prędkość jest równa 1, ilość czasu potrzebnego na ukończenie animacji jest równa AnimationTrack.Length (w sekundach).

Kiedy jest dostosowywany, można obliczyć rzeczywisty czas, jaki zajmie odtwarzanie ścieżki, dzieląc długość przez prędkość. Prędkość jest ilością bez jednostki.

Prędkość można wykorzystać do powiązania długości animacji z różnymi wydarzeniami rozgrywkowymi (na przykład ponownym naładowaniem umiejętności) bez konieczności przesyłania różnych wariantów tej samej animacja.

Parametry

speed: number

Prędkość odtwarzania animacji, którą należy zmienić.

Wartość domyślna: 1

Zwroty

()

Przykłady kodu

The following function will play an AnimationTrack for a specific duration. This is done by changing the speed of the animation to the length of the animation divided by the desired playback duration. This could be used in situations where a developer wants to play a standard animation for different duration (for example, recharging different abilities).

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)

In this example a player and an animation is loaded. The Length of an AnimationTrack determines how long the track would take to play if the speed is at 1. If the speed is adjusted, then the actual time it will take a track to play can be computed by dividing the length by the speed.

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

()

Zmienia wagę animacja, z opcjonalnym parametrem czasu trwania określającym, jak długo zajmie AnimationTrack.WeightCurrent dotarcie do AnimationTrack.WeightTarget.

Gdy waga jest ustawiona w AnimationTrack nie zmienia się natychmiast, ale przenosi się z WeightCurrent na AnimationTrack.WeightTarget.Czas potrzebny na wykonanie tego zadania jest określony przez parametr czasu zanikania podany przy odtwarzaniu animacji lub dostosowywaniu wagi.

WeightCurrent można sprawdzić przeciwko AnimationTrack.WeightTarget, aby zobaczyć, czy osiągnięto pożądaną wagę.Zwróć uwagę, że te wartości nie powinny być sprawdzane pod kątem równości z operatorem ==, ponieważ obie te wartości są zmiennymi.Aby sprawdzić, czy WeightCurrent osiągnął docelową wagę, zaleca się sprawdzenie, czy odległość między tymi wartościami jest wystarczająco mała (zobacz przykład kodu poniżej).

System ważenia animacji jest używany do określenia, w jaki sposób AnimationTracks gra o tym samym priorytecie jest miksowana razem.Domyślna waga wynosi jeden, a żadne ruchy nie będą widoczne na AnimationTrack z wagą zerową.Poza, która jest pokazana w dowolnym momencie, jest określana przez średnią ważoną wszystkich Poses i wagę obecną każdego AnimationTrack.Zobacz poniżej przykład łączenia animacji w praktyce.W większości przypadków animacje mieszania nie są wymagane, a używanie AnimationTrack.Priority jest bardziej odpowiednie.

Parametry

weight: number

Waga, do której ma zostać zmieniona animacja.

Wartość domyślna: 1
fadeTime: number

Czas trwania animacji, która zniknie między starym ciężarem a nową wagą.

Wartość domyślna: 0.100000001

Zwroty

()

Przykłady kodu

This code sample includes a function that changes the weight of an AnimationTrack and yields until the weight has changed to the new target weight.

The purpose of this sample is to demonstrate how the fadeTime parameter of AnimationTrack.AdjustWeight works. In most cases, if a developer wishes to yield over the fadeTime it is recommended they use wait(fadeTime).

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

Funkcja ta zwraca event podobną do wydarzenia AnimationTrack.KeyframeReached, z wyjątkiem, że wystrzeliwuje tylko wtedy, gdy zostanie uderzony określony KeyframeMarker w animation.Różnica pozwala na większą kontrolę, kiedy wydarzenie się wyzwoli.

Aby dowiedzieć się więcej o wykorzystaniu tej funkcji, zobacz Wydarzenia animacji w artykule Edytor animacji.

Zobacz także:

Parametry

name: string

Nazwa sygnału, dla którego jest tworzona, nie jest mylona z nazwą .

Wartość domyślna: ""

Zwroty

Sygnał utworzony i wystrzelony, gdy animacja dotrze do stworzonego KeyframeMarker. Nie należy mylić z nazwą Keyframe.

Przykłady kodu

This LocalScript code waits for the local player's Humanoid object to load, then it creates a new Animation instance with the proper Animation.AnimationId. The animation is then loaded onto the humanoid, creating an AnimationTrack, and the track is played with AnimationTrack:Play(). Following that, the AnimationTrack:GetMarkerReachedSignal() function detects when the "KickEnd" marker is hit.

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)

GetTargetInstance

Parametry

name: string
Wartość domyślna: ""

Zwroty

GetTargetNames


Zwroty

GetTimeOfKeyframe

Zwraca pozycję czasu pierwszego Keyframe z daną nazwą w AnimationTrack .Jeśli wiele Keyframes dzieli to samo nazwisko, zwróci najwcześniejsze w animacja.

Funkcja ta zwróci błąd, jeśli zostanie użyta z nieprawidłową nazwą kluczowego ramienia (na przykład nie istniejącą) lub jeśli podstawowe Animation nie zostało jeszcze załadowane.Aby rozwiązać ten problem, upewnij się, że używane są tylko poprawne nazwy klatek kluczowych, a animacja została załadowana przed wywołaniem tej funkcji.

Aby sprawdzić, czy animacja się załadowała, sprawdź, czy AnimationTrack.Length jest większe od zera.

Parametry

keyframeName: string

Nazwa powiązana z Keyframe znaleziona, którą należy znaleźć.

Wartość domyślna: ""

Zwroty

Czas, w sekundach, Keyframe występuje przy normalnej prędkości odtwarzania.

Przykłady kodu

This sample includes a function that will jump to the first keyframe of a specified name in an AnimationTrack.

As AnimationTrack.TimePosition cannot be set while the animation is not playing the function first checks to see if the animation is playing.

This sample will only work once an Animation has loaded.

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

()

Gdy AnimationTrack:Play() jest wzywany, animacja ścieżki zacznie się odtwarzać, a waga animacji wzrośnie z 0 do określonej wagi (domyślnie 1) w określonym czasie trwania animacji (domyślnie 0,1).

Prędkość, z jaką AnimationTrack będzie odtwarzać, jest określana przez parametr prędkości (domyślnie 1).Gdy prędkość jest równa 1, liczba sekund, jakie zajmie ukończenie ścieżki, jest równa właściwości ścieżki AnimationTrack.Length.Na przykład prędkość 2 spowoduje, że tor będzie odtwarzał się dwa razy szybciej.

Waga i prędkość animacji można również zmienić po rozpoczęciu odtwarzania animacji za pomocą metod AnimationTrack:AdjustWeight() i AnimationTrack:AdjustSpeed().

Jeśli programista chce rozpocząć animację w określonym momencie za pomocą AnimationTrack.TimePosition, ważne jest, aby animacja została odtworzona, zanim to się stanie.

Parametry

fadeTime: number

Czas, przez który waga animacjapowinna zniknąć.

Wartość domyślna: 0.100000001
weight: number

Waga, przy której ma być odtwarzana animacja.

Wartość domyślna: 1
speed: number

Prędkość odtwarzania animacja.

Wartość domyślna: 1

Zwroty

()

Przykłady kodu

The following function will play an AnimationTrack for a specific duration. This is done by changing the speed of the animation to the length of the animation divided by the desired playback duration. This could be used in situations where a developer wants to play a standard animation for different duration (for example, recharging different abilities).

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)

The following code sample includes two functions that demonstrate how AdjustSpeed and TimePosition can be used to freeze an animation at a particular point.

The first function freezes an animation at a particular point in time (defined in seconds). The second freezes at it at a percentage (between 0 or 100) by multiplying the percentage by the track length.

As TimePosition can not be used when an AnimationTrack is not playing, the functions check to make sure the animation is playing before proceeding.

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)

SetTargetInstance

()

Parametry

name: string
Wartość domyślna: ""
target: Instance
Wartość domyślna: ""

Zwroty

()

Stop

()

Zatrzymuje AnimationTrack .Po wezwaniu waga animacji zmierzy się w kierunku zera przez określoną długość czasu za pomocą opcjonalnego parametru fadeTime.Na przykład, jeśli zostanie wezwane z , zajmie to dwa sekundy, aby waga toru osiągnęła zero i jej efekty całkowicie się kończyć.Pamiętaj, że będzie to przypadek niezależnie od początkowej wagi animacja.

Nie zaleca się używania fadeTime z 0 w próbie wyłączenia tego efektu i natychmiast zakończenia animacji dla Motor6Ds tych, które mają ustawiony Motor.MaxVelocity na zero, ponieważ powoduje to zamrożenie stawów w miejscemusi się skończyć natychmiast, upewnij się, że Motor.MaxVelocity z Motor6Ds w twoim układzie jest wystarczająco wysoki, aby można było go prawidłowo przymocować.

Parametry

fadeTime: number

Czas, w sekundach, na który należy rozpłynąć wagę animacji.

Wartość domyślna: 0.100000001

Zwroty

()

Przykłady kodu

This code sample includes a function that stops an AnimationTrack with a specific fadeTime, and yields until the fade is completed and the weight of the AnimationTrack is equal to zero.

The purpose of this sample is to demonstrate how the fadeTime parameter of AnimationTrack.Stop works. In most cases, if a developer wishes to yield over the fadeTime it is recommended they use wait(fadeTime).

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)

Zdarzenia

DidLoop

To wydarzenie wystrzeliwuje się za każdym razem, gdy pętla AnimationTrack zostanie zakończona, w następnej aktualizacja.

Obecnie może również strzelać dokładnie na końcu niezapętlanej ścieżki animacji, ale to zachowanie nie powinno być traktowane jako pewne.


Przykłady kodu

The function in this code sample will play an AnimationTrack on a loop, for a specific number of loops, before stopping the animation.

In some cases the developer may want to stop a looped animation after a certain number of loops have completed, rather than after a certain amount of time. This is where the DidLoop event can be used.

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

Wypala się, gdy AnimationTrack zostanie całkowicie zakończone przenoszenie czegokolwiek w świecie.Animacja skończyła się odtwarzać, "nan" został zakończony, a temat jest w neutralnej pozie.

Możesz tego użyć, aby podjąć działania, gdy temat ścieżki animacji powróci do neutralnej pozy, która nie jest dotknięta przez AnimationTrack lub oczyścić AnimationTrack.lub jakiekolwiek powiązane połączenia.


Przykłady kodu

The function in this code sample plays an animationTrack and yields until it has stopped and ended, printing at each step along the way.

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

Wybucha za każdym razem, gdy odtwarzanie AnimationTrack osiąga Keyframe, które nie ma domyślnej nazwy - "Keyframe".

To wydarzenie pozwala programiście uruchomić kod w określonych punktach animacji (ustawionych przez nazwy Keyframe).Umożliwia to rozszerzenie domyślnej funkcjonalności animacji Roblox poprzez dodanie Sounds lub ParticleEffects w różnych punktach animacja.

Keyframe nazwy nie muszą być unikalne.Na przykład, jeśli animacja ma trzy kluczowe ramy o nazwie "Cząsteczki", wydarzenie KeyframeReached zostanie uruchomione za każdym razem, gdy jeden z tych kluczowych ram zostanie osiągnięty.

Keyframe nazwy można ustawić w edytorze animacji Roblox podczas tworzenia lub edytowania animacja.Nie mogą jednak zostać ustawione przez Script na istniejącej animacji przed jej odtworzeniem.

Parametry

keyframeName: string

Osiągnięto nazwę Keyframe .


Stopped

Wybucha za każdym razem, gdy AnimationTrack kończy odtwarzanie.

To wydarzenie ma wiele zastosowań.Można go użyć, aby poczekać, aż AnimationTrack przestanie się kręcić, zanim kontynuować (na przykład, jeśli łączysz serię animacji, aby grać po sobie nawzajem).Można go również użyć do oczyszczenia dowolnego Instances utworzonego podczas odtwarzania animacji.


Przykłady kodu

The function in this code sample will play an animationTrack and yield until it has stopped, before printing.

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)