PcoWSkbVqDnWTu_dm2ix
We use cookies on this site to enhance your user experience
Collapse Sidebar

Pose

Show deprecated

Pose

Show deprecated

A Pose holds the CFrame applied to the Motor6D connected to its associated BasePart. The part which is controlled depends on the name of the Pose.

Poses are the fundamental building blocks of animations and, with Keyframes, make up KeyframeSequences.

Poses, joints and hierarchy

Although a Pose is assigned to a BasePart by name, the object manipulated during animation playback is actually the Motor6D connected to this part. Animation rigs branch out from the model’s root part through such joints.

As an example. In a R15 character rig the root part is the HumanoidRootPart. The LowerTorso is connected to the HumanoidRootPart by the a motor named ‘Root’. Therefore, the CFrame of a Pose named ‘LowerTorso’ in a Keyframe would be applied to the motor named ‘Root’, and not the LowerTorso itself.

Poses are arranged in a Keyframe based on joint hierarchy. This means, the Pose’s CFrame is applied to the motor connecting the part associated with the pose to the part associated with the pose’s parent. See below for a visual example of the structure of Poses on a R15 character.

Pose CFrame

The Roblox animation system applies Pose/CFrame to the corresponding Motor6D by manipulating the relative transformation of the motor, the Motor6D/Transform property. The original JointInstance/C1|C0 and JointInstance/C1|C1 values are not changed.

Properties

CFrame

CFrame

The CFrame that will be applied to the Motor6D corresponding with the Pose. This CFrame is applied by changing the Motor6D\Transform property of the motor.

PoseEasingDirection

EasingDirection

The EasingDirection determines the ‘direction’ of the interpolation style set by Pose/EasingStyle. Along with Pose/EasingStyle, it determines how the joint will interpolate from this Pose to the subsequent Pose during animation playback.

PoseEasingStyle

EasingStyle

The EasingStyle determines the ‘style’ of the interpolation. Along with Pose/EasingDirection, it determines how the joint will interpolate from this Pose to the subsequent Pose during animation playback.

float

MaskWeight

[NotReplicated] [Deprecated]
float

Weight

Inherited from Instance: Show Hide

bool

Archivable

Determines if an Instance can be cloned using /Instance/Clone or saved to file.

string

ClassName

[ReadOnly] [NotReplicated]

A read-only string representing the class this Instance belongs to

int

DataCost

[ReadOnly] [NotReplicated] [Deprecated]

The cost of saving the instance using data persistence.

string

Name

A non-unique identifier of the Instance

Instance

Parent

Determines the hierarchical parent of the Instance

bool

RobloxLocked

If true, the Instance and its descendants cannot be indexed or edited by a Script or LocalScript and will throw an error if it is attempted

bool

archivable

[Hidden] [NotReplicated] [Deprecated]
string

className

[ReadOnly] [NotReplicated] [Deprecated]

Functions

void

AddSubPose ( Instance pose )

This function adds a sub Pose to the Pose by parenting it to it.

Objects

GetSubPoses ( )

This function returns an array containing all sub Poses that have been added to a Pose.

void

RemoveSubPose ( Instance pose )

This function removes a sub Pose from the Pose by parenting it to nil.

Inherited from Instance: Show Hide

void

ClearAllChildren ( )

This function destroys all of an Instance's children.

Instance

Clone ( )

Create a deep copy of a Roblox instance and descendants where Archivable = true.

void

Destroy ( )

Sets the Instance/Parent property to nil, locks the Instance/Parent property, disconnects all connections and calls Destroy on all children.

Instance

FindFirstAncestor ( string name )

Returns the first ancestor of the Instance whose Instance/Name is equal to the given name.

Instance

FindFirstAncestorOfClass ( string className )

Returns the first ancestor of the Instance whose Instance/ClassName is equal to the given className.

Instance

FindFirstAncestorWhichIsA ( string className )

Returns the first ancestor of the Instance for whom Instance/IsA returns true for the given className.

Instance

FindFirstChild ( string name , bool recursive )

Returns the first child of the Instance found with the given name.

Instance

FindFirstChildOfClass ( string className )

Returns the first child of the Instance whose Instance/ClassName|ClassName is equal to the given className.

Instance

FindFirstChildWhichIsA ( string className , bool recursive )

Returns the first child of the Instance for whom Instance/IsA returns true for the given className.

Variant

GetAttribute ( string attribute )

RBXScriptSignal

GetAttributeChangedSignal ( string attribute )

Dictionary

GetAttributes ( )

Objects

GetChildren ( )

Returns an array containing all of the Instance's children.

string

GetDebugId ( int scopeLength )

[NotBrowsable]

Returns a coded string of the Instances DebugId used internally by Roblox.

Array

GetDescendants ( )

[CustomLuaState]

Returns an array containing all of the descendants of the instance

string

GetFullName ( )

Returns a string describing the Instance's ancestry.

RBXScriptSignal

GetPropertyChangedSignal ( string property )

Get an event that fires when a given property of an object changes.

bool

IsA ( string className )

[CustomLuaState]

Returns true if an Instance's class matches or inherits from a given class

bool

IsAncestorOf ( Instance descendant )

Returns true if an Instance is an ancestor of the given descendant.

bool

IsDescendantOf ( Instance ancestor )

Returns true if an Instance is a descendant of the given ancestor.

void

Remove ( )

[Deprecated]

Sets the object’s Parent to nil, and does the same for all its descendants.

void

SetAttribute ( string attribute , Variant value )

Instance

WaitForChild ( string childName , double timeOut )

[CustomLuaState] [CanYield]

Returns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Objects

children ( )

[Deprecated]

Returns an array of the object’s children.

Instance

clone ( )

[Deprecated]
void

destroy ( )

[Deprecated]
Instance

findFirstChild ( string name , bool recursive )

[Deprecated]
Objects

getChildren ( )

[Deprecated]
bool

isA ( string className )

[Deprecated] [CustomLuaState]
bool

isDescendantOf ( Instance ancestor )

[Deprecated]
void

remove ( )

[Deprecated]

Events

Inherited from Instance: Show Hide

RBXScriptSignal

AncestryChanged ( Instance child , Instance parent )

Fires when the Instance/Parent property of the object or one of its ancestors is changed.

RBXScriptSignal

AttributeChanged ( string attribute )

RBXScriptSignal

Changed ( string property )

Fired immediately after a property of an object changes.

RBXScriptSignal

ChildAdded ( Instance child )

Fires when an object is parented to this Instance.

RBXScriptSignal

ChildRemoved ( Instance child )

Fires when a child is removed from this Instance.

RBXScriptSignal

DescendantAdded ( Instance descendant )

Fires when a descendant is added to the Instance

RBXScriptSignal

DescendantRemoving ( Instance descendant )

Fires immediately before a descendant of the Instance is removed.

RBXScriptSignal

childAdded ( Instance child )

[Deprecated]

Code Samples


Keyframe Generate Poses

This sample includes a function that will generate a ‘blank’ keyframe containing blank poses for all of the model’s connected parts in the correct hierarchical order.

    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

Keyframe Reset Poses

This code sample includes a function to reset the CFrame of the Poses in a 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