AnimationTrack
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Bir animasyonun oynatılmasını bir AnimationController üzerinde kontrol eder. Bu nesne oluşturulmaz, onun yerine Animator:LoadAnimation() yöntemi tarafından döndürülür.
Özet
Özellikler
Bu Animation oluşturmak için kullanılan AnimationTrack nesnesi.
Oyun çalındığında AnimationTrack çalındığında geri dönen sadece okuma özelliğidir.
Bir okuma yalnızca özelliği, bir AnimationTrack 'in uzunluğunu (saniye olarak) iade eder. Bu, animasyonun tamamen yüklendiğine kadar 0'u iade edecektir ve bu nedenle derhal mevcut olmayabilir.
Animasyonun bitiminden sonra tekrarlanacağını ayarlar. Sonuç oynarken değiştirilirse, animasyonun bitiminden sonra etkisi alınır.
Bir AnimationTrack ın önceliğini ayarlar. Bu, bu ayarlandığına bağlı olarak, birden fazla animasyonu aynı anda oynatmak bu özellikte görünür. Hangisi oynanacağına dair bu özellikteki diğer tarafta, birden fazla animasyonun oynanacağını bulmak için bu özellikteki diğer tarafta görünür.
Bir AnimationTrack 'in hızı, AnimationTrack 'nin mevcut oynatma hızını okuyabilen bir okuma yalnızca özelliktir. Bu, hızı 1 olarak ayarlanır ve animasyonun tamamlanması için gereken süre AnimationTrack.Length (saniye olarak) eşittir.
Bir AnimationTrack ın kaynağını oynatarak zamanında pozisyonunu iade eder. Animasyonun oynatma animasyonunu belirli bir anda atlayabilir.
Class.AnimationTrack 'in mevcut ağırlığını veren sadece okuma özelliği.Varsayılan değeri 1'dir.
AnimationTrack 'nin mevcut ağırlığını veren sadece okuma özelliği olan bir özellik.
Yöntemler
Bir animasyonun AnimationTrack.Speed değerini değiştirir. Bir pozitif hız değeri, animasyonu ileriye çeker, bir negatif değeri, animasyonu geriye oynatır ve 0 onu durdurur.
Bir animasyonun ağırlığını değiştirir, AnimationTrack.WeightCurrent ile AnimationTrack.WeightTarget arasında ne kadar süreceğini belirleyen seçici fadeTime parametresiyle.
Belirli bir event ile vurulduğunda çalışan bir KeyframeMarker döndürür.
Verilen ismin ilk Keyframe'ının saat pozisyonunu bir AnimationTrack içinde iade eder.
Oyunlar AnimationTrack. Bir AnimationTrack çağrıldığında, belirlenen fadeTime, weight ve hızla oynayacaktır.
Class.AnimationTrack ın oynatılmasını durdurur. Bir AnimationTrack ın oynatılmasını durdurduktan sonra, animasyonun ağırlığı belirli bir süre için sıfıra hareket eder ve özelleştirilen fadeTime parametresi tarafından belirlenen süre boyunca animasyonun boyutu artar.
Etkinlikler
Önceki animasyon döngüsünün bitiminden sonra bir AnimationTrack çözümü oluşturduğunda ateştir.
Dünyadaki herhangi bir şeyi hareket ettirmeyi tamamladığında ateşlenir. Animasyon oynadığını bitirdi ve "solgun" bitti. Konu nötr bir pozisyonda.
Bir AnimationTrack oynatmasının her oynatma Keyframe şu anda "Keyframe" isminde olmayan bir isme sahip olması durumunda yanlış yere yanlış yere yanılır.
Animaasyon takibının oynatmasını bitirdiğinde ateş eder. Animaasyon takibi hala etkisizleştirilmiş olarak Animaasyon takibi hala etkisizleştirilmiş olarak Animaasyon takibi hala etkisizleştirilmiş olarak Animaasyon takibi hala etkisizleştirilmiş olarak Animaasyon takibi hala etkisizleştirilmiş olarak Animaasyon takibi hala etk
Özellikler
Animation
Bu AnimationTrack oluşturmak için kullanılan AnimationTrack nesnesi. Bir 1> Class.AnimationTrack1> oluşturmak için, bir 4> Class.Animator:LoadAnimation()4> yöntemini kullanarak bir 7> Class.Animation7> nes
Kod Örnekleri
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.
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
Oyun çalındığında AnimationTrack çalındığında geri dönen sadece okuma özelliğidir.
Bu özellik, geliştiricilerin bir animasyonun önce oynanıp oynanmadığını kontrol etmesine izin verir (çünkü bu onu yeniden başlatacaktır). Bir geliştirici tüm oynayan AnimationTracks bir Humanoid veya Class.Animation
Kod Örnekleri
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.
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
Bir okuma yalnızca özelliği, bir AnimationTrack 'in uzunluğunu (saniye olarak) iade eder. Bu, animasyonun tamamen yüklendiğine kadar 0'u iade edecektir ve bu nedenle derhal mevcut olmayabilir.
Bir AnimationTrack.Speed ın animasyonu 1 ile eşit olduğunda, animasyon AnimationTrack (saniye) sürecek.
Kod Örnekleri
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).
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
Bu özellik animasyonun bitiminden sonra tekrarlanacağını belirtir. Eğer sonuç oynarken değiştirilirse, animasyonun bitiminden sonra etki edecektir.
Looped özelliği AnimationTrack için animasyon editöründe ayarlanan şekliyle varsayılır. Ancak bu özellik değiştirilebilir, kontrolü AnimationTrack ile oyun çalışırken sağlayabilir. Looped ayrıca ters çalıştırılan animasyonları (
Bu özellik, geliştiricinin aynı animasyonun bir dizi ve bir dizi olmayan çeşitlerine sahip olmasını sağlar, Roblox'a iki versiyon yüklemeye gerek kalmadan.
Kod Örnekleri
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.
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.
local function playForNumberLoops(animationTrack, number)
animationTrack.Looped = true
animationTrack:Play()
local numberOfLoops = 0
local connection = nil
connection = animationTrack.DidLoop:Connect(function()
numberOfLoops = numberOfLoops + 1
print("loop: ", numberOfLoops)
if numberOfLoops >= number then
animationTrack:Stop()
connection:Disconnect() -- it's important to disconnect connections when they are no longer needed
end
end)
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
playForNumberLoops(animationTrack, 5)
Priority
Bu özellik, bir AnimationTrack ın önceliğini ayarlar. Bu, bu ayarlanıyor olana bağlı olarak, birden fazla animasyonu aynı anda oynatmak bu özellikte görünür. Hangisi oynanacağını belirlemek için bu özellikteki herhangi bir Keyframe ile Poses arasındaki herhangi
Class.AnimationTrack için öncelik özelliği Studio'nun Animasyon Editör 'inden nasıl ayarlanıp yayınlandığına varsayılır. Kullanır Enum.AnimationPriority, 7 öncelik seviyesine sahiptir.
- Action4 (en yüksek öncelik)
- Eylem3
- Eylem2
- Eylem
- Hareket
- Aktif Değil
- Çekirdek (en düşük öncelik)
Animasyon önceliklerini, herhangi bir tarayıcı aracılığıyla veya bu özellik aracılığıyla ayarlayın, birkaç animasyonun oynatılmasına izin verir, onlar çarpışmaz. Eğer iki oynatma animasyonunun hepsi aynı önceliğe sahipse, eşit ağırlıklı olarak kayıplarının kombinasyonu g
Bu özellik, geliştiricinin Roblox'a ekstra versiyonlar yüklemeden aynı animasyonu oynayabilmesine izin verir.
Speed
Bir AnimationTrack 'in hızı, AnimationTrack 'nin mevcut oynatma hızını okuyabilen bir okuma yalnızca özelliktir. Bu, hızı 1 olarak ayarlanır ve animasyonun tamamlanması için gereken süre AnimationTrack.Length (saniye olarak) eşittir.
Eğer hız ayarlanırsa, bir izi çalmak için gereken zaman aslı hesaplanabilir, çünkü uzunluğu hızla bölünür. Hız bir özellik değildir.
Hız, aynı animasyonun farklı oyun etkinliklerine bağlanmasını sağlayan bir animasyonun uzunluğunu farklı oyun etkinliklerine bağlayabilir (örneğin bir yeteneği yeniden yükleme) olmadan yüklemenize gerek yok.
Bu özellik sadece okunur ve bunu AnimationTrack:AdjustSpeed() ile değiştirebilirsiniz.
Kod Örnekleri
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.
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).
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
Bir AnimationTrack ın kaynağını oynatarak zamanında pozisyonunu iade eder. Animasyonun oynatma animasyonunu belirli bir anda atlayabilir.
TimePosition, animasyondaki belirli bir noktaya gitmeyi ayarlayabilir, ancak AnimationTrack , bunu yapmak için çalıştırılmalıdır. Ayrıca Class.AnimationTrack:AdjustSpeed() ile birleştirilebilir ve animasyonu istediğiniz noktada dondurabilir (hızı 0 olarak ayarlayarak).
Kod Örnekleri
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.
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
Ağırlık bir AnimationTrack içinde ayarlanırsa, anlık olarak değiştirilmez, ancak WeightCurrent'den AnimationTrack.WeightTarget 'e hareket eder. Bunu yapmak için animasyon oynatıldığında verilen fadeTime özelliğine göre,yağış ağırlığı ayarlanır veya ağırlık düzeltilir.
WeightCurrent, istediğiniz ağırlığa ulaşıp ulaşmadığınızı görmek için AnimationTrack.WeightTarget ile karşılaştırılabilir. Bu değerlerin eşitliğini görmek için == operatörüyle değil, bu değerlerin her biri float'tır. Ağırlığın istediğiniz değerle eşit olup olmadığını
Animasyon ağırlıklandırma sistemi, oyunun aynı önceliği üzerinde oynanan AnimationTracks ın karıştığını belir
Kod Örnekleri
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.
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
while not localPlayer.Character do
task.wait()
end
local character = localPlayer.Character
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation1 = Instance.new("Animation")
animation1.AnimationId = "rbxassetid://507770453"
local animation2 = Instance.new("Animation")
animation2.AnimationId = "rbxassetid://507771019"
task.wait(3) -- arbitrary wait time to allow the character to fall into place
local animationTrack1 = animator:LoadAnimation(animation1)
local animationTrack2 = animator:LoadAnimation(animation2)
animationTrack1.Priority = Enum.AnimationPriority.Movement
animationTrack2.Priority = Enum.AnimationPriority.Action
animationTrack1:Play(0.1, 5, 1)
animationTrack2:Play(10, 3, 1)
local done = false
while not done and task.wait(0.1) do
if math.abs(animationTrack2.WeightCurrent - animationTrack2.WeightTarget) < 0.001 then
print("got there")
done = true
end
end
WeightTarget
AnimationTrack.WeightTarget, AnimationTrack 'nin mevcut ağırlığını veren okuma yalnız bir özelliktir.
WeightCurrent, istediğiniz ağırlığa ulaşıp ulaşmadığınızı görmek için AnimationTrack.WeightTarget ile karşılaştırılabilir. Bu değerlerin eşitliğini görmek için == operatörüyle değil, bu değerlerin her biri float'tır. Ağırlığın istediğiniz değerle eşit olup olmadığını
Animasyon ağırlıklandırma sistemi, oyunun aynı önceliği üzerinde oynanan AnimationTracks ın karıştığını belir
Kod Örnekleri
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.
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
Yöntemler
AdjustSpeed
Bu işlev, bir animasyonun AnimationTrack.Speed değerini değiştirir. Bir olumlu değer hızı ileriye çeker, bir olumsuz değer hızı geri çeker ve 0 onu durdurur.
Bir Animasyon Takibi'nin ilk hızı AnimationTrack:Play() olarak ayarlanır. Ancak bir izin hızının oynatma sırasında değiştirilebilir. AnimationTrack.Length (saniye) içinde oynatma süresi animasyonun tamamlanması için gereken süre.
Ayarlanırsa, bir izi çalmak için gereken gerçek zaman bir sayıyı bölerek hızı hesaplayabilirsiniz. Hız bir özellik değildir.
Hız, aynı animasyonun farklı oyun olaylarına bağlanmasını sağlayan bir hız dizgesi olarak kullanılabilir (örneğin, bir yeteneği yeniden yükleme) - aynı animasyonun farklı çeşitleri yüklemeden.
Parametreler
Animasyonun değiştirilmesi gereken oynatma hızı.
Dönüşler
Kod Örnekleri
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).
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.
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
Bir animasyonun ağırlığını değiştirir, AnimationTrack.WeightCurrent ile AnimationTrack.WeightTarget arasında ne kadar süreceğini belirleyen seçici fadeTime parametresiyle.
Ağırlık bir AnimationTrack içinde ayarlanırsa, anlık olarak değiştirilmez, ancak WeightCurrent'den AnimationTrack.WeightTarget 'e hareket eder. Bunu yapmak için animasyon oynatıldığında verilen fadeTime özelliğine göre,yağış ağırlığı ayarlanır veya ağırlık düzeltilir.
WeightCurrent, istediğiniz ağırlığa ulaşıp ulaşmadığınızı görmek için AnimationTrack.WeightTarget ile karşılaştırılabilir. Bu değerlerin eşitliğini görmek için == operatörüyle değil, bu değerlerin her biri float'tır. Ağırlığın istediğiniz değerle eşit olup olmadığını
Animasyon ağırlıklandırma sistemi, AnimationTracks ile aynı önceliğe sahip oynayanların karı
Parametreler
Animasyonun değiştirileceği ağırlık.
Animasyonun eski ağırlık ve yeni ağırlık arasında solacağı süre.
Dönüşler
Kod Örnekleri
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).
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
Bu işlev, event etkinliğine benzer bir AnimationTrack.KeyframeReached ile sonuç verir, ancak sadece belirli bir KeyframeMarker ile vurulduğunda başlar. Fark, etkinliğin ne zaman başlayacağını daha iyi kontrol etmenizi sağlar.
Bu işlevin kullanımı hakkında daha fazla bilgi için Animasyon Etkinlikleri bölümünde Animasyon Editör makalesinde.
Daha Fazlası Keyframe'lar
Keyframe isimleri, bir animasyonu oluştururken veya düzenlerken Roblox Animasyon Editoru 'inde ayarlanabilir. Ancak, oyun öncesi bir Class.Script ile oluşturulmuş veya düzenlenmiş islamlar ayarlanmaz.
Keyframe isimleri benzersiz olması gerekmez. Örneğin, bir Animation ın üç anahtar çerçevesi varsa, bu işlev tarafından sağlanan bağlantı etkinliği her kez bu anahtar çerçevelerinden biri alındığında başlar.
Ayrıca bakınız:
- AnimationTrack , bir animasyonun oynatılmasını Humanoid veya AnimationController üzerindeki bir oynatıcı kontrol eder
Parametreler
Sinyal oluşturulan KeyFrameMarker ın adı.
Dönüşler
Animasyon oluşturulduğunda oluşturulan sinyal oluşturulduğunda ateş edilir.
Kod Örnekleri
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.
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
Verilen ismin ilk Keyframe 'ının saat pozisyonunu bir AnimationTrack içinde iade eder. Eğer birden fazla Keyframes ismi aynı isimde paylaşırsa, animasyonun en erken kaydını iade eder.
Bu işlev geçersiz bir keyframe ismi (örneğin mevcut değil) kullanılırsa veya temel Animation henüz yüklenmediyse hata döndürür. Bu işlevi ele almak için, sadece doğru keyframe isimleri kullanıldığından emin olun ve animasyon bu işlevi çağırılmadan önce yüklenmiş olmalıdır.
Animasyonun yüklendiğini kontrol etmek için, AnimationTrack.Length ile 0'den daha büyük olduğundan emin ol.
Parametreler
Dönüşler
Kod Örnekleri
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.
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
Class.AnimationTrack:Play() çağrıldığında, eğilimi animasyonu oynatmaya başlayacak ve animasyonun ağırlığı belirlenen ağırlıkten 0'a kadar artacaktır (Varsayılan 0.1).
Oynatma hızı AnimationTrack ın oynatacağı hız belirlenir. (Varsayılan 1 olarak değiştirilebilir). Hız, hız parametresine (Varsayılan 1) göre oynatma hızını iki kat arttırır. Örneğin, 2 saniye hızı, takibi iki kat daha hızlı hale getirir.
Animasyon oynatırken kullanılan AnimationTrack:AdjustWeight() ve AnimationTrack:AdjustSpeed() yöntemleri değiştirilebilir.
Geliştirici animasyonu AnimationTrack.TimePosition kullanarak belirli bir noktada başlatmak istiyorsa, animasyonun oynanmasının bu yapılmadan önce önemli olduğunu unutmayın.
Parametreler
animasyonağırlığının solgunması gereken süre.
Animasyonun oynanacağı ağırlık.
animasyonoynatma hızı.
Dönüşler
Kod Örnekleri
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).
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.
function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Play the animation if it is not playing
animationTrack:Play()
end
-- Set the speed to 0 to freeze the animation
animationTrack:AdjustSpeed(0)
-- Jump to the desired TimePosition
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Play the animation if it is not playing
animationTrack:Play()
end
-- Set the speed to 0 to freeze the animation
animationTrack:AdjustSpeed(0)
-- Jump to the desired TimePosition
animationTrack.TimePosition = (percentagePosition / 100) * animationTrack.Length
end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
local humanoid = script.Parent:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
freezeAnimationAtTime(animationTrack, 0.5)
freezeAnimationAtPercent(animationTrack, 50)
Stop
Class.AnimationTrack ın oynatılmasını durdurur. Bir AnimationTrack ın oynatılmasını durdurduktan sonra, animasyonun ağırlığı belirli bir süre için sıfıra hareket eder ve özelleştirilen fadeTime parametresi tarafından belirlenen süre boyunca animasyonun boyutu artar.
Örneğin, Stop bir fadeTime of 2 saniye ile çağrılırsa, animasyonun etkilerinin tamamen bitirermesi için 2 saniye için iki saniye sürecek. Lütfen bunun animasyonun ilk ağırlığına bağlı olarak durum olacağını unutmayın.
Bu etkiyi geçersiz kılmaya çalışmak için 0 saniye bir solgunma zamanı kullanmak önerilmez, bu nedenle animasyonu derhal durdurmak için mevcut AnimationTrack pozisyonlarını dondurur.
Parametreler
Animasyonun solgunması için saniye olarak kaç saniye olmalı.
Dönüşler
Kod Örnekleri
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).
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)
Etkinlikler
DidLoop
Bu etkinlik, bir AnimationTrack ın döngüsünü tamamladığında herhangi bir döngüyü tamamladığında tetiklenir.
Şu anda, aşağıdaki animasyon izi sonuna doğru da ateş edebilir, ancak bu davranış güvenilmez olmalıdır.
Kod Örnekleri
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.
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
Dünyadaki herhangi bir şeyi hareket ettirmeyi tamamladığında ateşlenir. Animasyon oynadığını bitirdi ve "solgun" bitti. Konu nötr bir pozisyonda.
Animasyon takibinin konusu geri döndüğünde hızlı davranabilmek için buyu kullanabilirsiniz veya AnimationTrack veya herhangi bir ilgili bağlantıyı temizlemek için.
Kod Örnekleri
The function in this code sample plays an animationTrack and yields until it has stopped and ended, printing at each step along the way.
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
Bir AnimationTrack oynatmasının her oynatma Keyframe şu anda sahip değil - "Keyframe" ismi.
Bu etkinlik, bir animasyonda belirlenmiş noktalarda kodu çalıştırmasına izin verir (Keyframe adıyla belirlenmiş isimlerle). Bu, Roblox animasyonlarının varsayılan işlevlerinin genişletilmesine izin verir, böylece Sounds veya ParticleEffects ekleyerek farklı noktal
Keyframe isimleri benzersiz olması gerekmez. Örneğin, bir Animasyonun "Particles" olarak adlandırılmış üç anahtar çerçevesi olması durumunda, KeyframeReached etkinliği her kez bu anahtar çerçevelerden biri alındığında başlar.
Keyframe isimleri, bir animasyonu oluştururken veya düzenlerken Roblox Animasyon Editorinde ayarlanabilir. Ancak, oyun öncesi bir Class.Script ismi bir varsa, oyunu oynayabilir.
Parametreler
Class.Keyframe 'in adına ulaşıldı.
Stopped
Oyunu oynadığınızda herhangi bir anda AnimationTrack oynatmayı bitirir.
Bu etkinliğin birkaç kullanımı vardır. Bir AnimationTrack ın devam etmeden önce beklemek için kullanılabilir (örneğin, bir seri animasyonun ardından oynatmak için bağlanan bir Instances ın temizlenmesi). Ayrıca animasyon oynatma sırasında oluşturulan herhangi bir
Kod Örnekleri
The function in this code sample will play an animationTrack and yield until it has stopped, before printing.
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)