AnimationTrack

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar

Steuert die Wiedergabe einer Animation auf einem AnimationController . Dieses Objekt kann nicht erstellt werden, stattdessen wird es durch die Methode Animator:LoadAnimation() zurückgegeben.

Zusammenfassung

Eigenschaften

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Das Animation -Objekt, das verwendet wurde, um diesen AnimationTrack zu erstellen.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Eine lesbare Eigenschaft, die wahr ist, wenn AnimationTrack spielt.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Eine nur lesbare Eigenschaft, die die Länge (in Sekunden) eines AnimationTrack zurückgibt. Dies wird 0 zurückgeben, bis die Animation vollständig geladen ist und damit nicht sofort verfügbar ist.

  • Parallel lesen

    Legt fest, ob die Animation nach dem Beenden wiederholt wird. Wenn sie geändert wird, während des Spiels, wird die Animation nach dem Beenden wirksam.

  • Setzt die Priorität eines AnimationTrack. Abhängig von dem, was dies ist, wird das Spielen mehrerer Animationen auf einmal auf diese Eigenschaft zurückgreifen, um herauszufinden, welche Class.Keyframe``Class.Pose|Poses über einander gespielt werden sollen.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Die Geschwindigkeit eines AnimationTrack ist eine nur lesbare Eigenschaft, die die aktuelle Wiedergabegeschwindigkeit des AnimationTrack gibt. Dies hat einen Standardwert von 1. Wenn die Geschwindigkeit 1 beträgt, entspricht die Menge der Zeit, die eine Animation erfordert, AnimationTrack.Length (in Sekunden).

  • Nicht repliziert
    Parallel lesen

    Gibt die Position im Zeit in Sekunden zurück, in denen ein AnimationTrack durch das Spielen seiner Animationenist. Kann so eingestellt werden, dass der Track zu einem bestimmten Zeitpunkt in der Animationenspringt.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Lesbar nur Eigenschaft, die die aktuelle Gewicht des AnimationTrack gibt. Es hat einen Standardwert von 1.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Eigenschaft, die das aktuelle Gewicht des AnimationTrack gibt.

Methoden

Ereignisse

Eigenschaften

Animation

Schreibgeschützt
Nicht repliziert
Parallel lesen

Das Animation -Objekt, das verwendet wurde, um diesen AnimationTrack zu erstellen. Um einen AnimationTrack zu erstellen, musst du ein 2>Class.Animation2> -Objekt auf einem 5>Class.AnimationController5> mit dem 8>Class.Animator:LoadAnimation() -Methode laden.

Code-Beispiele

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

Schreibgeschützt
Nicht repliziert
Parallel lesen

Eine lesbare Eigenschaft, die wahr ist, wenn AnimationTrack spielt.

Dieses Eigenschaft kann von Entwicklern verwendet werden, um zu überprüfen, ob eine Animation bereits vor dem Spielen abgespielt wird (da dies die neu startenverursachen würde). Wenn ein Entwickler alle spielenden AnimationTracks auf einem Humanoid oder AnimationController erhalten möchte, sollte er 1> Class

Code-Beispiele

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

Schreibgeschützt
Nicht repliziert
Parallel lesen

Eine nur lesbare Eigenschaft, die die Länge (in Sekunden) eines AnimationTrack zurückgibt. Dies wird 0 zurückgeben, bis die Animation vollständig geladen ist und damit nicht sofort verfügbar ist.

Wenn die AnimationTrack.Speed eines AnimationTrack gleich ist, dauert die Animation AnimationTrack.Length (in Sekunden), um abzuschließen.

Code-Beispiele

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

Parallel lesen

Dieses Eigenschaft legt fest, ob die Animation nach dem Beenden wiederholt wird. Wenn sie geändert wird, während des Spiels, wird die Animation nach dem Beenden wirksam.

Die Looped-Eigenschaft für AnimationTrack wird standardmäßig darauf zurückgesetzt, wie es im Animations-Editor festgelegt ist. Dies kann jedoch geändert werden, so dass Sie die Kontrolle über die AnimationTrack während der Laufzeit des Spiels wieder ermöglichen können. Looped behandelt auch rückwärtige Animationen ( negative AnimationTrack.Speed ). Nach dem ersten Keyframe

Dieses Eigenschaft ermöglicht es dem Entwickler, eine Loop- und Nicht-Loop-Variante desselben Animationenauf Roblox hochzuladen, ohne zwei Versionen auf Roblox hochladen zu müssen.

Code-Beispiele

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)
Parallel lesen

Dieses Eigenschaft setzt die Priorität eines AnimationTrack . Abhängig von dem, was dies ist festgelegt, wird das Spielen mehrerer Animationen auf einmal auf dieses Eigenschaft zugreifen, um herauszufinden, welche Class.Keyframe``Class.Pose|Poses über einander gespielt werden sollen.

Die Prioritäts-Eigenschaft für AnimationTrack wird standardmäßig darauf gesetzt, wie sie aus Studio's Animation Editor veröffentlicht wurde. Sie verwendet Enum.AnimationPriority, die 7 Prioritätsstufen hat:

  1. Action4 (höchste Priorität)
  2. Aktion3
  3. Aktion2
  4. Aktion
  5. Bewegung
  6. Leerlauf
  7. Kern (niedrigste Priorität)

Stellen Sie die Animationsprioritäten richtig ein, entweder durch den Editor oder über diese Eigenschaften, ermöglichen Sie es, mehrere Animationen zu spielen, ohne dass sie kollidieren. Wenn zwei Animationen spielen Animationen direkt voneinander abspielen, wird die AnimationTrack mit der höchsten Priorität anzeigen. Wenn beide Animationen die gleiche Priorität haben, werden die Gewichte der Schienen verwendet, um die Animationen zu kombinieren.

Dieses Eigenschaft ermöglicht es auch dem Entwickler, die gleiche Animation bei verschiedenen Prioritäten zu spielen, ohne zusätzliche Versionen auf Roblox hochzuladen zu müssen.

Speed

Schreibgeschützt
Nicht repliziert
Parallel lesen

Die Geschwindigkeit eines AnimationTrack ist eine nur lesbare Eigenschaft, die die aktuelle Wiedergabegeschwindigkeit des AnimationTrack gibt. Dies hat einen Standardwert von 1. Wenn die Geschwindigkeit 1 beträgt, entspricht die Menge der Zeit, die eine Animation erfordert, AnimationTrack.Length (in Sekunden).

Wenn die Geschwindigkeit angepasst wird, dann kann der tatsächliche Zeitpunkt, in dem ein Schienentyp abgespielt wird, berechnet werden, indem die Länge durch die Geschwindigkeit geteilt wird. Geschwindigkeit ist eine Einheit.

Mit Geschwindigkeit kann man die Länge einer Animation mit verschiedenen Spielereignissen verknüpfen (z. B. das Nachladen einer Fähigkeit), ohne die verschiedenen Varianten desselben Animationenhochladen zu müssen.

Diese Eigenschaft ist nur lesbar und Sie können sie mit AnimationTrack:AdjustSpeed() ändern.

Code-Beispiele

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

Nicht repliziert
Parallel lesen

Gibt die Position im Zeit in Sekunden zurück, in denen ein AnimationTrack durch das Spielen seiner Animationenist. Kann so eingestellt werden, dass der Track zu einem bestimmten Zeitpunkt in der Animationenspringt.

TimePosition kann auf einen bestimmten Punkt in der Animationengesetzt werden, aber die AnimationTrack muss spielen, um dies zu tun. Es kann auch mit AnimationTrack:AdjustSpeed() kombiniert werden, um die Animation an einem bestimmten Punkt zu frieren ( indem der Speed auf 0 eingestellt wird).

Code-Beispiele

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

Schreibgeschützt
Nicht repliziert
Parallel lesen

Wenn Gewicht in einem AnimationTrack festgelegt, ändert es sich nicht sofort, sondern bewegt sich von GewichtCurrent zu AnimationTrack.WeightTarget. Die Zeit, die für diesen Vorgang benötigt wird, wird durch den FadeTime-Parameter festgelegt, der beim Spielen der Animation oder beim Anpassen des Gewichts gegeben wird.

WeightCurrent kann gegen AnimationTrack.WeightTarget überprüft werden, um zu sehen, ob das gewünschte Gewicht erreicht wurde. Beachten Sie, dass diese Werte nicht mit dem Operator == verglichen werden sollten, da beide Werte Floating sind. Um zu sehen, ob WeightCurrent das Zielgewicht erreicht hat, empfiehlt sich, wenn die Distance zwischen diesen beiden Werten ausreichend klein ist (siehe Code-Beispiel unten).

Das Animationsgewichtungssystem wird verwendet, um zu bestimmen, wie AnimationTracks , die in der gleichen Priorität spielen, miteinander verschmolzen werden. Die Standardgewichtung ist eins,

Code-Beispiele

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

Schreibgeschützt
Nicht repliziert
Parallel lesen

AnimationTrack.WeightTarget ist ein read-only-Eigenschaft, die den aktuellen Gewichtswert des AnimationTrack festlegt. Es hat einen Standardwert von 1 und

WeightCurrent kann gegen AnimationTrack.WeightTarget überprüft werden, um zu sehen, ob das gewünschte Gewicht erreicht wurde. Beachten Sie, dass diese Werte nicht mit dem Operator == verglichen werden sollten, da beide Werte Floating sind. Um zu sehen, ob WeightCurrent das Zielgewicht erreicht hat, empfiehlt sich, wenn die Distance zwischen diesen beiden Werten ausreichend klein ist (siehe Code-Beispiel unten).

Das Animationsgewichtungssystem wird verwendet, um zu bestimmen, wie AnimationTracks , die in der gleichen Priorität spielen, miteinander verschmolzen werden. Die Standardgewichtung ist eins,

Code-Beispiele

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

Methoden

AdjustSpeed

void

Diese Funktion ändert die AnimationTrack.Speed einer Animationen. Ein positiver Wert für Geschwindigkeit spielt die Animation vorwärts, ein negativer spielt sie rückwärts und 0 stoppt sie.

Die Anfangsgeschwindigkeit eines Animationswerks ist als ein Parameter in AnimationTrack:Play() festgelegt. Die Geschwindigkeit eines Werkes kann jedoch während der Wiedergabe geändert werden, indem AdjustSpeed verwendet wird. Wenn die Geschwindigkeit 1 beträgt, entspricht die Zeit, die ein Animationswerk braucht, um abzuschließen, AnimationTrack.Length (in Sekunden).

Wenn es angepasst wird, dann kann die tatsächliche Zeit, die ein Schienentyp zum Spielen benötigt, berechnet werden, indem die Länge durch die Geschwindigkeit geteilt wird. Geschwindigkeit ist eine Einheit.

Geschwindigkeit kann verwendet werden, um die Länge einer Animation mit verschiedenen Spielereignissen zu verknüpfen (z. B. das Nachladen einer Fähigkeit) ohne die verschiedenen Varianten desselben Animationenzu hochladen zu müssen.

Parameter

speed: number

Die Wiedergabegeschwindigkeit, zu der die Animation geändert werden soll.

Standardwert: 1

Rückgaben

void

Code-Beispiele

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

Ändert das Gewicht einer Animationen, mit dem optionalen fadeTime-Parameter, der bestimmt, wie lange es dauert, bis Class.AnimationTrack.WeightCurrent``Class.AnimationTrack.WeightTarget erreicht ist.

Wenn Gewicht in einem AnimationTrack festgelegt, ändert es sich nicht sofort, sondern bewegt sich von GewichtCurrent zu AnimationTrack.WeightTarget. Die Zeit, die für diesen Vorgang benötigt wird, wird durch den FadeTime-Parameter festgelegt, der beim Spielen der Animation oder beim Anpassen des Gewichts gegeben wird.

WeightCurrent kann gegen AnimationTrack.WeightTarget überprüft werden, um zu sehen, ob das gewünschte Gewicht erreicht wurde. Beachten Sie, dass diese Werte nicht mit dem Operator == verglichen werden sollten, da beide Werte Floating sind. Um zu sehen, ob WeightCurrent das Zielgewicht erreicht hat, empfiehlt sich, wenn die Distance zwischen diesen beiden Werten ausreichend klein ist (siehe Code-Beispiel unten).

Das Animationsgewichtungssystem wird verwendet, um zu bestimmen, wie AnimationTracks , die in der gleichen Priorität spielen, miteinander verschm

Parameter

weight: number

Das Gewicht, das die Animation zu ändern ist.

Standardwert: 1
fadeTime: number

Die Dauer der Zeit, die die Animation zwischen dem alten Gewicht und dem neuen Gewicht für.

Standardwert: 0.100000001

Rückgaben

void

Code-Beispiele

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

Diese Funktion gibt ein event ähnlich dem AnimationTrack.KeyframeReached -Ereignis ab, mit dem Unterschied, dass es nur abgefeuert wird, wenn ein bestimmter KeyframeMarker in einem 1> Class.Animation|Animation1> getroffen wird. Der Unterschied ermöglicht eine größere

Um mehr über die Verwendung dieser Funktion zu erfahren, siehe Animationsereignisse in dem Animations-Editor-Artikel.

Mehr über Keyframes

Keyframe Namen können in dem Roblox Animation Editor beim Erstellen oder Bearbeiten einer Animationenfestgelegt werden. Sie können jedoch nicht von einem Script auf einer bestehenden Animation vor dem Spielen festgelegt werden.

Keyframe Namen müssen nicht einzigartig sein. Zum Beispiel müssen nicht alle drei Keyframes eines Animation mit dem Namen "EmitParticles" sein, um das mit dieser Funktion zurückgegebene verbundene Ereignis jedes Mal zu aktivieren, wenn einer dieser Keyboards erreicht wird.

Siehe auch:

Parameter

name: string

Der Name des Signals wird erstellt: KeyFrameMarker.


Rückgaben

Das Signal wird erstellt und abgefeuert, wenn die Animation den erstellten KeyFrameMarker erreicht.

Code-Beispiele

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

Gibt die Zeitposition des ersten Keyframe des angegebenen Namens in einem AnimationTrack zurück. Wenn mehrere Keyframes den gleichen Namen teilen, wird der älteste in der Animationenzurückgegeben.

Diese Funktion wird einen Fehler zurückgeben, wenn sie mit einem ungültigen Keyframe-Namen verwendet wird (einer, der nicht existiert, z. B.) oder wenn die zugrunde liegende Animation noch nicht geladen ist. Um dies zu beheben, stellen Sie sicher, dass nur gültige Keyframe-Namen verwendet werden und die Animation vor dem Aufrufen dieser Funktion geladen ist.

Um zu überprüfen, ob die Animation geladen wurde, überprüfen Sie, dass die AnimationTrack.Length größer als null ist.

Parameter

keyframeName: string

Der Name, der mit dem Keyframe zu finden ist.


Rückgaben

Die Zeit, in Sekunden, die Keyframe bei normaler Wiedergabgeschwindigkeit stattfindet.

Code-Beispiele

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

Wenn AnimationTrack:Play() gerufen wird, beginnt die Animation des Schienen zu spielen, und der Gewicht der Animation wird von 0 auf das angegebene Gewicht (Standard auf 1) über den angegebenen VerblasstTime (Standard auf 0.1) erhöht.

Die Geschwindigkeit, mit der die AnimationTrack wiedergibt, wird durch den Geschwindigkeitsparameter bestimmt (Standard ist 1). Wenn die Geschwindigkeit gleich ist, ist die Anzahl der Sekunden, die der Schienentyp braucht, um sich zu verführen, gleich der Schienen- AnimationTrack.Length Eigenschaften. Zum Beispiel verursacht eine Geschwindigkeit von 2, dass der Schienentyp doppelt so schnell wiedergibt.

Das Gewicht und die Geschwindigkeit der Animation können auch nach dem Start der Animation geändert werden, indem die Methoden AnimationTrack:AdjustWeight() und AnimationTrack:AdjustSpeed() verwendet werden.

Wenn der Entwickler die Animation an einem bestimmten Punkt mit AnimationTrack.TimePosition starten möchte, ist es wichtig, dass die Animation vor diesem Zeitpunkt abgespielt wird.

Parameter

fadeTime: number

Die Dauer der Zeit, in der das Gewicht der Animationenfürbleiben soll.

Standardwert: 0.100000001
weight: number

Das Gewicht, an dem die Animation abgespielt wird.

Standardwert: 1
speed: number

Die Wiedergabegeschwindigkeit der Animationen.

Standardwert: 1

Rückgaben

void

Code-Beispiele

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

Stoppt die AnimationTrack Wiedergabe. Wenn das Spielen der AnimationTrack abgebrochen wird, stoppt das Gewicht der Animation und das Gewicht der Animation wird auf eine bestimmte Zeit über eine Zeit mit dem optionalen Verblasst Zeit-Parameter bewegt.

Zum Beispiel, wenn Stop mit einer Verblasstzeit von 2 Sekunden aufgerufen wird, dauert es zwei Sekunden, bis das Gewicht des AnimationTrack auf null und seine Effekte vollständig beenden. Bitte beachten Sie, dass dies unabhängig vom ursprünglichen Gewicht der Animationender Fall ist.

Es wird nicht empfohlen, einen Verblasstime von 0 Sekunden zu verwenden, um diesen Effekt zu überdecken und die Animation sofort nach dem Start sofort zu beenden, was die AnimationTrack-Positionen einfriert.

Parameter

fadeTime: number

Die Zeit, in Sekunden, für die Animationsgewicht wird übergehen.

Standardwert: 0.100000001

Rückgaben

void

Code-Beispiele

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)

Ereignisse

DidLoop

Dieses Ereignis wird ausgelöst, wenn ein AnimationTrack mit einer Loop-Schleife abgeschlossen ist, beim nächsten Update.

Derzeit kann es auch am genauen Ende eines nicht-Looped-Animationstracks feuern, aber dieses Verhalten sollte nicht verlassen werden.


Code-Beispiele

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

Feuert, wenn das AnimationTrack fertig ist, alles in der Welt zu bewegen. Die Animation ist fertig mit Spielen, der "Fade-Out" ist fertig, und das Thema ist in einer neutralen Pose.

Du kannst dies verwenden, um zu reagieren, wenn der Animations-Schienen-Subjekt zurück in einer neutralen Pose ist, die nicht von der AnimationTrack oder der Verbindung zurückgeht. oder um die AnimationTrack oder irgendwelche zugeordneten Verbindungen zu reinigen.


Code-Beispiele

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

Feuert jedes Mal ab, wenn eine AnimationTrack Wiedergabe ein Keyframe erreicht, das keinen Standardnamen hat - "Keyframe".

Dieses Ereignis ermöglicht es einem Entwickler, Code an bestimmten Punkten in einer Animation auszuführen (von Keyframe namens). Dies ermöglicht die Standardfunktionalität von Roblox-Animationen zu erweitern, indem Sounds oder ParticleEffects an verschiedenen Punkten in einer Animation hinzugefügt werden.

Keyframe Namen müssen nicht einzigartig sein. Zum Beispiel müssen nicht ein "Particles"-Animation drei Keyboards benennen, wenn das "Particles"-Schlüsselboard erreicht wird.

Keyframe Namen können im Roblox Animation Editor festgelegt werden, wenn eine Animationenerstellt oder bearbeitet wird. Sie können jedoch nicht von einem Script auf einer bestehenden Animation vor dem Spielen festgelegt werden.

Parameter

keyframeName: string

Der Name des Keyframe wurde erreicht.


Stopped

Feuert, wenn das AnimationTrack fertig ist, abzuspielen.

Dieses Ereignis hat eine Reihe von Verwendungszwecken. Es kann verwendet werden, um zu warten, bis ein AnimationTrack aufgehört hat, bevor es fortgesetzt wird (zum Beispiel, wenn eine Reihe von Animationen in Folge abgespielt werden). Es kann auch verwendet werden, um alle Instances , die während der Animation abgespielt werden, zu löschen.


Code-Beispiele

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)