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 Animator. 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 dieses AnimationTrack zu erstellen.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Eine nur lesbare Eigenschaft, die wahr zurückgibt, wenn die AnimationTrack gespielt wird.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Ein nur lesbares Eigenschaft, die die Länge (in Sekunden) eines AnimationTrack zurückgibt.Dies gibt 0 zurück, bis die Animation vollständig geladen ist und daher möglicherweise nicht sofort verfügbar ist.

  • Parallel lesen

    Legt fest, ob die Animation nach Beendigung wiederholt wird. Wenn sie während des Spiels geändert wird, tritt die Änderung erst dann in Kraft, wenn die Animation beendet ist.

  • Legt die Priorität eines AnimationTrack fest.Abhängig davon, was dies festgelegt ist, wird das Spielen mehrerer Animationen gleichzeitig danach suchen, welche Class.Keyframe``Class.Pose|Poses über einander abgespielt 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, ist die Zeit, die eine Animation benötigt, um abgeschlossen zu werden, gleich AnimationTrack.Length (in Sekunden).

  • Nicht repliziert
    Parallel lesen

    Gibt die Position in Sekunden zurück, in denen ein AnimationTrack seine Animationenwiedergibt.Kann festgelegt werden, um den Sprung der Schiene zu einem bestimmten Moment in der Animationenzu machen.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Lesbare Eigenschaft, die das aktuelle Gewicht des AnimationTrack gibt. Sie hat einen Standardwert von 1.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Lesbare 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 dieses AnimationTrack zu erstellen.Um eine AnimationTrack zu erstellen, müssen Sie ein Animation Objekt mit der Methode Animator auf ein Animator:LoadAnimation() laden.

Code-Beispiele

Das folgende Codebeispiel druckt den Namen einer Animation aus, wann immer eine AnimationTrack auf einer Humanoid gespielt wird.Dieses Skript kann in einem Modell mit einem Humanoid Kind platziert werden.

Auf neue Animationen hören

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

Schreibgeschützt
Nicht repliziert
Parallel lesen

Eine nur lesbare Eigenschaft, die wahr zurückgibt, wenn die AnimationTrack gespielt wird.

Dieses Eigenschaft kann von Entwicklern verwendet werden, um zu überprüfen, ob eine Animation bereits abgespielt wird, bevor sie abgespielt wird (da dies dazu führen würde, dass sie neu neu startenwird).Wenn ein Entwickler alle Spielen AnimationTracks auf einem Animator oder einem Humanoid erhalten möchte, sollte er Animator:GetPlayingAnimationTracks() verwenden

Code-Beispiele

Dieses Codebeispiel enthält eine einfache Funktion, die eine Animation abspielt, wenn sie nicht abgespielt wird, oder sonst ihre Geschwindigkeit und ihr Gewicht an die neuen gegebenen Parameter anpasst.

AnimationTrack spielt

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

Ein nur lesbares Eigenschaft, die die Länge (in Sekunden) eines AnimationTrack zurückgibt.Dies gibt 0 zurück, bis die Animation vollständig geladen ist und daher möglicherweise nicht sofort verfügbar ist.

Wenn das AnimationTrack.Speed von einem AnimationTrack gleich 1 ist, dauert die Animation AnimationTrack.Length (in Sekunden) zum Abschluss.

Code-Beispiele

Die folgende Funktion wird eine Animationstrack für eine bestimmte Dauer abspielen.Dies wird durch Ändern der Geschwindigkeit der Animation auf die Länge der Animation getan, geteilt durch die gewünschte Wiedergabezeit.Dies könnte in Situationen verwendet werden, in denen ein Entwickler eine Standardanimation für unterschiedliche Dauer wiedergeben möchte (zum Beispiel die Wiederaufladung verschiedener Fähigkeiten).

Animation abspielen für eine bestimmte Dauer

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

Diese Eigenschaft legt fest, ob die Animation nach Beendigung wiederholt wird.Wenn es während des Spiels geändert wird, tritt die Änderung erst dann in Kraft, wenn die Animation abgeschlossen ist.

Die Looped-Eigenschaft für AnimationTrack Standardlegt fest, wie sie im Animations-Editor festgelegt wurde.Dieses Eigenschaft kann jedoch geändert werden, wodurch die Kontrolle über das AnimationTrack während des Spiels erlaubt wird.Looped behandelt auch richtig Animationen, die in umgekehrter Richtung abgespielt werden (negative AnimationTrack.Speed ).Nachdem der erste Schlüsselfrahmen erreicht wurde, wird er beim letzten Keyframeneu gestartet.

Diese Eigenschaft ermöglicht es dem Entwickler, eine wiederholbare und nicht wiederholbare Variante derselben Animationenzu haben, ohne zwei Versionen auf Roblox hochladen zu müssen.

Code-Beispiele

Die Animation in diesem Beispiel läuft normalerweise in Schleifen.Nachdem der Spieler und die Animation geladen wurden, wird die Animation in einer nicht wiederholten Weise abgespielt, dann in einer wiederholten Weise.

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

Die Funktion in diesem Codebeispiel wird eine Animation auf einer Schleife wiedergeben, für eine bestimmte Anzahl von Schleifen, bevor die Animation gestoppt wird.

In einigen Fällen möchte der Entwickler eine wiederholte Animation nach einer bestimmten Anzahl von Schleifen abbrechen, anstatt nach einer bestimmten Zeit.Dies ist der Ort, an dem das DidLoop-Ereignis verwendet werden kann.

Spiele eine Animationsschiene für eine Anzahl von Schleifen

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() -- es ist wichtig, verbindungen zu trennen, wenn sie nicht mehr benötigt werden
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

Diese Eigenschaft legt die Priorität eines AnimationTrack fest.Abhängig davon, was dies festgelegt ist, wird das Spielen mehrerer Animationen gleichzeitig danach suchen, welche Class.Keyframe``Class.Pose|Poses über einander abgespielt werden sollen.

Die Prioritätseigenschaft für AnimationTrack Standardlegende, wie sie aus dem Animations-Editor von Studio festgelegt und veröffentlicht wurde.Es verwendet Enum.AnimationPriority, das 7 Prioritätebenen hat:

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

Die richtige Festlegung der Animationsprioritäten, entweder durch den Editor oder durch diese Eigenschaften, ermöglicht es, mehrere Animationen zu spielen, ohne dass sie kollidieren.Wo zwei spielende Animationen das Ziel dazu bringen, dasselbe Glied auf unterschiedliche Weise zu bewegen, wird die AnimationTrack mit der höchsten Priorität angezeigt.Wenn beide Animationen die gleiche Priorität haben, werden die Gewichte der Schienen verwendet, um die Animationen zu kombinieren.

Diese Eigenschaft ermöglicht es dem Entwickler auch, die gleiche Animation mit unterschiedlichen Prioritäten abzuspielen, ohne zusätzliche Versionen auf Roblox hochladen 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, ist die Zeit, die eine Animation benötigt, um abgeschlossen zu werden, gleich AnimationTrack.Length (in Sekunden).

Wenn die Geschwindigkeit angepasst wird, kann die tatsächliche Zeit, die es dauert, einen Track zu spielen, durch Division der Länge durch die Geschwindigkeit berechnet werden.Geschwindigkeit ist eine unbestimmte Menge.

Geschwindigkeit kann verwendet werden, um die Länge einer Animation mit verschiedenen Spielereignissen zu verknüpfen (zum Beispiel das Aufladen einer Fähigkeit), ohne verschiedene Varianten derselben Animationenhochladen zu müssen.

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

Code-Beispiele

In diesem Beispiel wird ein Spieler und eine Animation geladen.Die Länge eines Animations-Tracks legt fest, wie lange der Track dauern würde, wenn die Geschwindigkeit bei 1 wäre.Wenn die Geschwindigkeit angepasst wird, kann die tatsächliche Zeit, die es dauert, einen Track zu spielen, durch Division der Länge durch die Geschwindigkeit berechnet werden.

Animationsgeschwindigkeit

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

Die folgende Funktion wird eine Animationstrack für eine bestimmte Dauer abspielen.Dies wird durch Ändern der Geschwindigkeit der Animation auf die Länge der Animation getan, geteilt durch die gewünschte Wiedergabezeit.Dies könnte in Situationen verwendet werden, in denen ein Entwickler eine Standardanimation für unterschiedliche Dauer wiedergeben möchte (zum Beispiel die Wiederaufladung verschiedener Fähigkeiten).

Animation abspielen für eine bestimmte Dauer

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 in Sekunden zurück, in denen ein AnimationTrack seine Animationenwiedergibt.Kann festgelegt werden, um den Sprung der Schiene zu einem bestimmten Moment in der Animationenzu machen.

Die Zeitposition kann auf einen bestimmten Punkt in der Animationengesetzt werden, aber der AnimationTrack muss spielen, um dies zu tun.Es kann auch in Kombination mit AnimationTrack:AdjustSpeed() verwendet werden, um die Animation an einem gewünschten Punkt einzufrieren (indem die Geschwindigkeit auf 0 gesetzt wird).

Code-Beispiele

Das folgende Codebeispiel enthält zwei Funktionen, die zeigen, wie AdjustSpeed und TimePosition verwendet werden können, um eine Animation an einem bestimmten Punkt einzufrieren.

Die erste Funktion friert eine Animation an einem bestimmten Zeitpunkt ein (definiert in Sekunden).Die zweite friert bei einem Prozentsatz ein (zwischen 0 oder 100), indem der Prozentsatz durch die Schienenlänge multipliziert wird.

Da TimePosition nicht verwendet werden kann, wenn eine Animation nicht abgespielt wird, überprüfen die Funktionen, ob die Animation vor dem Fortfahren abgespielt wird.

Animation einfrieren an Position

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Spiele die Animation, wenn sie nicht abgespielt wird
animationTrack:Play()
end
-- Stelle die Geschwindigkeit auf 0 ein, um die Animation einzufrieren
animationTrack:AdjustSpeed(0)
-- Springen Sie zur gewünschten Zeitposition
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Spiele die Animation, wenn sie nicht abgespielt wird
animationTrack:Play()
end
-- Stelle die Geschwindigkeit auf 0 ein, um die Animation einzufrieren
animationTrack:AdjustSpeed(0)
-- Springen Sie zur gewünschten Zeitposition
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 das Gewicht in einem AnimationTrack festgelegt wird, ändert es sich nicht sofort, sondern bewegt sich von GewichtCurrent zu AnimationTrack.WeightTarget.Die Zeit, die dafür benötigt wird, wird durch den FadeTime-Parameter bestimmt, der gegeben wird, wenn die Animation abgespielt oder das Gewicht angepasst 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 für die Gleichheit mit dem ==-Operator überprüft werden sollten, da beide dieser Werte Schwebwerte sind.Um zu sehen, ob WeightCurrent das Zielgewicht erreicht hat, wird empfohlen, zu überprüfen, ob die Entfernung zwischen diesen Werten klein genug ist (siehe Code-Beispiel unten).

Das Animationsgewichtungssystem wird verwendet, um zu bestimmen, wie AnimationTracks mit derselben Priorität zusammen gemischt werden.Das Standardgewicht ist eins, und keine Bewegung wird auf einem AnimationTrack mit einem Gewicht von null sichtbar sein.Die Pose, die zu einem beliebigen Zeitpunkt angezeigt wird, wird durch den gewichteten Durchschnitt aller Poses und das Gewicht derzeit von jedem AnimationTrack bestimmt.In den meisten Fällen ist die Mischung von Animationen nicht erforderlich und die Verwendung von AnimationTrack.Priority ist geeigneter.

Code-Beispiele

Dieses Codebeispiel lädt zwei Animationen auf den Humanoid des lokalen Spielers und zeigt, wie der FadeTime-Parameter in AnimationTrack.Play feststellt, wie lange es dauert, bis das Gewicht eines Animationstracks sein Gewichtsziel erreicht.

Da WeightCurrent und WeightTarget Floating sind, kann der ==-Operator nicht zum Vergleich verwendet werden, stattdessen ist es eher angemessen, zu überprüfen, dass der Unterschied zwischen ihnen klein genug ist, um anzunehmen, dass der Gewichtsverlust abgeschlossen ist.

WeightCurrent und 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) -- willkürliche wartezeit, um dem charakter das einfallen zu ermöglichen
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 lesbare Eigenschaft, die das aktuelle Gewicht des AnimationTrack gibt.Es hat einen Standardwert von 1 und wird festgelegt, wenn AnimationTrack:Play() , AnimationTrack:Stop() oder AnimationTrack:AdjustWeight() aufgerufen wird.Wenn das Gewicht in einem AnimationTrack festgelegt wird, ändert es sich nicht sofort, sondern bewegt sich von GewichtCurrent zu AnimationTrack.WeightTarget.Die Zeit, die dafür benötigt wird, wird durch den FadeTime-Parameter bestimmt, der gegeben wird, wenn die Animation abgespielt oder das Gewicht angepasst 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 für die Gleichheit mit dem ==-Operator überprüft werden sollten, da beide dieser Werte Schwebwerte sind.Um zu sehen, ob WeightCurrent das Zielgewicht erreicht hat, wird empfohlen, zu überprüfen, ob die Entfernung zwischen diesen Werten klein genug ist (siehe Code-Beispiel unten).

Das Animationsgewichtungssystem wird verwendet, um zu bestimmen, wie AnimationTracks mit derselben Priorität zusammen gemischt werden.Das Standardgewicht ist eins, und keine Bewegung wird auf einem AnimationTrack mit einem Gewicht von null sichtbar sein.Die Pose, die zu einem beliebigen Zeitpunkt angezeigt wird, wird durch den gewichteten Durchschnitt aller Poses und das Gewicht derzeit von jedem AnimationTrack bestimmt.In den meisten Fällen ist die Mischung von Animationen nicht erforderlich und die Verwendung von AnimationTrack.Priority ist geeigneter.

Code-Beispiele

Dieses Codebeispiel lädt zwei Animationen auf den Humanoid des lokalen Spielers und zeigt, wie der FadeTime-Parameter in AnimationTrack.Play feststellt, wie lange es dauert, bis das Gewicht eines Animationstracks sein Gewichtsziel erreicht.

Da WeightCurrent und WeightTarget Floating sind, kann der ==-Operator nicht zum Vergleich verwendet werden, stattdessen ist es eher angemessen, zu überprüfen, dass der Unterschied zwischen ihnen klein genug ist, um anzunehmen, dass der Gewichtsverlust abgeschlossen ist.

WeightCurrent und 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) -- willkürliche wartezeit, um dem charakter das einfallen zu ermöglichen
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

()

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

Die initiale Geschwindigkeit eines Animations-Tracks wird als ein Parameter in AnimationTrack:Play() festgelegt.Die Geschwindigkeit eines Tracks kann jedoch während der Wiedergabe geändert werden, indem AdjustSpeed verwendet wird.Wenn die Geschwindigkeit 1 beträgt, ist die Zeit, die eine Animation benötigt, um abgeschlossen zu werden, gleich AnimationTrack.Length (in Sekunden).

Wann wird angepasst, dann kann die tatsächliche Zeit berechnet werden, die ein Track benötigt, um zu spielen, indem die Länge durch die Geschwindigkeit geteilt wird. Geschwindigkeit ist eine unbestimmte Menge.

Geschwindigkeit kann verwendet werden, um die Länge einer Animation mit verschiedenen Spielereignissen zu verknüpfen (zum Beispiel das Aufladen einer Fähigkeit), ohne verschiedene Varianten derselben Animationenhochladen zu müssen.

Parameter

speed: number

Die Wiedergabegeschwindigkeit, die die Animation zu ändern ist.

Standardwert: 1

Rückgaben

()

Code-Beispiele

Die folgende Funktion wird eine Animationstrack für eine bestimmte Dauer abspielen.Dies wird durch Ändern der Geschwindigkeit der Animation auf die Länge der Animation getan, geteilt durch die gewünschte Wiedergabezeit.Dies könnte in Situationen verwendet werden, in denen ein Entwickler eine Standardanimation für unterschiedliche Dauer wiedergeben möchte (zum Beispiel die Wiederaufladung verschiedener Fähigkeiten).

Animation abspielen für eine bestimmte Dauer

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 diesem Beispiel wird ein Spieler und eine Animation geladen.Die Länge eines Animations-Tracks legt fest, wie lange der Track dauern würde, wenn die Geschwindigkeit bei 1 wäre.Wenn die Geschwindigkeit angepasst wird, kann die tatsächliche Zeit, die es dauert, einen Track zu spielen, durch Division der Länge durch die Geschwindigkeit berechnet werden.

Animationsgeschwindigkeit

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

()

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

Wenn das Gewicht in einem AnimationTrack festgelegt wird, ändert es sich nicht sofort, sondern bewegt sich von GewichtCurrent zu AnimationTrack.WeightTarget.Die Zeit, die dafür benötigt wird, wird durch den FadeTime-Parameter bestimmt, der gegeben wird, wenn die Animation abgespielt oder das Gewicht angepasst 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 für die Gleichheit mit dem ==-Operator überprüft werden sollten, da beide dieser Werte Schwebwerte sind.Um zu sehen, ob WeightCurrent das Zielgewicht erreicht hat, wird empfohlen, zu überprüfen, ob die Entfernung zwischen diesen Werten klein genug ist (siehe Code-Beispiel unten).

Das Animationsgewichtungssystem wird verwendet, um zu bestimmen, wie AnimationTracks mit derselben Priorität zusammen gemischt werden.Das Standardgewicht ist eins, und keine Bewegung wird auf einem AnimationTrack mit einem Gewicht von null sichtbar sein.Die Pose, die zu einem beliebigen Zeitpunkt angezeigt wird, wird durch den gewichteten Durchschnitt aller Poses und das Gewicht derzeit von jedem AnimationTrack bestimmt.Siehe unten für ein Beispiel der Animationen-Mischung in der Praxis.In den meisten Fällen ist die Mischung von Animationen nicht erforderlich und die Verwendung von AnimationTrack.Priority ist geeigneter.

Parameter

weight: number

Das Gewicht, das die Animation geändert werden soll.

Standardwert: 1
fadeTime: number

Die Dauer der Zeit, in der die Animation zwischen dem alten Gewicht und dem neuen Gewicht verschwindet.

Standardwert: 0.100000001

Rückgaben

()

Code-Beispiele

Dieses Codebeispiel enthält eine Funktion, die das Gewicht eines Animationstracks ändert und bis das Gewicht auf das neue Zielgewicht geändert wird, zurückgibt.

Der Zweck dieses Beispiels ist es, zu zeigen, wie der FadeTime-Parameter von AnimationTrack.AdjustWeight funktioniert.In den meisten Fällen, wenn ein Entwickler die Verbleibszeit überschreiben möchte, wird empfohlen, dass er wait(Verbleibszeit) verwendet.

AnimationTrack Änderungsgewicht

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 eine event ähnlich wie das Ereignis AnimationTrack.KeyframeReached zurück, außer dass sie nur abgefeuert wird, wenn ein bestimmtes KeyframeMarker in einem animation getroffen wurde.Der Unterschied ermöglicht eine größere Kontrolle darüber, wann das Ereignis initiierenwird.

Um mehr über die Verwendung dieser Funktion zu erfahren, siehe Animationsereignisse im Artikel Animation-Editor.

Siehe auch:

Parameter

name: string

Der Name des Signals, für das KeyframeMarker erstellt wird, wird nicht mit dem Namen des Keyframe verwechselt.

Standardwert: ""

Rückgaben

Das Signal, das erstellt und abgefeuert wird, wenn die Animation die erstellte KeyframeMarker erreicht. Nicht mit dem Namen des Keyframe zu verwechseln.

Code-Beispiele

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

Parameter

name: string
Standardwert: ""

Rückgaben

GetTargetNames


Rückgaben

GetTimeOfKeyframe

Gibt die Zeitposition des ersten Keyframe des angegebenen Namens in einem AnimationTrack zurück.Wenn mehrere Keyframes denselben Namen teilen, wird die früheste in der Animationenzurückgegeben.

Diese Funktion gibt einen Fehler zurück, wenn sie mit einem ungültigen Schlüsselframe-Namen verwendet wird (einem, der zum Beispiel nicht existiert) oder wenn die darunterliegende Animation noch nicht geladen wurde.Um dies zu adressieren, stellen Sie sicher, dass nur korrekte Schlüsselframe-Namen verwendet werden und die Animation geladen wurde, bevor diese Funktion aufgerufen wird.

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

Parameter

keyframeName: string

Der Name, der mit dem Keyframe verbunden ist, zu finden.

Standardwert: ""

Rückgaben

Die Zeit, in Sekunden, tritt der Keyframe bei normaler Wiedergabegeschwindigkeit auf.

Code-Beispiele

Dieses Beispiel enthält eine Funktion, die zum ersten Schlüsselfrahmen eines angegebenen Namens in einem Animations-Track springt.

Da AnimationTrack.TimePosition nicht festgelegt werden kann, während die Animation die Funktion nicht zuerst spielt, überprüft der erste Check, ob die Animation abgespielt wird.

Dieses Beispiel wird nur funktionieren, wenn eine Animation geladen wurde.

Zum Schlüsselfrahmen springen

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

()

Wenn AnimationTrack:Play() aufgerufen wird, beginnt die Animation des Tracks zu spielen, und das Gewicht der Animation steigt von 0 auf das angegebene Gewicht (Standard ist 1) über die angegebene Verbleichzeit (Standard ist 0.1).

Die Geschwindigkeit, mit der die AnimationTrack spielen wird, wird durch den Geschwindigkeitsparameter bestimmt (默认值为 1).Wenn die Geschwindigkeit 1 gleich ist, ist die Anzahl der Sekunden, die der Track zum Abschluss benötigt, gleich der Eigenschaftendes Tracks AnimationTrack.Length.Zum Beispiel verursacht eine Geschwindigkeit von 2, dass die Strecke doppelt so schnell gespielt wird.

Das Gewicht und die Geschwindigkeit der Animation können auch geändert werden, nachdem die Animation mit den Methoden AnimationTrack:AdjustWeight() und AnimationTrack:AdjustSpeed() begonnen hat zu spielen.

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

Parameter

fadeTime: number

Die Dauer, für die das Gewicht der Animationenverblasst sein sollte.

Standardwert: 0.100000001
weight: number

Das Gewicht, mit dem die Animation abgespielt werden soll.

Standardwert: 1
speed: number

Die Wiedergabegeschwindigkeit der Animationen.

Standardwert: 1

Rückgaben

()

Code-Beispiele

Die folgende Funktion wird eine Animationstrack für eine bestimmte Dauer abspielen.Dies wird durch Ändern der Geschwindigkeit der Animation auf die Länge der Animation getan, geteilt durch die gewünschte Wiedergabezeit.Dies könnte in Situationen verwendet werden, in denen ein Entwickler eine Standardanimation für unterschiedliche Dauer wiedergeben möchte (zum Beispiel die Wiederaufladung verschiedener Fähigkeiten).

Animation abspielen für eine bestimmte Dauer

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)

Das folgende Codebeispiel enthält zwei Funktionen, die zeigen, wie AdjustSpeed und TimePosition verwendet werden können, um eine Animation an einem bestimmten Punkt einzufrieren.

Die erste Funktion friert eine Animation an einem bestimmten Zeitpunkt ein (definiert in Sekunden).Die zweite friert bei einem Prozentsatz ein (zwischen 0 oder 100), indem der Prozentsatz durch die Schienenlänge multipliziert wird.

Da TimePosition nicht verwendet werden kann, wenn eine Animation nicht abgespielt wird, überprüfen die Funktionen, ob die Animation vor dem Fortfahren abgespielt wird.

Animation einfrieren an Position

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Spiele die Animation, wenn sie nicht abgespielt wird
animationTrack:Play()
end
-- Stelle die Geschwindigkeit auf 0 ein, um die Animation einzufrieren
animationTrack:AdjustSpeed(0)
-- Springen Sie zur gewünschten Zeitposition
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Spiele die Animation, wenn sie nicht abgespielt wird
animationTrack:Play()
end
-- Stelle die Geschwindigkeit auf 0 ein, um die Animation einzufrieren
animationTrack:AdjustSpeed(0)
-- Springen Sie zur gewünschten Zeitposition
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

()

Parameter

name: string
Standardwert: ""
target: Instance
Standardwert: ""

Rückgaben

()

Stop

()

Stoppt die AnimationTrack.Sobald aufgerufen, bewegt sich das Gewicht der Animation über einen Zeitraum, der vom optionalen fadeTime-Parameter angegeben wird, in Richtung Null.Wenn zum Beispiel Stop() mit einem fadeTime von 2 aufgerufen wird, dauert es zwei Sekunden, bis das Gewicht der Spur auf Null sinkt und ihre Effekte vollständig beenden.Bitte beachten Sie, dass dies der Fall sein wird, unabhängig vom ursprünglichen Gewicht der Animationen.

Es wird nicht empfohlen, ein von in einem Versuch zu verwenden, um diesen Effekt zu überschreiben und die Animation sofort für zu beenden, da dies die Gelenke an Ort und Stelle einfriert.Wenn es sofort beendet werden muss, stelle sicher, dass die Motor.MaxVelocity von Motor6Ds in deinem Rig hoch genug ist, damit sie richtig einrasten können.

Parameter

fadeTime: number

Die Zeit, in Sekunden, für die die Animation-Gewicht ausgeblendet werden soll.

Standardwert: 0.100000001

Rückgaben

()

Code-Beispiele

Dieses Codebeispiel enthält eine Funktion, die eine Animation mit einer bestimmten Verblassungszeit stoppt und bis zum Abschluss der Verblassung und die Gewicht des Animationstracks gleich null ist, zurückgibt.

Der Zweck dieses Beispiels ist es, zu zeigen, wie der FadeTime-Parameter von AnimationTrack.Stop funktioniert.In den meisten Fällen, wenn ein Entwickler die Verbleibszeit überschreiben möchte, wird empfohlen, dass er wait(Verbleibszeit) verwendet.

Animationsschienentitelstopp

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 eine geschleifte AnimationTrack Schleife beim nächsten Update eine Schleife abschließt.

Derzeit kann er auch am genauen Ende einer nicht verschachtelten Animationsspur abfeuern, aber dieses Verhalten sollte nicht verlassen werden.


Code-Beispiele

Die Funktion in diesem Codebeispiel wird eine Animation auf einer Schleife wiedergeben, für eine bestimmte Anzahl von Schleifen, bevor die Animation gestoppt wird.

In einigen Fällen möchte der Entwickler eine wiederholte Animation nach einer bestimmten Anzahl von Schleifen abbrechen, anstatt nach einer bestimmten Zeit.Dies ist der Ort, an dem das DidLoop-Ereignis verwendet werden kann.

Spiele eine Animationsschiene für eine Anzahl von Schleifen

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() -- es ist wichtig, verbindungen zu trennen, wenn sie nicht mehr benötigt werden
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 vollständig ist, etwas in der Welt zu bewegen.Die Animation hat aufgehört zu spielen, das "Verbleichen" ist abgeschlossen, und das Thema ist in einer neutralen Pose.

Du kannst dies verwenden, um zu handeln, wenn das Thema der Animation in eine neutrale Pose zurückkehrt, die nicht von der AnimationTrack oder vom AnimationTrack beeinträchtigt wird.oder irgendeine verbundene Verbindung.


Code-Beispiele

Die Funktion in diesem Codebeispiel spielt eine Animationsspur ab und gibt bis sie gestoppt und beendet ist, druckt auf jedem Schritt des Weges.

AnimationTrack beendet

local InsertService = game:GetService("InsertService")
local Players = game:GetService("Players")
-- Erstelle ein NPC-Modell, um zu animieren.
local npcModel = Players:CreateHumanoidModelFromUserId(129687796)
npcModel.Name = "JoeNPC"
npcModel.Parent = workspace
npcModel:MoveTo(Vector3.new(0, 15, 4))
local humanoid = npcModel:WaitForChild("Humanoid")
-- Lade eine Animation.
local animationModel = InsertService:LoadAsset(2510238627)
local animation = animationModel:FindFirstChildWhichIsA("Animation", true)
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
-- Verbindung zum gestoppten Ereignis. Dies wird ausgelöst, wenn die Animation aufhört
-- es eigenes Abkommen, oder wir rufen Stopp explizit an.
animationTrack.Stopped:Connect(function()
print("Animation stopped")
end)
-- Verbinde mit dem beendeten Ereignis. Dies wird ausgelöst, wenn die Animation vollständig ist
-- beendet, die Welt zu beeinflussen. In diesem Fall wird sie 3 Sekunden lang feuern
-- nachdem wir AnimationTrack:Stop aufgerufen haben, weil wir einen 3 übergeben
-- zweiter fadeOut.
animationTrack.Ended:Connect(function()
print("Animation ended")
animationTrack:Destroy()
end)
-- Laufen, gib es ein bisschen zum Spielen, dann stopp.
print("Calling Play")
animationTrack:Play()
task.wait(10)
print("Calling Stop")
animationTrack:Stop(3)

KeyframeReached

Feuert jedes Mal ab, wenn die Wiedergabe eines AnimationTrack einen Keyframe erreicht, der keinen Standardnamen hat - "Keyframe".

Dieses Ereignis ermöglicht es einem Entwickler, Code an vorgegebenen Punkten in einer Animation auszuführen (durch Keyframe Namen festgelegt).Dies ermöglicht es, die Standardfunktionalität von Roblox-Animationen durch Hinzufügen von Sounds oder ParticleEffects an verschiedenen Stellen einer Animation zu erweitern.

Keyframe Namen müssen nicht einzigartig sein.Wenn zum Beispiel eine Animation drei Schlüsselframes mit dem Namen "Particles" hat, wird das KeyframeReached-Ereignis jedes Mal ausgelöst, wenn einer dieser Schlüsselframes erreicht wird.

Keyframe Namen können im Roblox-Animations-Editor festgelegt werden, wenn eine Animationenerstellt oder bearbeitet wird.Sie können jedoch nicht durch ein Script auf einer vorhandenen Animation festgelegt werden, bevor sie abgespielt wird.

Parameter

keyframeName: string

Der Name der Keyframe erreicht.


Stopped

Feuert immer dann, wenn das AnimationTrack spielen beendet wird.

Dieses Ereignis hat eine Reihe von Verwendungen.Es kann verwendet werden, bis ein AnimationTrack aufgehört hat, bevor es fortgesetzt wird (zum Beispiel, wenn eine Reihe von Animationen in Serie abgespielt werden soll, nachdem sie sich gegenseitig abgespielt haben).Es kann auch verwendet werden, um jede Instances zu löschen, die während des Animationsabspiels erstellt wurde.


Code-Beispiele

Die Funktion in diesem Code-Beispiel wird eine Animation abspielen und bis zum Stillstand abgeben, bevor sie gedruckt wird.

Animationsschiene angehalten

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)