Pose
*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 Pose giữ CFrame được ứng dụng vào Class.Motor6D được kết nối với Class.BasePart của nó. Phần được điều khiển phụ thuộc vào tên Pose.
Đối tượng là các khối xây dựng cơ bản của hoạt họa và, với Keyframes, tạo thành KeyframeSequences .
Các điểm, liên kết và thẩm quyền
Mặc dù một Pose được gán cho một BasePart bằng tên, nhưng thực tế đối tượng được quản lý trong lúc chơi hoạt họa là Motor6D được kết nối với phần này. Các cấu hình kết nối ra từ phần rễ của mô hình qua các
Trong một R15 character rig, the root part is the HumanoidRootPart. The LowerTorso được kết nối với the HumanoidRootPart bằng cách động cơ có tên là 'Root'. Do đó, CFrame của một Pose có tên là Keyframe trong một Class.Keyframe sẽ được áp
Các khối được sắp xếp thành một Keyframe dựa trên lớp thượng thể. Điều này có nghĩa là Pose của Pose CFrame được ứng dụng cho motor kết nối với phần liên quan đến phần của poses đến phần liên qu
Pose CFrame
Hệ thống hoạt họa Roblox áp dụng Pose.CFrame vào tương ứng tương ứng của motor, Motor6D bằng cách điều khiển biến đổi tương ứ
Mẫu mã
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)
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
Tóm Tắt
Thuộc Tính
Điều này CFrame áp dụng cho Class.Motor6D</Class.Motor6D> tương ứng với Class.Pose</Class.Motor6D> khi Class.Motor6D</Class.Motor6D> được thay đổi.
Hướng dẫn dễ dàng để sử dụng để đạt được giá trị Pose tiếp theo.
Kiểu dễ dàng để sử dụng để đạt đến giá trị Pose tiếp theo.
Phương Pháp
Thuộc Tính
CFrame
Điều này CFrame áp dụng cho Class.Motor6D được tương ứng với Class.Pose khi Class.Motor6D.Transform được thay đổi. Các giá trị gốc
Pose đối tượng được sắp xếp thành một Keyframe dựa trên lớp thượng thể. Điều này có nghĩa là, Pose.CFrame được ứng dụng vào motor kết nối với phần liên quan đến phần của poses đến phần của
Phương Pháp
AddSubPose
Thêm một sub Pose vào Pose bằng cách gắn nó vào nó. Nó hoạt động như nhau cho việc đặt mới đầu tượng Instance.Parent vào tượng.
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ố
Lợi Nhuận
Mẫu mã
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
GetSubPoses
Đảm bảo một dàn trùm chứa tất cả các sub Poses đã được thêm vào một Pose . Đây là hoạt động tương tự như sử dụng chức năng Instance:GetChildren() trên 1> Class.Pose1> .
Ghi chú: chức năng này trả lại tất cả các con của Pose , bao gồm cả những con con Pose không đang hiện diện.
Lợi Nhuận
Một mat阵 của sub Poses .
Mẫu mã
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
RemoveSubPose
Loại bỏ một sub Pose từ Class.Pose bằng cách gắn nó với nil. Điều này hoàn toàn tương tự với việc đặt mới Pose của nó vào nil.
Ghi chú: Nếu một Class.Instance khác ngoài Class.Pose được sử dụng như một Pose 参数, hàm này sẽ loại bỏ Class.Instance đó và không cung cấp lỗi.
Tham Số
Lợi Nhuận
Mẫu mã
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