Animation and avatars¶
Nova supports classic character rigs and keyframe animations. The modern skinning and avatar-description stack is not implemented yet.
What works¶
Humanoid,Humanoid.RigType(R6andR15),Humanoid.WalkSpeed,JumpPower/JumpHeight,MoveTo,TakeDamage, state changes.AnimatorandAnimationController.Animation,AnimationTrack,KeyframeSequence,Keyframe,Pose.Humanoid:LoadAnimation(legacy) andAnimator:LoadAnimation.AnimationTrack:Play,Stop,AdjustSpeed,AdjustWeight,GetTimeOfKeyframe,TimePosition,Priority,KeyframeReached.
What is missing¶
Boneand skeletal skinning. Mesh v4/v5 skin data is parsed but not rendered.HumanoidDescriptionandHumanoid:ApplyDescription.WrapLayer,WrapTarget, layered clothing.SurfaceAppearanceand PBR avatar materials.AnimationTrackmodern members such asPlaybackState,Completed,DidLoop,Pause,Resume, andSpeed.
Playing an animation¶
local Players = game:GetService("Players")
local function playAnimation(character: Model, animationId: string)
local humanoid = character:WaitForChild("Humanoid") :: Humanoid
local animator = humanoid:FindFirstChildOfClass("Animator")
if not animator then
animator = Instance.new("Animator")
animator.Parent = humanoid
end
local animation = Instance.new("Animation")
animation.AnimationId = animationId
local track = animator:LoadAnimation(animation)
track.Priority = Enum.AnimationPriority.Action
track.Looped = false
track:Play(0.15)
return track
end
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
task.wait(1)
playAnimation(character, "rbxassetid://123456789")
end)
end)
If Animator:LoadAnimation is unavailable in an older place, use
Humanoid:LoadAnimation(animation). The engine supplies an Animator for normal
characters.
Keyframe events¶
track.KeyframeReached:Connect(function(keyframeName)
if keyframeName == "Hit" then
print("hit frame reached")
end
end)
GetTimeOfKeyframe(name) returns the time in seconds, which is useful for
scheduling effects without listening to every keyframe.
R6 and R15¶
Enum.HumanoidRigType contains both R6 and R15. Classic R15 rigs work; what
does not work is skinned R15 (bone deformation, layered clothing, PBR body
materials).
If a place depends on skinned avatars:
- Replace the avatar with a classic body rig.
- Bake clothing into textures.
- Use
SpecialMesh/MeshPartbodies rather thanSurfaceAppearance. - Avoid
HumanoidDescription; apply body parts and clothing assets directly.
Avatar customization¶
There is no HumanoidDescription replacement API. For a character:
- Create the rig (R6 or classic R15).
- Set body-part colours with
BodyColorsor per-partBrickColor/Color. - Insert clothing (
Shirt,Pants,ShirtGraphic) as instances. - Set body meshes with
SpecialMeshorMeshPart.
local bodyColors = character:FindFirstChildOfClass("BodyColors")
if bodyColors then
bodyColors.HeadColor = BrickColor.new("Bright yellow")
bodyColors.TorsoColor = BrickColor.new("Bright blue")
bodyColors.LeftArmColor = BrickColor.new("Bright yellow")
bodyColors.RightArmColor = BrickColor.new("Bright yellow")
bodyColors.LeftLegColor = BrickColor.new("Bright green")
bodyColors.RightLegColor = BrickColor.new("Bright green")
end
Debugging¶
| Symptom | Likely cause |
|---|---|
| Animation does not play | The asset ID is wrong, the animation is not owned by the place, or the Animator is missing. |
| Animation plays but the mesh does not deform | Skinned mesh / Bone usage; not supported. |
| Character has no clothes | HumanoidDescription or layered clothing; replace with classic assets. |
| R15 looks wrong | SurfaceAppearance or skinned body; use a classic rig. |