AnimationTrack

Artık kullanılmayanları göster

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Oluşturulamaz

Bir animasyonun çalınmasını kontrol eder Animator . Bu nesne oluşturulamaz, yerine Animator:LoadAnimation() yöntemi tarafından geri döndürülür.

Özet

Özellikler

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Bu AnimationTrack oluşturmak için kullanılan Animation nesne.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    AnimationTrack oynarken gerçek dönen yalnızca okuma özelliği. A read only property that returns true when the is playing.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    AnimationTrack 'nin uzunluğunu (saniyeler içinde) geri veren yalnızca okuma özelliği.Animasyon tamamen yüklenene kadar 0 döndürülecek ve bu nedenle hemen kullanılabilir olmayabilir.

  • Paralel oku

    Animasyonun bitiminden sonra tekrarlanıp tekrarlanmayacağını ayarlar. Sonuçları oynarken değiştirilirse, animasyon bitince etki görür.

  • Bir AnimationTrack 'nin önceliğini ayarlar.Buna neyin ayarlandığına bağlı olarak, birden fazla animasyon aynı anda bu özellik üzerinde görünecek ve hangisinin birbirinin üzerinde oynanması gerektiğini bulmak için bu özellik üzerinde çalışılacaktır: Class.Keyframe``Class.Pose|Poses İki kişi üzerinde oynanması gereken hangi animasyonların oynanacağını bulmak için bu özellik üzerinde çalışılacaktır:

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    Bir AnimationTrack 'in hızı, AnimationTrack 'nin mevcut oynatma hızını veren yalnızca okuma özellikleridir.Bu, varsayılan bir değere sahiptir 1.Hız 1 ile eşit olduğunda, bir animasyonun tamamlanması için gereken süre AnimationTrack.Length (saniye) eşittir.

  • Çoğaltılmamış
    Paralel oku

    Bir AnimationTrack kaynağı animasyonunu oynarken geçen saniyelerdeki konumu döndürür.Parçanın animasyondaki belirli bir ana atlamasını sağlamak için ayarlanabilir.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    AnimationTrack 'nin mevcut ağırlığını veren sadece okuma özelliği. Varsayılan değeri 1'dir.

  • Salt Okunur
    Çoğaltılmamış
    Paralel oku

    AnimationTrack 'nin mevcut ağırlığını veren sadece okuma özelliği.

Yöntemler

Etkinlikler

Özellikler

Animation

Salt Okunur
Çoğaltılmamış
Paralel oku

Bu AnimationTrack oluşturmak için kullanılan Animation nesne.Bir oluşturmak için, yöntemi kullanarak bir nesneyi yüklemeniz gerekir.

Kod Örnekleri

Aşağıdaki kod örneği, bir animasyonun adını herhangi bir üzerinde oynadığında basar.Bu senaryo, bir çocuk Humanoid ile bir modelde yerleştirilebilir.

Yeni Animasyonları Dinle

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

Salt Okunur
Çoğaltılmamış
Paralel oku

AnimationTrack oynarken gerçek dönen yalnızca okuma özelliği. A read only property that returns true when the is playing.

Bu özellik, bir animasyonun oynatılmadan önce oynuyor olup olmadığını kontrol etmek için geliştiriciler tarafından kullanılabilir (çünkü bunun yeniden başlatmasına neden olur).Bir geliştirici tüm oynayan AnimationTracks 'i bir Animator veya bir Humanoid üzerinde almak istiyorsa, Animator:GetPlayingAnimationTracks() kullanmalıdır

Kod Örnekleri

Bu kod örneği, oynanmıyorsa bir AnimasyonParçası oynatacak basit bir işlev veya aksi takdirde verilen yeni parametrelere uyacak hız ve ağırlığı ayarlayacak başka bir işlev içerir.

AnimasyonParçası Oynuyor

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

Salt Okunur
Çoğaltılmamış
Paralel oku

AnimationTrack 'nin uzunluğunu (saniyeler içinde) geri veren yalnızca okuma özelliği.Animasyon tamamen yüklenene kadar 0 döndürülecek ve bu nedenle hemen kullanılabilir olmayabilir.

Bir AnimationTrack.Speed 'nin AnimationTrack 'sı 1 ile eşit olduğunda, animasyonun bitmesi için AnimationTrack.Length (saniye) sürecek.

Kod Örnekleri

Aşağıdaki işlev belirli bir süre için bir AnimasyonParçası oynayacaktır.Bunun yapılması için animasyonun hızını, istenen oynatma süresine bölünmüş animasyon uzunluğuna değiştirmek gerekir.Bunu, bir geliştiricinin farklı süreler için standart bir animasyon oynamak istediği durumlarda kullanabilirsiniz (örneğin, farklı yetenekleri yeniden şarj etmek).

Belirli Bir Süre için Animasyon Oynatma

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

Paralel oku

Bu özellik, animasyonun bitirildikten sonra tekrarlanıp tekrarlanmayacağını belirler.Sonuç oynarken değiştirilirse, animasyon bitince etki görür.

Looped özelliği AnimationTrack , animasyon editöründe nasıl ayarlandığına göre varsayılan değerdir.Ancak bu özellik değiştirilebilir, böylece oyun çalışırken AnimationTrack üzerinde kontrol sağlanır.Döngü ayrıca tersine oynayan animasyonları doğru bir şekilde ele alır (negatif AnimationTrack.Speed ).İlk anahtar kareye ulaştıktan sonra, son anahtar karede yeniden başlatılacaktır.

Bu özellik, geliştiricinin aynı animasyonun bir döngü ve döngü olmayan bir varyantına sahip olmasını sağlar, Roblox'a iki sürüm yüklemeye gerek kalmadan.

Kod Örnekleri

Bu örnekteki animasyon normalde döngü yapar.Oyuncu ve animasyon yüklendikten sonra animasyon, döngüsüz bir şekilde ardından döngüsüz bir şekilde oynanır.

Animasyon Döngüsü

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

Bu kod örneğindeki işlev, animasyonu durdurmadan önce belirli bir döngüde bir Animasyonİzini oynatacaktır, bir dizi için belirli bir sayı.

Bazı durumlarda, geliştirici bir döngü sona erdikten sonra belirli bir sayıda döngü bitirmek yerine, belirli bir süre sonra bir döngü animasyonunu durdurmak isteyebilir.DidLoop etkinliği burada kullanılabilir.

Bir Dizi Sayısı için Animasyon Parçası Oynat

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() -- artık gerekmediğinde bağlantıları koparmak önemlidir
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)
Paralel oku

Bu özellik, bir AnimationTrack 'in önceliğini ayarlar.Buna neyin ayarlandığına bağlı olarak, birden fazla animasyon aynı anda bu özellik üzerinde görünecek ve hangisinin birbirinin üzerinde oynanması gerektiğini bulmak için bu özellik üzerinde çalışılacaktır: Class.Keyframe``Class.Pose|Poses İki kişi üzerinde oynanması gereken hangi animasyonların oynanacağını bulmak için bu özellik üzerinde çalışılacaktır:

Öncelik özelliği AnimationTrack , Studio'nun Animasyon Editörü 'undan nasıl ayarlandığı ve yayınlandığına göre değişir.7 öncelik seviyesi olan Enum.AnimationPriority kullanır:

  1. Eylem4 (en yüksek öncelik)
  2. Eylem3
  3. Eylem2
  4. Eylem
  5. Hareket
  6. Boşluk
  7. Çekirdek (en düşük öncelik)

Animasyon önceliklerini doğru bir şekilde ayarlamak, editör aracılığıyla veya bu özellik aracılığıyla, çakışmadan birden fazla animasyonun oynatılmasına izin verir.İki oynama animasyonu, hedefin aynı ekstremiteyi farklı şekillerde hareket ettirmesini sağlarken, en yüksek önceliğe sahip AnimationTrack gösterilecektir.Her iki animasyon da aynı önceliğe sahipse, animasyonları birleştirmek için izlerin ağırlıkları kullanılacaktır.

Bu özellik ayrıca geliştiricinin, Roblox'a ekstra sürümler yüklemeye gerek kalmadan farklı önceliklerde aynı animasyonu oynatmasına izin verir.

Speed

Salt Okunur
Çoğaltılmamış
Paralel oku

Bir AnimationTrack 'in hızı, AnimationTrack 'nin mevcut oynatma hızını veren yalnızca okuma özellikleridir.Bu, varsayılan bir değere sahiptir 1.Hız 1 ile eşit olduğunda, bir animasyonun tamamlanması için gereken süre AnimationTrack.Length (saniye) eşittir.

Hız ayarlandıysa, oynatmak için gereken gerçek süre, uzunluğu hızla bölerek hesaplanabilir.Hız bir birimsiz miktardır.

Hız, aynı animasyonun uzunluğunu farklı oyun etkinliklerine bağlamak için kullanılabilir (örneğin bir yeteneğin yeniden şarj edilmesi) aynı animasyonun farklı çeşitlerini yüklemeye gerek kalmadan.

Bu özellik yalnızca okunur ve AnimationTrack:AdjustSpeed() kullanarak değiştirebilirsiniz.

Kod Örnekleri

Bu örnekte bir oyuncu ve bir animasyon yüklenir.Bir Animasyon Parçasının uzunluğu, hız 1'deyken parçanın ne kadar süreceğini belirler.Hız ayarlandıysa, oynatmak için gereken gerçek süre, uzunluğu hızla bölerek hesaplanabilir.

Animasyon Hızı

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

Aşağıdaki işlev belirli bir süre için bir AnimasyonParçası oynayacaktır.Bunun yapılması için animasyonun hızını, istenen oynatma süresine bölünmüş animasyon uzunluğuna değiştirmek gerekir.Bunu, bir geliştiricinin farklı süreler için standart bir animasyon oynamak istediği durumlarda kullanabilirsiniz (örneğin, farklı yetenekleri yeniden şarj etmek).

Belirli Bir Süre için Animasyon Oynatma

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

Çoğaltılmamış
Paralel oku

Bir AnimationTrack kaynağı animasyonunu oynarken geçen saniyelerdeki konumu döndürür.Parçanın animasyondaki belirli bir ana atlamasını sağlamak için ayarlanabilir.

ZamanPozisyonu, animasyondaki belirli bir noktaya gitmek için ayarlanabilir, ancak bunu yapmak için AnimationTrack oynatılmalıdır.Ayrıca, animasyonu istediğiniz noktada dondurmak için AnimationTrack:AdjustSpeed() ile birlikte kullanılabilir (hızı 0'a ayarlayarak).

Kod Örnekleri

Aşağıdaki kod örneği, bir animasyonu belirli bir noktada dondurmak için AdjustSpeed ve TimePosition nasıl kullanılabileceğini gösteren iki işlev içeriyor.

İlk işlev, bir animasyonu belirli bir zamanda dondurur (saniyeler içinde tanımlanır).İkinci yüzde sabitlenir (% 0 veya 100 arasında) yüzdeyi iz uzunluğuyla çarparak.

Bir Animasyon İzleri oynatılmıyor olduğunda TimePosition kullanılamadığından, işlevler devam etmeden önce animasyonun oynadığından emin olmak için kontrol edilir.

Konumda Animasyonu Dondur

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Oynatılmıyorsa animasyonu oynat
animationTrack:Play()
end
-- Animasyonu dondurmak için hızı 0'a ayarlayın
animationTrack:AdjustSpeed(0)
-- İstediğiniz TimePosition'a atlayın
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Oynatılmıyorsa animasyonu oynat
animationTrack:Play()
end
-- Animasyonu dondurmak için hızı 0'a ayarlayın
animationTrack:AdjustSpeed(0)
-- İstediğiniz TimePosition'a atlayın
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

Salt Okunur
Çoğaltılmamış
Paralel oku

Ağırlık bir AnimationTrack içinde ayarlanırken aniden değişmez, ancak AğırlıkCurrent'ten AnimationTrack.WeightTarget 'ye taşınır.Bunu yapmak için gereken süre, animasyon oynatıldığında veya ağırlık ayarlandığında verilen fadeTime parametresi tarafından belirlenir.

İstediğiniz ağırlığa ulaşıp ulaşmadığını görmek için WeightCurrent, AnimationTrack.WeightTarget karşı kontrol edilebilir.Bu değerlerin == işleci ile eşit olup olmadığı kontrol edilmemesi gerektiğini unutmayın, çünkü bu değerlerin her ikisi de float'tur.WeightCurrent'in hedef ağırlığa ulaştığını görmek için, bu değerler arasındaki mesafenin yeterince küçük olup olmadığını görmek önerilir (aşağıdaki kod örneğine bakın).

Animasyon ağırlık sistemi, aynı öncelikte nasıl AnimationTracks karar vermek için kullanılır.Varsayılan ağırlık bir tanesidir ve hiçbir hareket sıfır ağırlık ile bir AnimationTrack üzerinde görünmeyecektir.Herhangi bir zamanda gösterilen poz, tüm Poses 'in ağırlıklı ortalaması ve her bir AnimationTrack 'in AğırlıkCurrent tarafından belirlenir.Çoğu durumda, animasyonların karıştırılması gerekmiyor ve AnimationTrack.Priority kullanılması daha uygun.

Kod Örnekleri

Bu kod örneği, yerel oyuncunun Humanoid'ine iki animasyon yükler ve AnimationTrack.Play'deki fadeTime parametresinin bir AnimasyonTrack'ın AğırlıkHedefine ulaşmasının ne kadar sürdüğünü gösterir.

AğırlıkCurrent ve AğırlıkHedefi yüzükler olduğundan Weight== işleci kullanılarak karşılaştırılamaz, bunun yerine aralarındaki farkın yeterince küçük olduğundan emin olmak daha uygundur, böylece ağırlık kaybı bitmiş olduğu varsayılır.

AğırlıkCurrent ve AğırlıkTarget

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) -- karakterin yere düşmesine izin vermek için rastgele bekleme süresi
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

Salt Okunur
Çoğaltılmamış
Paralel oku

AnimationTrack.WeightTarget, AnimationTrack 'nin mevcut ağırlığını veren okunabilir bir özelliktir.Varsayılan değeri 1'dir ve AnimationTrack:Play() , AnimationTrack:Stop() veya AnimationTrack:AdjustWeight() çağrıldığında ayarlanır.Ağırlık bir AnimationTrack içinde ayarlanırken aniden değişmez, ancak AğırlıkCurrent'ten AnimationTrack.WeightTarget 'ye taşınır.Bunu yapmak için gereken süre, animasyon oynatıldığında veya ağırlık ayarlandığında verilen fadeTime parametresi tarafından belirlenir.

İstediğiniz ağırlığa ulaşıp ulaşmadığını görmek için WeightCurrent, AnimationTrack.WeightTarget karşı kontrol edilebilir.Bu değerlerin == işleci ile eşit olup olmadığı kontrol edilmemesi gerektiğini unutmayın, çünkü bu değerlerin her ikisi de float'tur.WeightCurrent'in hedef ağırlığa ulaştığını görmek için, bu değerler arasındaki mesafenin yeterince küçük olup olmadığını görmek önerilir (aşağıdaki kod örneğine bakın).

Animasyon ağırlık sistemi, aynı öncelikte nasıl AnimationTracks karar vermek için kullanılır.Varsayılan ağırlık bir tanesidir ve hiçbir hareket sıfır ağırlık ile bir AnimationTrack üzerinde görünmeyecektir.Herhangi bir zamanda gösterilen poz, tüm Poses 'in ağırlıklı ortalaması ve her bir AnimationTrack 'in AğırlıkCurrent tarafından belirlenir.Çoğu durumda, animasyonların karıştırılması gerekmiyor ve AnimationTrack.Priority kullanılması daha uygun.

Kod Örnekleri

Bu kod örneği, yerel oyuncunun Humanoid'ine iki animasyon yükler ve AnimationTrack.Play'deki fadeTime parametresinin bir AnimasyonTrack'ın AğırlıkHedefine ulaşmasının ne kadar sürdüğünü gösterir.

AğırlıkCurrent ve AğırlıkHedefi yüzükler olduğundan Weight== işleci kullanılarak karşılaştırılamaz, bunun yerine aralarındaki farkın yeterince küçük olduğundan emin olmak daha uygundur, böylece ağırlık kaybı bitmiş olduğu varsayılır.

AğırlıkCurrent ve AğırlıkTarget

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) -- karakterin yere düşmesine izin vermek için rastgele bekleme süresi
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 kısmını değiştirir.Hız için pozitif bir değer animasyonu ileri oynatır, negatif biri geri oynatır ve 0 onu durdurur.

Bir Animasyon Parçasının başlangıç hızı AnimationTrack:Play() 'de bir parametre olarak ayarlanır.Ancak bir parçanın Hızı oynatma sırasında değiştirilebilir, AdjustSpeed kullanarak.Hız 1 ile eşit olduğunda, bir animasyonun tamamlanması için gereken süre AnimationTrack.Length (saniye) eşittir.

Düzeltildiğinde, oynatmak için gereken gerçek süre hızla bölünerek hesaplanabilir. Hız bir birimsiz miktardır.

Hız, aynı animasyonun uzunluğunu farklı oyun etkinliklerine bağlamak için kullanılabilir (örneğin bir yeteneğin yeniden şarj edilmesi) aynı animasyonun farklı çeşitlerini yüklemeye gerek kalmadan.

Parametreler

speed: number

Animasyonun değiştirileceği oynatma hızı.

Varsayılan değer: 1

Dönüşler

()

Kod Örnekleri

Aşağıdaki işlev belirli bir süre için bir AnimasyonParçası oynayacaktır.Bunun yapılması için animasyonun hızını, istenen oynatma süresine bölünmüş animasyon uzunluğuna değiştirmek gerekir.Bunu, bir geliştiricinin farklı süreler için standart bir animasyon oynamak istediği durumlarda kullanabilirsiniz (örneğin, farklı yetenekleri yeniden şarj etmek).

Belirli Bir Süre için Animasyon Oynatma

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)

Bu örnekte bir oyuncu ve bir animasyon yüklenir.Bir Animasyon Parçasının uzunluğu, hız 1'deyken parçanın ne kadar süreceğini belirler.Hız ayarlandıysa, oynatmak için gereken gerçek süre, uzunluğu hızla bölerek hesaplanabilir.

Animasyon Hızı

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, seçilen fadeTime parametri ile AnimationTrack.WeightCurrent 'nin ne kadar sürede ulaşacağına karar verir AnimationTrack.WeightTarget .

Ağırlık bir AnimationTrack içinde ayarlanırken aniden değişmez, ancak AğırlıkCurrent'ten AnimationTrack.WeightTarget 'ye taşınır.Bunu yapmak için gereken süre, animasyon oynatıldığında veya ağırlık ayarlandığında verilen fadeTime parametresi tarafından belirlenir.

İstediğiniz ağırlığa ulaşıp ulaşmadığını görmek için WeightCurrent, AnimationTrack.WeightTarget karşı kontrol edilebilir.Bu değerlerin == işleci ile eşit olup olmadığı kontrol edilmemesi gerektiğini unutmayın, çünkü bu değerlerin her ikisi de float'tur.WeightCurrent'in hedef ağırlığa ulaştığını görmek için, bu değerler arasındaki mesafenin yeterince küçük olup olmadığını görmek önerilir (aşağıdaki kod örneğine bakın).

Animasyon ağırlık sistemi, aynı öncelikte nasıl AnimationTracks karar vermek için kullanılır.Varsayılan ağırlık bir tanesidir ve hiçbir hareket sıfır ağırlık ile bir AnimationTrack üzerinde görünmeyecektir.Herhangi bir zamanda gösterilen poz, tüm Poses 'in ağırlıklı ortalaması ve her bir AnimationTrack 'in AğırlıkCurrent tarafından belirlenir.Pratikte animasyon birleştirmenin bir örneğini aşağıda görün.Çoğu durumda, animasyonların karıştırılması gerekmiyor ve AnimationTrack.Priority kullanılması daha uygun.

Parametreler

weight: number

Animasyonun değiştirilmesi gereken ağırlık.

Varsayılan değer: 1
fadeTime: number

Animasyonun eski ağırlık ve yeni ağırlık arasında kaybolacağı süre.

Varsayılan değer: 0.100000001

Dönüşler

()

Kod Örnekleri

Bu kod örneği, bir AnimasyonParçası'nın ağırlığını değiştiren bir işlev içerir ve ağırlık yeni hedef ağırlığına değişene kadar verir.

Bu örneğin amacı, AnimationTrack.AdjustWeight'in fadeTime parametresinin nasıl çalıştığını göstermektir.Çoğu durumda, bir geliştirici pusu süresini aşmak istiyorsa, beklemesini (pusu süresi) kullanması önerilir.

Animasyon İz Değiştirme Ağırlığı

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, belirtilen bir event olayında sadece vurulduğunda ateşlenmesi dışında AnimationTrack.KeyframeReached etkinliğine benzer bir KeyframeMarker döndürür, ancak sadece bir animation 'de vurulduğunda vurulur.Fark, olayın ne zaman ateşleneceğinin daha fazla kontrolünü sağlar.

Bu işlevin kullanımı hakkında daha fazla bilgi edinmek için Animasyon Etkinlikleri Animasyon Editörü makalesine bakın.

Ayrıca bakın:

Parametreler

name: string

Sinyalin adı oluşturuluyor. KeyframeMarker ile karıştırılmamalıdır. Keyframe adıyla.

Varsayılan değer: ""

Dönüşler

Animasyon oluşturulduğunda ve ateş edildiğinde yaratılan sinyal. ile karıştırılmamalıdır.

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.

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

Parametreler

name: string
Varsayılan değer: ""

Dönüşler

GetTargetNames


Dönüşler

GetTimeOfKeyframe

Verilen adın ilk Keyframe 'inin saat pozisyonunu bir AnimationTrack 'de döndürür.Birden fazla Keyframes aynı adı paylaşırsa, animasyondaki en erken olanı döndürecektir.

Bu işlev, geçersiz bir anahtar kare adıyla kullanılırsa veya temel Animation henüz yüklenmediyse bir hata döndürecektir.Bunu ele almak için yalnızca doğru anahtar kare isimlerinin kullanıldığından ve bu işlev çağrılmadan önce animasyonun yüklendiğinden emin olun.

Animasyonun yüklendiğini kontrol etmek için, AnimationTrack.Length 'nin sıfırdan büyük olduğundan emin olun.

Parametreler

keyframeName: string

Bulunacak Keyframe ile ilişkili olan isim.

Varsayılan değer: ""

Dönüşler

Saniyeler içinde, Keyframe normal oynatma hızında meydana gelir.

Kod Örnekleri

Bu örnek, bir Animasyonİzinde belirtilen isimin ilk anahtar kareye atlayacak bir işlev içerir.

Animasyon oynarken AnimationTrack.TimePosition ayarı yapılamazken, animasyon ilk önce oynuyor mu kontrol etmek için ilk önce fonksiyonu oynatır.

Bu örnek yalnızca bir Animasyon yüklendikten sonra çalışacaktır.

Anahtar çerçevesine atla

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

()

When AnimationTrack:Play() çağrıldığında, izin animasyonu oynayışa başlayacak ve animasyonun ağırlığı belirtilen ağırlıktan 0'a yükselecek (Varsayılan 1'e) belirtilen fadeTime (Varsayılan 0.1'e) üzerinde.

AnimationTrack ın oynayacağı hız, hız parametresiyle belirlenir (Varsayılan 1'dir).Hız 1 ile eşit olduğunda, parçanın tamamlanması için gereken saniye sayısı parçanın AnimationTrack.Length özelliği ile eşit olur.Örneğin, 2 hızı, parçanın iki kat daha hızlı çalmasına neden olacaktır.

Animasyonun ağırlığı ve hızı, animasyonun çalmaya başladıktan sonra AnimationTrack:AdjustWeight() ve AnimationTrack:AdjustSpeed() yöntemlerini kullanarak değiştirilebilir.

Geliştirici, animasyonu AnimationTrack.TimePosition kullanarak belirli bir noktada başlatmak istiyorsa, animasyonun bunun yapılmadan önce oynatılması önemlidir.

Parametreler

fadeTime: number

animasyonağırlığının kaybolması gereken süre.

Varsayılan değer: 0.100000001
weight: number

Animasyonun oynanacağı ağırlık.

Varsayılan değer: 1
speed: number

animasyonoynatma hızı.

Varsayılan değer: 1

Dönüşler

()

Kod Örnekleri

Aşağıdaki işlev belirli bir süre için bir AnimasyonParçası oynayacaktır.Bunun yapılması için animasyonun hızını, istenen oynatma süresine bölünmüş animasyon uzunluğuna değiştirmek gerekir.Bunu, bir geliştiricinin farklı süreler için standart bir animasyon oynamak istediği durumlarda kullanabilirsiniz (örneğin, farklı yetenekleri yeniden şarj etmek).

Belirli Bir Süre için Animasyon Oynatma

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)

Aşağıdaki kod örneği, bir animasyonu belirli bir noktada dondurmak için AdjustSpeed ve TimePosition nasıl kullanılabileceğini gösteren iki işlev içeriyor.

İlk işlev, bir animasyonu belirli bir zamanda dondurur (saniyeler içinde tanımlanır).İkinci yüzde sabitlenir (% 0 veya 100 arasında) yüzdeyi iz uzunluğuyla çarparak.

Bir Animasyon İzleri oynatılmıyor olduğunda TimePosition kullanılamadığından, işlevler devam etmeden önce animasyonun oynadığından emin olmak için kontrol edilir.

Konumda Animasyonu Dondur

function freezeAnimationAtTime(animationTrack, timePosition)
if not animationTrack.IsPlaying then
-- Oynatılmıyorsa animasyonu oynat
animationTrack:Play()
end
-- Animasyonu dondurmak için hızı 0'a ayarlayın
animationTrack:AdjustSpeed(0)
-- İstediğiniz TimePosition'a atlayın
animationTrack.TimePosition = timePosition
end
function freezeAnimationAtPercent(animationTrack, percentagePosition)
if not animationTrack.IsPlaying then
-- Oynatılmıyorsa animasyonu oynat
animationTrack:Play()
end
-- Animasyonu dondurmak için hızı 0'a ayarlayın
animationTrack:AdjustSpeed(0)
-- İstediğiniz TimePosition'a atlayın
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

()

Parametreler

name: string
Varsayılan değer: ""
target: Instance
Varsayılan değer: ""

Dönüşler

()

Stop

()

AnimationTrack durdurur.Bir kez çağrıldıktan sonra, animasyonun ağırlığı seçilen opcional fadeTime parametresi tarafından belirlenen bir süre boyunca sıfıra doğru hareket edecektir.Örneğin, eğer ile çağrılırsa, yolun ağırlığının sıfıra ulaşması ve etkilerinin bitiriki saniye sürecek.Lütfen unutmayın, bu durum animasyonun başlangıç ​​ağırlığına rağmen geçerli olacaktır.

Bu etkiyi geçersiz kılmaya ve animasyonu hemen bitirmeye çalışırken bir kullanmak önerilmez, çünkü bunun nedeniyle eklemler dondurulur.Hemen bitirilmesi gerekiyorsa, ekipmanınızdaki düzgün bir şekilde yapışabilmeleri için yeterince yüksek olduğundan emin olun.

Parametreler

fadeTime: number

Animasyon ağırlığının silineceği süre, saniyeler içinde. The time, in seconds, for which animation weight is to be faded out over.

Varsayılan değer: 0.100000001

Dönüşler

()

Kod Örnekleri

Bu kod örneği, belirli bir fadeTime ile bir Animasyonİzini durduran bir işlev içerir ve fade bitene kadar ve Animasyonİzinin ağırlığı sıfıra eşit olana kadar verir.

Bu örneğin amacı, AnimationTrack.Stop'un fadeTime parametresinin nasıl çalıştığını göstermektir.Çoğu durumda, bir geliştirici pusu süresini aşmak istiyorsa, beklemesini (pusu süresi) kullanması önerilir.

Animasyon İz Durdurma

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 olay, bir döngü AnimationTrack döngüsü sona erdiğinde, bir sonraki güncellemede herhangi bir döngü bitirildiğinde ateşlenir.

Şu anda ayrıca non-döngü animasyon izinin kesin sonuna ateş edebilir, ancak bu davranışa güvenilmemelidir.


Kod Örnekleri

Bu kod örneğindeki işlev, animasyonu durdurmadan önce belirli bir döngüde bir Animasyonİzini oynatacaktır, bir dizi için belirli bir sayı.

Bazı durumlarda, geliştirici bir döngü sona erdikten sonra belirli bir sayıda döngü bitirmek yerine, belirli bir süre sonra bir döngü animasyonunu durdurmak isteyebilir.DidLoop etkinliği burada kullanılabilir.

Bir Dizi Sayısı için Animasyon Parçası Oynat

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() -- artık gerekmediğinde bağlantıları koparmak önemlidir
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 ettirme işlemi tamamlandığında AnimationTrack ateş eder.Animasyon oynatılmayı bıraktı, "solgun" bitirildi ve konu nötr bir pozisyonda.

Animasyon izinin konusu nötr bir pozisyona geri döndüğünde veya AnimationTrack tarafından etkilenmediğinde harekete geçmek veya AnimationTrack temizlemek için bunu kullanabilirsiniz.veya herhangi bir bağlantı.


Kod Örnekleri

Bu kod örneğindeki işlev bir animasyon izi oynar ve durduktan ve bitene kadar verir, yol boyunca her adımda yazdırır.

Animasyon İzini Bitirdi

local InsertService = game:GetService("InsertService")
local Players = game:GetService("Players")
-- Animasyon için bir NPC modeli oluştur.
local npcModel = Players:CreateHumanoidModelFromUserId(129687796)
npcModel.Name = "JoeNPC"
npcModel.Parent = workspace
npcModel:MoveTo(Vector3.new(0, 15, 4))
local humanoid = npcModel:WaitForChild("Humanoid")
-- Bir animasyon yükle.
local animationModel = InsertService:LoadAsset(2510238627)
local animation = animationModel:FindFirstChildWhichIsA("Animation", true)
local animator = humanoid:WaitForChild("Animator")
local animationTrack = animator:LoadAnimation(animation)
-- Duraklama olayına bağlanın. Animasyon durduğunda ateş edilir
-- kendi anlaşması, ya da açıkça Durdur diyoruz.
animationTrack.Stopped:Connect(function()
print("Animation stopped")
end)
-- Bitmiş etkinliğe bağlanın. Bu, animasyon tamamen bitince ateşlenir
-- dünyayı etkilemeyi bitirdi. Bu durumda 3 saniye ateş edecek
-- animasyonTrack:Stop çağırdıktan sonra çünkü bir 3 geçiyoruz
-- ikinci kaybolma.
animationTrack.Ended:Connect(function()
print("Animation ended")
animationTrack:Destroy()
end)
-- Koş, oynayacak biraz ver, sonra dur.
print("Calling Play")
animationTrack:Play()
task.wait(10)
print("Calling Stop")
animationTrack:Stop(3)

KeyframeReached

Oynatma her seferinde bir AnimationTrack ın varsayılan adına sahip olmayan bir Keyframe 'e ulaşır - "Anahtar çerçeve".

Bu etkinlik, bir geliştiricinin bir animasyonda önceden tanımlanmış noktalarda kod çalıştırmasına izin verir (Keyframe isimleri tarafından ayarlanır).Bu, Roblox animasyonlarının varsayılan işlevselliğinin, bir animasyondaki farklı noktalara Sounds veya ParticleEffects ekleyerek genişletilmesine izin verir.

Keyframe isimlerin eşsiz olması gerekmez.Örneğin, bir Animasyon "Parçacıklar" olarak adlandırılan üç anahtar kareye sahipse, KeyframeReached etkinliği her seferinde bu anahtar karelerden birine ulaşıldığında ateşlenecektir.

Keyframe adları, bir animasyon oluştururken veya düzenlerken Roblox Animasyon Editöründe ayarlanabilir.Bununla birlikte, oynatmadan önce mevcut bir animasyonda bir Script tarafından ayarlanamazlar.

Parametreler

keyframeName: string

Keyframe adına ulaşıldı.


Stopped

Oyun bitirildiğinde her zaman AnimationTrack ateş eder.

Bu etkinin bir dizi kullanımı vardır.Devam etmeden önce bir AnimationTrack durdurana kadar beklemek için kullanılabilir (örneğin, bir dizi animasyonun birbirinden sonra oynatılması için zincirlenmesi).Animasyon oynatımı sırasında oluşturulan herhangi bir Instances temizlemek için de kullanılabilir.


Kod Örnekleri

Bu kod örneğindeki işlev bir animasyon izi oynayacak ve baskı yapmadan önce durana kadar bekleyecek.

Animasyon Parçası Durduruldu

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)