KeyframeSequence
*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.
Vật này lưu tất cả các Keyframes cho một hoạt hiệu ứng động, xác định xem hoạt hình có bị lặp lại hay không, và xác định ưu tiên của nó so với các hoạt hình khác.
KeyframeSequence là gì?
Roblox xây dựng dữ liệu hoạt hình mà nó sử dụng trong phát lại của một hiệu ứng động, được tham chiếu bởi thuộc tính Animation.AnimationId từ một KeyframeSequence.Mỗi hoạt hình đề cập đến một KeyframeSequence hoặc một CurveAnimation bên trong.Mặc dù, thường được tạo bởi Trình chỉnh sửa hoạt hình Roblox, KeyframeSequence cũng có thể được tạo bởi các plugin khác hoặc thậm chí thủ công.Một khi được tải lên Roblox, Roblox gán một ID Nội dung mà Animations sử dụng cho thuộc tính Animation.AnimationId để tham chiếu đến KeyframeSequence đã tải lên.
Lưu ý, trong hầu hết các trường hợp, bạn không cần phải thao tác với KeyframeSequences, vì trình chỉnh sửa hoạt hình bao gồm hầu hết chức năng hoạt hình.Tuy nhiên, trong một số trường hợp, bạn có thể muốn tạo một hoạt hình từ một Script hoặc xây dựng plugin riêng của mình.Tuy nhiên, chỉ Roblox Studio có thể sử dụng một KeyframeSequence được tạo theo cách như vậy.Nếu bạn muốn sử dụng một KeyframeSequence như vậy, bạn sẽ cần phải tải nó lên Roblox như mô tả dưới đây.
Thuộc tính Chuỗi Khung Chính
KeyframeSequence.Priority và KeyframeSequence.Loop lưu các cài đặt ưu tiên và hoạt hình lặp lại cho chuỗi.Lưu ý rằng các thuộc tính AnimationTrack cuối cùng có thể ghi đè lên các thuộc tính này khi phát lại.
Cuối cùng Keyframe trong chuỗi, có nghĩa là Keyframe với chỉ số Keyframe.Time cao nhất, xác định chiều dài của một hiệu ứng động.
Cấu trúc KeyframeSequence
Các khung chìa khóa hoạt động như một thùng chứa giữ Keyframes .Khung chìa khóa đại diện cho một khung 'chìa khóa' trong hoạt hiệu ứng động, được xác định giữa trong lúc phát lại.
Khung chìa khóa bao gồm Poses .Poses , cụ thể cho mỗi BasePart được hoạt hình, bao gồm CFrame được áp dụng cho Motor6D kết nối hai phần.Các tư thế phù hợp với BasePart họ phù hợp với tên và áp dụng dữ liệu của họ vào Motor6D với phần có tên tương tự được xác định là Motor6D.P1 .Vì lý do này, các hoạt hình cần các tên phần riêng biệt để chơi đúng cách.
Các tư thế tuân theo một cấu trúc dựa trên cấp bậc chung.Cha của mỗi Pose tương ứng với Pose của phần nó được gắn vào.Trong thực tế, điều này có nghĩa là các cánh hoa nhánh ra từ phần gốc.Xem phía dưới để có một ví dụ hình ảnh.
Sử dụng KeyframeSequences khi tạo hoạt hình
Bạn phải đầu tiên tải lên KeyframeSequences vào Roblox trước khi chúng có thể được chơi trong một trải nghiệm.Trong Studio, nhấp chuột phải vào KeyframeSequence và nhấp vào 'Lưu vào Roblox'.Ngoài ra, bạn có thể sử dụng chức năng Plugin:SaveSelectedToRoblox().Bất kỳ phương pháp nào cũng sẽ mở cửa sổ tải lên hoạt hình và cho phép bạn tải lên KeyframeSequence của mình như một hiệu ứng động.
Trong một số trường hợp, bạn có thể muốn xem trước một hoạt hình trước khi tải lên trang web Roblox.Bạn có thể tạo một id tạm thời bằng cách sử dụng KeyframeSequenceProvider:RegisterKeyframeSequence() .Điều này sẽ tạo ra một ID băng chéo có thể được sử dụng cho kiểm tra hoạt họa địa phương.
Nhận được chuỗi khung chìa khóa
Trong một số trường hợp, bạn có thể muốn tải xuống KeyframeSequence tương ứng với một Animation đã tải lên hiện có.Bạn có thể sử dụng AnimationClipProvider:GetAnimationClipAsync() để tải xuống một hoạt hiệu ứng động.
Mẫu mã
This sample contains a simple function that will get the length of a KeyframeSequence by finding the Keyframe with the highest Keyframe.Time value.
local function getSequenceLength(keyframeSequence)
local length = 0
for _, keyframe in pairs(keyframeSequence:GetKeyframes()) do
if keyframe.Time > length then
length = keyframe.Time
end
end
return length
end
local keyframeSequence = Instance.new("KeyframeSequence")
getSequenceLength(keyframeSequence)
This code sample contains a simple function to generate an Animation with a generated hash ID to preview a KeyframeSequence locally.
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local function createPreviewAnimation(keyframeSequence)
local hashId = KeyframeSequenceProvider:RegisterKeyframeSequence(keyframeSequence)
local Animation = Instance.new("Animation")
Animation.AnimationId = hashId
return Animation
end
local keyframeSequence = Instance.new("KeyframeSequence")
local animation = createPreviewAnimation(keyframeSequence)
print(animation)
This sample demonstrates how a basic KeyframeSequence can be created.
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
Tóm Tắt
Thuộc Tính
Bao gồm chiều cao đùi của Humanoid của mô hình đã được sử dụng để soạn thảo điều này KeyframeSequence .
Thuộc Tính
Xác định xem liệu hoạt hình được lưu trong đoạn này AnimationClip có ý định lặp lại hay không.
Xác định đoạn nào có ưu tiên khi nhiều hoạt hình đang chơi cùng lúc.
Phương Pháp
Thêm một Keyframe vào KeyframeSequence bằng cách nuôi nó lên KeyframeSequence .
Trả về một array chứa tất cả Keyframes được chứa trong một KeyframeSequence .
Chức năng này xóa một Keyframe từ KeyframeSequence bằng cách đặt cha của nó thành nil .
Thuộc Tính
AuthoredHipHeight
Phương Pháp
AddKeyframe
Tham Số
Lợi Nhuận
Mẫu mã
-- create the keyframesequence
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Loop = false
keyframeSequence.Priority = Enum.AnimationPriority.Action
-- create a keyframe
local keyframe = Instance.new("Keyframe")
keyframe.Time = 0
-- create sample poses
local rootPose = Instance.new("Pose")
rootPose.Name = "HumanoidRootPart"
rootPose.Weight = 0
local lowerTorsoPose = Instance.new("Pose")
lowerTorsoPose.Name = "LowerTorso"
lowerTorsoPose.Weight = 1
-- set the sequence hierarchy
rootPose:AddSubPose(lowerTorsoPose) -- lowerTorsoPose.Parent = rootPose
keyframe:AddPose(rootPose) -- rootPose.Parent = keyframe
keyframeSequence:AddKeyframe(keyframe) -- keyframe.Parent = keyframeSequence
-- parent the sequence
keyframeSequence.Parent = workspace
GetKeyframes
Lợi Nhuận
Mẫu mã
local function getSequenceLength(keyframeSequence)
local length = 0
for _, keyframe in pairs(keyframeSequence:GetKeyframes()) do
if keyframe.Time > length then
length = keyframe.Time
end
end
return length
end
local keyframeSequence = Instance.new("KeyframeSequence")
getSequenceLength(keyframeSequence)
RemoveKeyframe
Tham Số
Lợi Nhuận
Mẫu mã
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)