Keyframe

Hiển Thị Bản Đã Lỗi Thời

*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.

Một Keyframe giữ Poses đã được áp dụng đến các khớp nối trong một Model ở một điểm thời gian nhất định trong một hoạt hiệu ứng độngsống động. Keyframes được liên hệ giữa trong khi chơi lại hoạt ảnh

Lưu ý, trong hầu hết các trường hợp, các nhà phát triển không cần phải manipulate KeyframeSequences như hoạt họa editor bao gồm hầu hết các chức năng hoạt họa. Tuy nhiên, ở một số trường hợp, một nhà phát triển có thể muốn tạo ra một hoạt plugin

Cấu trúc

Keyframes được giữ trong một KeyframeSequence và chứa Pose đối tượng. Các tư thế được tên theo cấp độ thuộc tính và được cấu tr

Lưu ý, như Poses được gọi theo tên theo thứ tự theo BaseParts mà chúng đại diện, yêu cầu để tên riêng của các bộ phận để chơi đúng cách.

Biểu tượng

Trong khi phát lại hoạt họa, các tư thế trong các khung giới hạn khác nhau được liên kết với nhau. Điều này cho phép tạo ra một hoạt họa mượt mà không cần phải định nghĩa mọi khung. Ghi chú, kiể

Mẫu mã

Keyframe Generate Poses

local function generateKeyframe(model)
if not model.PrimaryPart then
warn("No primary part set")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Root part not found")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- get all of the joints attached to the part
for _, joint in pairs(part:GetJoints()) do
-- we're only interested in Motor6Ds
if joint:IsA("Motor6D") then
-- find the connected part
local connectedPart = nil
if joint.Part0 == part then
connectedPart = joint.Part1
elseif joint.Part1 == part then
connectedPart = joint.Part0
end
if connectedPart then
-- make sure we haven't already added this part
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- create a pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recurse
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- populate the keyframe
local rootPose = Instance.new("Pose")
rootPose.Name = rootPart.Name
addPoses(rootPart, rootPose)
keyframe:AddPose(rootPose)
return keyframe
end
local character = script.Parent
local keyframe = generateKeyframe(character)
print(keyframe)

Tóm Tắt

Thuộc Tính

  • Đọc Song Song

    Vị trí thời gian Keyframe trong một hoạt hiệu ứng động. Điều này xác định thời gian mà Poses ở bên trong khung chính sẽ được hiển thị.

Phương Pháp

Thuộc Tính

Time

Đọc Song Song

Thuộc tính này cung cấp vị trí thời gian Keyframe trong một hiệu ứng động. Điều này xác định thời gian mà Poses bên trong keyframe sẽ được hiển thị.

Lưu ý rằng Keyframe với giá trị thời gian cao nhất trong một KeyframeSequence được sử dụng để xác định chiều dài hoạt hiệu ứng động.

Mẫu mã

Get KeyframeSequence Length

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)

Phương Pháp

AddMarker

void

Hàm này thêm một Keyframe vào Instance.Parent bằng cách làm cho nó là cha của nó. Nó hoàn toàn tương tự với việc đặt 1> Class.Instance.Parent1> của nó vào Keyframe.

Lưu ý, chức năng này sẽ không bị lỗi khi một instância khác ngoài một Keyframe Marker được đưa làm tham số và sẽ nuôi dưỡng nó thành công.

Thêm về Keyframes

Keyframe tên không cần phải độc đáo. Ví dụ, nếu một hoạt họa có ba khung hình chủ đề "Particles" được gọi bằng các sự kiện kết nối bởi AnimationTrack:GetMarkerReachedSignal() thì sẽ kích hoạt mỗi khi một trong những khung hình này được kích hoạ

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ó.

Xem thêm:

Tham Số

marker: Instance

The KeyframeMarker được gắn với Keyframe .


Lợi Nhuận

void

Mẫu mã

Add Marker/Remove Marker

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

AddPose

void

Hàm này thêm một Pose vào Keyframe bằng cách làm cho nó là cha của nó. Nó hoàn toàn tương tự với việc đặt Instance.Parent của nó vào 2>Class.Keyframe2> .

Lưu ý, hành động này sẽ không bị lỗi khi một instância khác ngoài một Pose được đưa làm tham số hình ảnh và sẽ nuôi dưỡng nó thành công.

Tham Số

pose: Instance

Các Pose để được thêm.


Lợi Nhuận

void

Mẫu mã

Keyframe Generate Poses

local function generateKeyframe(model)
if not model.PrimaryPart then
warn("No primary part set")
return
end
local rootPart = model.PrimaryPart:GetRootPart()
if not rootPart then
warn("Root part not found")
return
end
local partsAdded = {}
partsAdded[rootPart] = true
local function addPoses(part, parentPose)
-- get all of the joints attached to the part
for _, joint in pairs(part:GetJoints()) do
-- we're only interested in Motor6Ds
if joint:IsA("Motor6D") then
-- find the connected part
local connectedPart = nil
if joint.Part0 == part then
connectedPart = joint.Part1
elseif joint.Part1 == part then
connectedPart = joint.Part0
end
if connectedPart then
-- make sure we haven't already added this part
if not partsAdded[connectedPart] then
partsAdded[connectedPart] = true
-- create a pose
local pose = Instance.new("Pose")
pose.Name = connectedPart.Name
parentPose:AddSubPose(pose)
-- recurse
addPoses(connectedPart, pose)
end
end
end
end
end
local keyframe = Instance.new("Keyframe")
-- populate the keyframe
local rootPose = Instance.new("Pose")
rootPose.Name = rootPart.Name
addPoses(rootPart, rootPose)
keyframe:AddPose(rootPose)
return keyframe
end
local character = script.Parent
local keyframe = generateKeyframe(character)
print(keyframe)
Keyframe Add/Remove Pose

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local pose = Instance.new("Pose")
pose.EasingStyle = Enum.PoseEasingStyle.Cubic
pose.EasingDirection = Enum.PoseEasingDirection.Out
local pose2 = Instance.new("Pose")
pose2.EasingStyle = Enum.PoseEasingStyle.Cubic
pose2.EasingDirection = Enum.PoseEasingDirection.Out
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
keyframe:RemovePose(pose) -- pose.Parent = nil
task.wait(2)
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
pose:AddSubPose(pose2) -- pose2.Parent = pose
task.wait(2)
pose:RemoveSubPose(pose2) -- pose2.Parent = nil

GetMarkers

Instances

Hàm này trả về một hàng chứa tất cả các KeyframeMarkers đã được thêm vào Keyframe . Ghi chú, hàm này sẽ chỉ trả về instances của kiểu KeyframeMarker.

Thêm về Keyframes

Keyframe tên không cần phải độc đáo. Ví dụ, nếu một hoạt họa có ba khung hình chủ đề "Particles" được gọi bằng các sự kiện kết nối bởi AnimationTrack:GetMarkerReachedSignal() thì sẽ kích hoạt mỗi khi một trong những khung hình này được kích hoạ

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ó.

Xem thêm:


Lợi Nhuận

Instances

Một mat阵 chứa tất cả các KeyframeMarkers đã được thêm vào Keyframe .

Mẫu mã

Get Keyframe Markers Attached to a Keyframe

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker1 = Instance.new("KeyframeMarker")
marker1.Name = "FootStep"
marker1.Value = 100
local marker2 = Instance.new("KeyframeMarker")
marker2.Name = "Wave"
marker2.Value = 100
keyframe:AddMarker(marker1) --marker.Parent = keyframe
keyframe:AddMarker(marker2) --marker.Parent = keyframe
local markers = keyframe:GetMarkers()
for _, marker in pairs(markers) do
print(marker.Name)
end

GetPoses

Instances

Hàm này trả về một dàn trùng chứa tất cả Poses đã được thêm vào một Keyframe .


Lợi Nhuận

Instances

Một dàn Poses .

Mẫu mã

Keyframe Reset Poses

local function resetPoses(parent)
-- both functions are equivalent to GetChildren
local poses = parent:IsA("Keyframe") and parent:GetPoses() or parent:IsA("Pose") and parent:GetSubPoses()
for _, pose in pairs(poses) do
if pose:IsA("Pose") then
pose.CFrame = CFrame.new()
-- recurse
resetPoses(pose)
end
end
end

RemoveMarker

void

Hành động này xóa một KeyframeMarker từ Keyframe bằng cách cài đặt nó Instance.Parent đến nil.

Class.Instance.Parent của Marker Keyframe được đặt thành nil nhưng nó không bị phá hủy. Điều này có nghĩa là, miễn là thẻ này được tham chiếu, nó có thể được phụ huynh lại sau đó.

Ghi chú, hàm này sẽ không bị lỗi khi một instância khác ngoài một Keyframe Marker được đưa vào làm tham số.

Thêm về Keyframes

Keyframe tên không cần phải độc đáo. Ví dụ, nếu một hoạt họa có ba khung hình chủ đề "Particles" được gọi bằng các sự kiện kết nối bởi AnimationTrack:GetMarkerReachedSignal() thì sẽ kích hoạt mỗi khi một trong những khung hình này được kích hoạ

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ó.

Xem thêm:

Tham Số

marker: Instance

Nhãn đang được xóa khỏi Keyframe .


Lợi Nhuận

void

Mẫu mã

Add Marker/Remove Marker

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local marker = Instance.new("KeyframeMarker")
marker.Name = "FootStep"
marker.Value = 100
keyframe:AddMarker(marker) --marker.Parent = keyframe
task.wait(2)
keyframe:RemoveMarker(marker) --marker.Parent = nil

RemovePose

void

Hành động này xóa một Pose từ Class.Keyframe bằng cách thiết lập nó Keyframe để Instance.Parent nó mà không phải phá hủy nó. Điều này có nghĩa là hình ảnh được tham chiếu và nó có thể được thiế

Ghi chú, hành động này sẽ không xảy ra lỗi khi một instância khác ngoài một Pose được đưa làm tham số.

Tham Số

pose: Instance

Các Pose để bị xóa.


Lợi Nhuận

void

Mẫu mã

Keyframe Add/Remove Pose

local keyframe = Instance.new("Keyframe")
keyframe.Parent = workspace
local pose = Instance.new("Pose")
pose.EasingStyle = Enum.PoseEasingStyle.Cubic
pose.EasingDirection = Enum.PoseEasingDirection.Out
local pose2 = Instance.new("Pose")
pose2.EasingStyle = Enum.PoseEasingStyle.Cubic
pose2.EasingDirection = Enum.PoseEasingDirection.Out
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
keyframe:RemovePose(pose) -- pose.Parent = nil
task.wait(2)
keyframe:AddPose(pose) -- pose.Parent = keyframe
task.wait(2)
pose:AddSubPose(pose2) -- pose2.Parent = pose
task.wait(2)
pose:RemoveSubPose(pose2) -- pose2.Parent = nil

Sự Kiện