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.
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
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
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
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
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!
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.