Keyframe

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

키 프레임은 애니메이션에서 특정 시점의 Poses를 적용한 Model 에 있는 관절에 적용됩니다. Keyframes 은 애니메이션 플레이백 중에 인터폴됩니다.

대부분의 경우 애니메이션 편집기가 대부분의 애니메이션 기능을 커버하기 때문에 개발자는 KeyframeSequences 를 조작할 필요가 없습니다. 그러나 일부 경우 개발자는 애니메이션을 생성하려고 하거나 자신의 플러그인을 빌드하려고 하는 경우에만 Script 에서 애니메이션

구조

키 프레임은 키 프레임 순서 내에 있으며 KeyframeSequence 에 키 프레임 개체가 포함되어 있습니다. 키 프레임은 Pose 에 부모되며 공동 계층 구

참고, Poses는 해당하는 BaseParts에 따라 이름이 지정되지만 애니메이션은 올바르게 플레이할 수 있도록 특별한 부품 이름이 필요합니다.

인터플래시

애니메이션 플레이백 동안 키프레임 간의 포즈는 인터폴됩니다. 이를 통해 매끄러운 애니메이션을 만들어 모든 프레임을 정의할 필요 없습니다. 참고 키프레임 개체에는 인터폴 스타일이 결정됩니다. 키프레임 개체는

코드 샘플

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 이다. 이 시간은 키 프레임 내의 Poses 가 표시될 때의 시간을 결정합니다.

메서드

속성

Time

병렬 읽기

이 속성은 애니메이션에서 키 프레임 내의 Keyframe 시간 위치 (in seconds)를 제공합니다. 이렇게 하면 키 프레임 내의 Poses가 표시될 때의 시간을 결정합니다.

Class.Keyframe 는 애니메이션 길이를 결정하기 위해 사용된 가장 오래된 타이머입니다.

코드 샘플

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)

메서드

AddMarker

void

이 함수는 키프레임에 부모로 지정하여 키프레임에 추가합니다 KeyframeMarker 을 키프레임에 설정하는 기능을 추가합니다. 키프레임에 마커의 Keyframe 를 설정하는 것과 기능적으로 동일합니다.

참고, 키 프레임 마커가 아닌 인스턴스에 이 매개 변수를 지정하면 이 함수에 오류가 발생하지 않으며 부모가 되어 성공적으로 자식을 만듭니다.

키 프레임에 대해 자세히 알아보기

Keyframe 이름은 고유하지 않아도 됩니다. 예를 들어, 애니메이션에 세 개의 "Particles"라는 키 프레임이 있으면 연결된 이벤트가 반환하는 AnimationTrack:GetMarkerReachedSignal() 에서 각 키 프레임을 확인할 때마다 발생합니다.

Keyframe 이름은 애니메이션을 만들거나 편집할 때 Roblox 애니메이션 편집기에서 설정할 수 있습니다. 그러나 애니메이션을 플레이하기 전에 기존 애니메이션에 대한 Script 에 의해 설정될 수 없습니다.

또한 참조하십시오.

매개 변수

marker: Instance

Class.Keyframe 이 Keyframe 에 부모로 지정되어 있습니다.


반환

void

코드 샘플

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

이 함수는 키프레임에 부모로 지정하여 Pose를 추가하고, 키프레임에 부모로 지정하여 Keyframe를 설정합니다. 이 함수는 포즈의 Instance.Parent를 키프레임에 설정하는 것과 함수적으로 동일합니다.

참고, 이 함수는 Pose가 아닌 인스턴스에 포즈 매개 변수로 지정된 경우에도 오류가 발생하지 않고 부모가 되어 성공적으로 상속됩니다.

매개 변수

pose: Instance

추가될 Pose입니다.


반환

void

코드 샘플

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

이 함수는 모든 KeyframeMarkers 를 포함하는 배열을 반환합니다. 참고, 이 함수는 모든 유형의 Keyframe 에 대해 키 프레임 마커를 반환합니다.

키 프레임에 대해 자세히 알아보기

Keyframe 이름은 고유하지 않아도 됩니다. 예를 들어, 애니메이션에 세 개의 "Particles"라는 키 프레임이 있으면 연결된 이벤트가 반환하는 AnimationTrack:GetMarkerReachedSignal() 에서 각 키 프레임을 확인할 때마다 발생합니다.

Keyframe 이름은 애니메이션을 만들거나 편집할 때 Roblox 애니메이션 편집기에서 설정할 수 있습니다. 그러나 애니메이션을 플레이하기 전에 기존 애니메이션에 대한 Script 에 의해 설정될 수 없습니다.

또한 참조하십시오.


반환

Instances

Class.Keyframe 에 추가된 모든 Keyframe 배열.

코드 샘플

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

이 함수는 Poses 를 모두 포함하는 배열을 반환합니다. Keyframe 에 추가된 모든 Class.Pose|Poses 를 반환합니다.


반환

Instances

Class.Pose|Poses 배열.

코드 샘플

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

이 함수는 KeyframeMarker를 설정하여 Keyframe에서 제거합니다.

키 프레임 마커의 Instance.Parent 는 일반적으로 0으로 설정되지만 파괴되지는 않습니다. 이렇게 하면 마커가 참조된 후 다시 부모가 될 수 있습니다.

참고, 키 프레임 마커가 아닌 인스턴스에 이 매개 변수가 지정된 경우에는 이 함수에 오류가 발생하지 않습니다.

키 프레임에 대해 자세히 알아보기

Keyframe 이름은 고유하지 않아도 됩니다. 예를 들어, 애니메이션에 세 개의 "Particles"라는 키 프레임이 있으면 연결된 이벤트가 반환하는 AnimationTrack:GetMarkerReachedSignal() 에서 각 키 프레임을 확인할 때마다 발생합니다.

Keyframe 이름은 애니메이션을 만들거나 편집할 때 Roblox 애니메이션 편집기에서 설정할 수 있습니다. 그러나 애니메이션을 플레이하기 전에 기존 애니메이션에 대한 Script 에 의해 설정될 수 없습니다.

또한 참조하십시오.

매개 변수

marker: Instance

마커가 Keyframe 에서 제거되고 있습니다.


반환

void

코드 샘플

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

이 함수는 제거 Pose 를 클래스 Keyframe 에서 설정하여 제거하고 제거 Instance.Parent 를 2>nil2> 로 복제하여 다시 부모가 될 수 있습니다. 이렇게 하면 제공된 포즈가 참조되고 나중에 다시 부모가 될 수

참고, 이 함수는 Pose가 아닌 인스턴스에 포즈 매개 변수로 지정된 경우에도 오류가 발생하지 않습니다.

매개 변수

pose: Instance

제거할 Pose입니다.


반환

void

코드 샘플

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

이벤트