이 개체는 애니메이션에 대한 모든 Keyframes를 저장하고, 애니메이션이 루프화되는지 여부를 결정하고, 다른 애니메이션과의 우선 순위를 결정합니다.
키프레임 시퀀스가 무엇인가요?
Roblox는 애니메이션 재생에서 사용하는 애니메이션 데이터를 생성하며, 이는 KeyframeSequence의 Animation.AnimationId 속성에서 참조됩니다.모든 애니메이션은 내부적으로 키프레임 시퀀스 또는 곡선 애니메이션을 참조합니다.일반적으로 Roblox 애니메이션 편집기에 의해 생성되지만, KeyframeSequence는 다른 플러그인이나 심지어 수동으로도 생성될 수 있습니다.Roblox에 업로드되면 Roblox는 Animations 업로드된 키프레임 시퀀스를 참조하기 위해 Animation.AnimationId 속성에 사용할 콘텐츠 ID를 할당합니다.
대부분의 경우 애니메이션 편집기가 대부분의 애니메이션 기능을 다루기 때문에 키프레임 시퀀스를 조작할 필요가 없습니다.그러나 일부 경우에는 애니메이션을 생성하거나 자체 플러그인을 빌드하고 싶을 수 있습니다 Script .그러나 Roblox Studio만 이러한 방식으로 생성된 키프레임 시퀀스를 사용할 수 있습니다.이러한 KeyframeSequence를 사용하려면 아래에 설명된 대로 Roblox에 업로드해야 합니다.
키프레임 시퀀스 속성
KeyframeSequence.Priority 및 KeyframeSequence.Loop 시퀀스의 우선 순위 및 루프 애니메이션 설정을 저장합니다.AnimationTrack 속성은 플레이 시간에 이러한 속성을 덮어쓸 수 있다는 점에 유의하십시오.
시퀀스에서 마지막 Keyframe 는 가장 높은 Keyframe 속성을 가진 Keyframe.Time 의 길이를 결정합니다.
키프레임 시퀀스 구조
키프레임 시퀀스는 Keyframes를 보관하는 컨테이너로 작동합니다.키프레임은 재생 중에 간격을 두고 표시되는 애니메이션의 '키' 프레임을 나타냅니다.
키프레임에는 Poses가 포함되어 있습니다. , 각각의 가 애니메이션화되는 특정, 두 부품을 연결하는 데 적용된 을 포함합니다.포즈는 이름으로 일치하는 와 일치하고 데이터를 이 같은 이름의 부품인 에 적용합니다.이러한 이유로 애니메이션은 올바르게 재생하려면 고유한 부품 이름이 필요합니다.
포즈는 공동 계층에 따라 구조를 따릅니다.각 Pose 의 부모는 부착된 부품의 Pose 에 해당합니다.실제로, 이것은 포즈가 루트 부분에서 분기된다는 것을 의미합니다.시각적 예제는 아래를 참조하십시오.
애니메이션 제작 시 키프레임 시퀀스 사용
경험에서 재생할 수 있기 전에 Roblox에 키프레임 시퀀스를 먼저 업로드해야 합니다.Studio에서 키프레임 시퀀스를 마우스 오른쪽 버튼으로 클릭하고 'Roblox에 저장'을 클릭합니다.또는, Plugin:SaveSelectedToRoblox() 함수를 사용할 수 있습니다.두 방법 모두 애니메이션 업로드 창을 표시하고 키프레임 시퀀스를 애니메이션으로 업로드할 수 있습니다.
일부 경우에는 Roblox 사이트에 업로드하기 전에 애니메이션을 미리 보고 싶을 수 있습니다.KeyframeSequenceProvider:RegisterKeyframeSequence()를 사용하여 임시 ID를 생성할 수 있습니다.이렇게 하면 지역화된 애니메이션 테스트에 사용할 수 있는 해시 ID가 생성됩니다.
키프레임 시퀀스 획득
일부 경우 기존에 업로드된 애니메이션에 해당하는 KeyframeSequence를 다운로드하고 싶을 수 있습니다.AnimationClipProvider:GetAnimationClipAsync()를 사용하여 애니메이션을 다운로드할 수 있습니다.
코드 샘플
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
요약
속성
이 문서를 작성하는 데 사용된 모델의 허리 높이를 포함합니다 Humanoid 이 문서를 작성하는 데 사용되었습니다 KeyframeSequence .
이 AnimationClip에 저장된 애니메이션이 루프되도록 되어 있는지 여부를 결정합니다.
여러 애니메이션이 동시에 재생될 때 우선 순위를 결정하는 클립을 결정합니다.
메서드
부모로 지정하여 에 를 추가합니다.
에 포함된 모든 배열을 반환하며, 에 포함된 모든 배열을 반환합니다.
이 함수는 부모를 로 설정하여 부모에서 를 제거합니다.
속성
AuthoredHipHeight
이 문서를 작성하는 데 사용된 모델의 허리 높이를 포함합니다 Humanoid 이 문서를 작성하는 데 사용되었습니다 KeyframeSequence .기본값은 1.35이며, 이는 표준 R15의 허리 높이 세트이기 때문입니다. Character|character .
메서드
AddKeyframe
이 함수는 부모로 지정하여 Keyframe 에 KeyframeSequence 에 KeyframeSequence 를 추가합니다.키 프레임의 Instance.Parent 를 KeyframeSequence 로 설정하는 것과 기능적으로 동일합니다.
주의, 이 함수는 키프레임 매개변수로 Keyframe가 아닌 인스턴스를 호출할 때 오류가 발생하지 않으며 성공적으로 부모가 됩니다.
매개 변수
반환
코드 샘플
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
GetKeyframes
GetKeyframes 는 모든 추가된 Keyframes를 포함하는 배열을 반환합니다 KeyframeSequence에 대한 .
반환
Keyframe의 배열.
코드 샘플
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)
RemoveKeyframe
이 함수는 부모를 로 설정하여 부모에서 를 제거합니다.키프레임의 부모를 nil로 설정하는 것과 기능적으로 동일합니다.
이렇게 하면 키프레임의 부모가 nil로 설정되지만 파괴되지는 않습니다.즉, 키프레임에 다른 참조가 남아 있으면 나중에 다시 부모로 지정할 수 있습니다.
주의, 이 함수는 키프레임 매개변수로 이외의 다른 것을 사용하여 호출하면 오류가 발생하지 않습니다.
매개 변수
반환
코드 샘플
This sample adds a Keyframe to a KeyframeSequence before removing it and adding it again. Note that once a Keyframe is removed it is not destroyed, meaning it can be re-added later.
local keyframeSequence = Instance.new("KeyframeSequence")
keyframeSequence.Parent = workspace
local keyframe = Instance.new("Keyframe")
keyframeSequence:AddKeyframe(keyframe)
task.wait(2)
keyframeSequence:AddKeyframe(keyframe)