AnimationTrack
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Điều khiển việc phát lại của một hoạt họa trên một AnimationController . Đối tượng này không thể được tạo, thay vào đó nó được trả lại bởi phương pháp Animator:LoadAnimation() .
Tóm Tắt
Thuộc Tính
Đối tượng Animation đã được sử dụng để tạo ra điều này AnimationTrack .
Một tính chất đọc chỉ được trả lại true khi AnimationTrack đang chơi.
Một tính chất đọc chỉ để trả lại chiều dài (trong giây) của một AnimationTrack . Điều này sẽ trả lại 0 cho đến khi hoạt họa được tải hoàn toàn và do đó có thể không ngay lập tức có sẵn.
Đặt whether hoạt họa sẽ lặp lại sau khi kết thúc. Nếu nó được thay đổi trong khi chơi kết quả sẽ có hiệu lực sau khi hoạt họa kết thúc.
Đặt trọng tâm của một AnimationTrack . Tùy thuộc vào những gì được đặt này, chơi nhiều hoạt họa cùng một lúc sẽ tìm đến thuộc tính này để tìm ra các Keyframe , Poses nào được chơi trên
Tốc độ của một AnimationTrack là một tính chất đọc chỉ được cho phép để đưa ra tốc độ phát hiện hiện tại của AnimationTrack . Điều này có giá trị mặc định là 1. Khi tốc độ được bằng 1, số
Quay vị trí trong thời gian trong vài giây mà một AnimationTrack đang qua chơi hoạt hiệu ứng độngnguồn của nó. Có thể được cài đặt để làm cho dòng nhảy dòng nhảy của nó vào một giây cụ thể trong hoạt hiệu ứng động.
Đọc chỉnh sửa thuộc tính, mà hiện tại trọng lượng của AnimationTrack . Nó có giá trị mặc định là 1.
Đọc chỉ định tính của riêng tư mà không được đọc để lấy cân nặng hiện tại của AnimationTrack .
Phương Pháp
Thay đổi AnimationTrack.Speed của một hiệu ứng động. Một giá trị dương cho tốc độ chơi hoạt họa tiến lên, một giá trị âm để chơi hoạt họa lùi lại và 0 để kéo dài nó.
Đổi trọng lượng của một hiệu ứng động, với tham số fadeTime tùy chọn xác định thời gian bao lâu để đạt được AnimationTrack.WeightCurrent để đạt được AnimationTrack.WeightTarget .
Điều khiển trực tiếp trên một event được kích hoạt khi một KeyframeMarker được đánh trúng trong một animation .
Điều chỉnh thời gian của Class.Keyframe đầu tiên trong một Keyframe .
Chơi AnimationTrack . Sau khi gọi một AnimationTrack sẽ chơi với thời gian mờ dần, trọng lượng và tốc độ đã định.
Ngăn chặn AnimationTrack . Sau khi gọi playback của AnimationTrack sẽ dừng lại và trọng lượng của hoạt họa sẽ di chuyển đến zero trong một thời gian được xác định bởi thời gian mờ dần bằng cách sử dụng tham số fadeTime bắt buộc.
Sự Kiện
Làm nổ khi một AnimationTrack lượt vòng trên cập nhật tiếp theo sau khi kết thúc lượt vòng trước.
Lửa khi AnimationTrack đã hoàn toàn xong việc di chuyển bất cứ thứ gì trên thế giới. Hoạt họa đã kết thúc, "fade out" đã hoàn thành, và chủ đề đã ở trong tư thế trung tín.
Làm tròn mỗi lần chơi lại của một AnimationTrack đạt đến một Keyframe mà không có tên mặc định - "Keyframe".
Lửa khi AnimationTrack hoàn thành phần chơi. AnimationTrack vẫn có thể hoạt hóa chủ đề trong khi hoạt họa "mờ dần". Để bắt khi AnimationTrack hoàn toàn kết thúc di chuyển bất cứ thứ gì trên thế giới, hãy sử dụng sự kiện AnimationTrack.Ended .
Thuộc Tính
Animation
Đối tượng Animation đã được sử dụng để tạo ra AnimationTrack . Để tạo ra một AnimationTrack, bạn phải tải một 1> Class.Animation1> đối tượng lên một
Mẫu mã
local function listenForNewAnimations(humanoid)
humanoid.AnimationPlayed:Connect(function(animationTrack)
local animationName = animationTrack.Animation.Name
print("Animation playing " .. animationName)
end)
end
local humanoid = script.Parent:WaitForChild("Humanoid")
listenForNewAnimations(humanoid)
IsPlaying
Một tính chất đọc chỉ được trả lại true khi AnimationTrack đang chơi.
Thuộc tính này có thể được sử dụng bởi các nhà phát triển để kiểm tra xem hoạt họa đang chơi trước khi chơi nó (vì điều này sẽ khiến nó khởi động lại). Nếu một nhà phát triển muố
Mẫu mã
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
Một tính chất đọc chỉ để trả lại chiều dài (trong giây) của một AnimationTrack . Điều này sẽ trả lại 0 cho đến khi hoạt họa được tải hoàn toàn và do đó có thể không ngay lập tức có sẵn.
Khi AnimationTrack.Speed của một AnimationTrack bằng 1, hoạt họa sẽ mất AnimationTrack.Length (in seconds) để hoàn thành.
Mẫu mã
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
Đặt tính này để quyết định có phải lặp lại hoạt họa sau khi kết thúc hay không. Nếu được thay đổi trong khi chơi kết quả sẽ có hiệu lực sau khi hoạt họa kết thúc.
Loại tính chất AnimationTrack vòng lặp mặc định được cài đặt trong trình biên tập hoạt họa. Tuy nhiên, loại tính chất này có thể được thay đổi, cho phép kiểm soát trên AnimationTrack trong khi game
Tính năng này cho phép nhà phát triển có một biến thể lặp lại và không lặp lại cùng một hoạt hiệu ứng động, mà không cần phải tải hai phiên bản lên Roblox.
Mẫu mã
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()
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
Đặc tính này đặt trọng tấm của một AnimationTrack . Tùy thuộc vào những gì được đặt để, chơi nhiều hoạt họa cùng một lúc sẽ xem đến đặc tính này để tìm ra những Class.Keyframe``Class.Pose|Poses
Đặc tính Tiên ưu cho AnimationTrack mặc định là cách nó được cài đặt và phát sóng từ Studio's Editor Animation . Nó sử dụng Enum.AnimationPriority which có 7 cấp độ tiên ưu:
- Action4 (ưu tiên cao nhất)
- Hành động3
- Hành động2
- Hành động
- Di chuyển
- Nhàn rỗi
- Nhân bản (ưu tiên thấp nhất)
Cài đặt ưu tiên hoạt họa một cách phù hợp, thông qua trình chỉnh hoặc qua đặt này, cho phép nhiều hoạt họa được chơi mà không bị va chạm. Khi hai hoạt họa chơi trực tiếp hướng đến cùng một cánh tay trong các cách khác n
Đặc tính này cũng cho phép nhà phát triển chơi cùng một hoạt họa ở các ưu tiên khác nhau, mà không cần phải tải thêm phiên bản lên Roblox.
Speed
Tốc độ của một AnimationTrack là một tính chất đọc chỉ được cho phép để đưa ra tốc độ phát hiện hiện tại của AnimationTrack . Điều này có giá trị mặc định là 1. Khi tốc độ được bằng 1, số
Nếu tốc độ được điều chỉnh, thì thời gian thực tế mà một đường đua để chơi có thể được tính bằng cách chia chiều dài bằng tốc độ. Tốc độ là một量 không đo lường.
Tốc độ có thể được sử dụng để kết nối chiều dài của một hoạt họa với các sự kiện trò chơi khác nhau (ví dụ như tải lại một kĩ năng) mà không cần phải tải các biến thể khác nhau của cùng một hiệu ứng động.
Đặt tính này chỉ đọc, và bạn có thể thay đổi nó bằng cách sử dụng AnimationTrack:AdjustSpeed() .
Mẫu mã
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")
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
Quay vị trí trong thời gian trong vài giây mà một AnimationTrack đang qua chơi hoạt hiệu ứng độngnguồn của nó. Có thể được cài đặt để làm cho dòng nhảy dòng nhảy của nó vào một giây cụ thể trong hoạt hiệu ứng động.
TimePosition có thể được set để đến một điểm cụ thể trong hoạt hiệu ứng động, nhưng AnimationTrack phải đang chơi để làm điều đó. Nó cũng có thể được sử dụng kết hợp với AnimationTrack:AdjustSpeed() để đóng băng hoạt họa ở một điểm mong muố
Mẫu mã
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
Khi trọng lượng được đặt trong một AnimationTrack nó không thay đổi ngay lập tức nhưng di chuyển từ WeightCurrent đến AnimationTrack.WeightTarget . Thời gian mà nó mất để làm điều này được xác định bởi thời gian màu tranh giữa khi hoạt họa đ
WeightCurrent có thể được kiểm tra chống lại AnimationTrack.WeightTarget để xem có phù hợp với trọng lượng mong muốn không. Lưu ý rằng các giá trị này không nên được kiểm tra cho sự bình đồng với oper作tor ==, vì cả hai giá trị này đều là những ng
Hệ thống đánh giá trọng tài được sử dụng để xác định how AnimationTracks playing at the same priority are blended
Mẫu mã
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 là một trong những giá trị đọc chỉ định để cung cấp trọng lượng hiệ
WeightCurrent có thể được kiểm tra chống lại AnimationTrack.WeightTarget để xem có phù hợp với trọng lượng mong muốn không. Lưu ý rằng các giá trị này không nên được kiểm tra cho sự bình đồng với oper作tor ==, vì cả hai giá trị này đều là những ng
Hệ thống đánh giá trọng tài được sử dụng để xác định how AnimationTracks playing at the same priority are blended
Mẫu mã
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
Phương Pháp
AdjustSpeed
Hàm này thay đổi AnimationTrack.Speed của một hiệu ứng động. Một giá trị dương cho tốc độ chơi hoạt họa về phía trước, một giá trị âm để chơi hoạt họa về phía sau và 0 đình chỉ nó.
Tốc độ ban đầu của một AnimationTrack được đặt là một tham số trong AnimationTrack:Play() . Tuy nhiên, tốc độ của một đường dẫn có thể được thay đổi trong khi chơi, bằng cách sử dụng AdjustSpeed. Khi tốc độ là bằng nhau 1, số thời
Khi được điều chỉnh, thời gian thực tế mà nó sẽ mất để chơi một bản được tính bằng cách chia dài bằng tốc độ. Tốc độ là một lượng không đo lường.
Tốc độ có thể được sử dụng để kết nối chiều dài của một hoạt họa với các sự kiện gameplay khác nhau (ví dụ như kết nối lại một kĩ năng) mà không cần phải tải các biến thể khác nhau của cùng một hiệu ứng động.
Tham Số
Tốc độ phát lại hoạt họa được thay đổi.
Lợi Nhuận
Mẫu mã
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)
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
Đổi trọng lượng của một hiệu ứng động, với tham số fadeTime tùy chọn xác định thời gian bao lâu để đạt được AnimationTrack.WeightCurrent để đạt được AnimationTrack.WeightTarget .
Khi trọng lượng được đặt trong một AnimationTrack nó không thay đổi ngay lập tức nhưng di chuyển từ WeightCurrent đến AnimationTrack.WeightTarget . Thời gian mà nó mất để làm điều này được xác định bởi thời gian màu tranh giữa khi hoạt họa đ
WeightCurrent có thể được kiểm tra chống lại AnimationTrack.WeightTarget để xem có phù hợp với trọng lượng mong muốn không. Lưu ý rằng các giá trị này không nên được kiểm tra cho sự bình đồng với oper作tor ==, vì cả hai giá trị này đều là những ng
Hệ thống đánh giá trọng tài được sử dụng để xác định cách Class.AnimationTrack|Animation
Tham Số
Cân nặng hoạt họa được thay đổi để.
Thời gian bền vững của hoạt họa sẽ biến mất giữa các cân nặng cũ và mới cho.
Lợi Nhuận
Mẫu mã
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
Hàm này trả lại một event tương tự như sự kiện AnimationTrack.KeyframeReached, ngoại trừ nó chỉ được kích hoạt khi một KeyframeMarker được đánh trúng trong một 1> Class.Animation|
Để tìm hiểu thêm về việc sử dụng chức năng này, xem Sự kiện Hoạt Hình trong bài Chỉnh Sửa Hoạt Hình .
Thêm về Keyframes
Keyframe tên có thể được thiết lập trong Roblox Editor Animation khi tạo hoặc chỉnh sửa một hoạt hiệu ứng động. Họ không thể, tuy nhiên, được thiết lập bởi một Script trên một hoạt họa hiện có trước khi chơi nó.
Keyframe tên không cần phải độc nhất. Ví dụ, nếu một Animation có ba khung khóa khí tên "EmissionParticles", sự kiện kết nối này sẽ bắt lửa mỗi khi một trong những khung khí này được đạt được.
Xem thêm:
- AnimationTrack , điều khiển việc phát lại của một hoạt họa trên một Humanoid hoặc AnimationController
Tham Số
Tên của dấu hiệu KeyFrameMarker đang được tạo cho.
Lợi Nhuận
Tín hiệu được tạo và bắn khi hoạt họa đạt đến KeyFrameMarker đã tạo.
Mẫu mã
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
Trả về vị trí thời gian của Class.Keyframe đầu tiên trong danh sách được cho tên đó trong một Class.AnimationTrack . Nếu có nhiều Class.Keyframe|Keyframes share cùng một tên, nó sẽ trả về Class.AnimationTrack đầu tiên trong hoạt hiệu ứng động.
Hàm này sẽ trả lại một lỗi nếu nó được sử dụng với một tên khung chính xác (nhưng không tồn tại ví dụ) hoặc nếu Animation nền tảng đã không tải. Để đối phó với điều này, hãy đảm bảo tất cả các tên khung đều được sử dụng
Để kiểm tra có phải hoạt họa đã được tải, hãy xác nhận rằng AnimationTrack.Length lớn hơn 0.
Tham Số
Lợi Nhuận
Mẫu mã
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
Khi AnimationTrack:Play() được gọi, hoạt họa của đường đua sẽ bắt đầu chơi và trọng lượng của hoạt họa sẽ tăng từ 0 đến trọng lượng được quy định (mặc định là 1) trong thời gian mờ dần (mặc định là 0.1).
Tốc độ mà AnimationTrack sẽ chơi được xác định bởi cơ sở dữ liệu tốc độ (mặc định là 1). Khi tốc độ bằng nhau với 1, số giây mà con đường sẽ hoàn thành bằng giá trị AnimationTrack.Length của con đ
Cân nặng và tốc độ hoạt họa cũng có thể được thay đổi sau khi hoạt họa bắt đầu chơi bằng cách sử dụng các phương pháp AnimationTrack:AdjustWeight() và AnimationTrack:AdjustSpeed().
Nếu nhà phát triển muốn bắt đầu hoạt họa ở một điểm cụ thể bằng cách sử dụng AnimationTrack.TimePosition , thì quan trọng là hoạt họa đó được chơi trước khi điều này được thực hiện.
Tham Số
Thời gian bền của hoạt hiệu ứng độngnên biến mất trong.
Cân nặng mà hoạt họa được chơi tại.
Tốc độ phát lại của hoạt hiệu ứng động.
Lợi Nhuận
Mẫu mã
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)
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
Ngăn chặn AnimationTrack . Sau khi gọi playback của AnimationTrack sẽ dừng lại và trọng lượng của hoạt họa sẽ di chuyển đến zero trong một thời gian được xác định bởi thời gian mờ dần bằng cách sử dụng tham số fadeTime bắt buộc.
Ví dụ, nếu Stop được gọi với một fadeTime của 2 giây, nó sẽ mất hai giây để trọng lượng của Class.AnimationTrack đạt đến zero và các hiệu ứng của nó kết thúc hoàn toàn. Lưu ý rằng điều này sẽ được xảy ra bất kể trọng lượng ban đầu của hoạt hiệu ứng động.
Không được khuyến nghị sử dụng một thời gian mờ dần của 0 giây để cố gắng vượt qua hiệu ứng này và kết thúc hoạt họa ngay lập tức như hiện tại, này gây ra các đối tượng AnimationTrack hiện tại để đóng băng.
Tham Số
Thời gian, trong giây, cho đếm trọng lượng hoạt họa sẽ biến mất.
Lợi Nhuận
Mẫu mã
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)
Sự Kiện
DidLoop
Sự kiện này bắt đầu mỗi khi một vòng lặp AnimationTrack hoàn tất một vòng lặp, trong cập nhật tiếp theo.
Hiện tại nó cũng có thể bắn ở cuối chính xác của một bản đồ hoạt họa không lặp nhưng hành vi này không nên được tin cậy.
Mẫu mã
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
Lửa khi AnimationTrack đã hoàn toàn xong việc di chuyển bất cứ thứ gì trên thế giới. Hoạt họa đã kết thúc, "fade out" đã hoàn thành, và chủ đề đã ở trong tư thế trung tín.
Bạn có thể sử dụng nó để thực hiện hành động khi đường dẫn hoạt họa của chủ đề được trở lại trong tư thế trung tính mà không bị ảnh hưởng bởi AnimationTrack hoặc để làm sạch AnimationTrack . hoặc bất kỳ kết nối liên quan nào.
Mẫu mã
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
Làm tròn mỗi lần chơi lại của một AnimationTrack đạt đến một Keyframe mà không có tên mặc định - "Keyframe."
Sự kiện này cho phép một nhà phát triển chạy mã tại các điểm đã định trong một hoạt họa (được đặt bởi tên Keyframe ) . Điều này cho phép các chức năng mặc định của hoạt họa Roblox được mở rộng bằng cách thêm
Keyframe tên không cần phải độc nhất. Ví dụ, nếu một hoạt họa có ba khung khóa không có tên "Particles" thì sự kiện KeyframeReached sẽ kích hoạt mỗi lần một trong những khung khóa này được đạt đến.
Keyframe tên có thể được thiết lập trong Roblox Animation Editor khi tạo hoặc chỉnh sửa một hiệu ứng động. Tuy nhiên, chúng không thể được thiết lập bởi một Script trên một hoạt họa hiện có trước khi chơi nó.
Tham Số
Tên của Class.Keyframe đã đạt được.
Stopped
Lửa ngay khi AnimationTrack kết thúc chơi.
Sự kiện này có một loạt các lần dùng. Nó có thể được sử dụng để chờ đợi cho đến khi một AnimationTrack đã dừng trước khi tiếp tục (ví dụ, nếu kết nối một loạt các hoạt họa để chơi sau nhau). Nó cũng có thể được s
Mẫu mã
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)