Starter Character Skinned Mesh

Hey there! I am trying to make a game based on different custom starter characters and while testing a custom character off Mixamo , i keep having issues with the movement of the player, it moves like its sliding on ice and also the collisions are kinda weird, im using a skinned mesh with bones and all that and i can’t find any full tutorial on this
also messed around with the hip height but it doesnt seem to fix the sliding walk.
Screenshot 2023-10-29 215229
Here’s a pic of what is inside of the startercharacter. The humanoidrootpart contains the bones.

I’m somewhat familiar with how skinned meshes work.
If by sliding on ice you mean your character doesn’t animates at all, then there’s a few things you might want to check.

  • Open the roblox animator editor. If it works and moves just fine, then the issue isn’t the way your model is set-up.
  • The bone names don’t match ROBLOX’s internal structure: This means that the armature doesn’t follow the same names ROBLOX uses.
    You might want to rename them as Head, Neck, UpperTorso, LowerTorso, LeftUpperArm, LeftLowerArm…etc.

If you don’t feel like renaming, you can just make custom animations for your rig.
Hope that helps.

Hi the animation isnt a problem, its the actual movement of the character, instead of moving just like a normal roblox character does, it kinda slides on the ground

thats the hip height
you have to change that in the humanoid

1 Like

Hi! i did try that too but it didn’t fix it, actually i found a fix and forgot to mention, it had to do with the export scaling from Blender, i had to export it with the size 0.01 for the character to work without glitching either the animation or movement. But thanks, the hip height is really important too

1 Like

just a quick question but how did you make the animate script?
Im making a skinned mesh character too but the jump animations are not working

1 Like
repeat task.wait() until script:FindFirstChildWhichIsA("Animation")

local idleAnim = script.Parent.Humanoid:LoadAnimation(script.Idle)
idleAnim.Looped = true
idleAnim.Priority = Enum.AnimationPriority.Idle
local runAnim = script.Parent.Humanoid:LoadAnimation(script.Run)
runAnim.Looped = true
runAnim.Priority = Enum.AnimationPriority.Movement
local jumpAnim = script.Parent.Humanoid:LoadAnimation(script.Jump)
jumpAnim.Looped = false
jumpAnim.Priority = Enum.AnimationPriority.Movement
local climbAnim = script.Parent.Humanoid:LoadAnimation(script.Climb)
climbAnim.Looped = true
climbAnim.Priority = Enum.AnimationPriority.Movement
local fallAnim = script.Parent.Humanoid:LoadAnimation(script.Fall)
fallAnim.Looped = true
fallAnim.Priority = Enum.AnimationPriority.Movement
local swimAnim = script.Parent.Humanoid:LoadAnimation(script.Swim)
swimAnim.Looped = true
swimAnim.Priority = Enum.AnimationPriority.Movement
local sitAnim = script.Parent.Humanoid:LoadAnimation(script.Sit)
sitAnim.Looped = true
sitAnim.Priority = Enum.AnimationPriority.Movement

game["Run Service"].Heartbeat:Connect(function()
	if script.Parent.HumanoidRootPart.Velocity.Magnitude > 0.1 then
		if script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Dead then
			for _, i in script.Parent.Humanoid:GetPlayingAnimationTracks() do
				i:Stop()
			end
		elseif script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Seated then
			if not sitAnim.IsPlaying then
				sitAnim:Play()
			end
		elseif script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Jumping then
			if not jumpAnim.IsPlaying then
				jumpAnim:Play()
			end
		elseif script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Climbing then
			if not climbAnim.IsPlaying then
				climbAnim:Play()
			end
		elseif script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Freefall then
			if not fallAnim.IsPlaying then
				fallAnim:Play()
			end
		elseif script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Swimming then
			if not swimAnim.IsPlaying then
				swimAnim:Play()
			end
		elseif script.Parent.Humanoid:GetState() == Enum.HumanoidStateType.Running then
			if not runAnim.IsPlaying then
				runAnim:Play()
			end
		end
	else
		for _, i in script.Parent.Humanoid:GetPlayingAnimationTracks() do
			if i.Name ~= "Idle" then
				i:Stop()
			end
		end
		if not idleAnim.IsPlaying then
			idleAnim:Play()
		end
	end
end)

this is my animate script

1 Like

What I used for my animations are HumanoidState events, if u check this out HumanoidStateType you’ll see there is an event Humanoid.StateChanged, use that to trigger the animation based on the type of humanoid state you receive from the event!

2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.