So, I'm making a custom running animation for the character. When the character runs, the script loops through a bunch of Vector3s. The problem is that the animation sometimes starts making the character's arms shake and that it isn't very smooth when restarting the loop. Could someone make my animation smoother?
Running Event (Assume everything is defined, database is a ModuleScript):
humanoid.Running:connect(function(speed) if speed > 0 then running = true while running do for frame = 1, #database.Frames.Running do for i = 0,1,0.1 do for joint, start in pairs(database.Frames.Running[frame]) do wait() local lerp = (frame == #database.Frames.Running and Vector3.new(0,0,0) or start):Lerp(database.Frames.Running[frame+1] and database.Frames.Running[frame+1][joint] or Vector3.new(0,0,0),i) character.Torso[joint].C0 = database.Humanoid[joint].C0*CFrame.new(lerp.X,lerp.Y,lerp.Z) end end end end else running = false for i, joint in pairs(character.Torso:GetChildren()) do if joint:IsA("Motor6D") then character.Torso[joint.Name].C0 = database.Humanoid[joint.Name].C0 end end end end)
database ModuleScript:
database = {} database.Frames = {} database.Humanoid = {} --database.Humanoid --Motor6D database.Humanoid["Left Shoulder"] ={ C0 = CFrame.new(-1, 0.5, 0)*CFrame.Angles(-0,math.rad(-90),0), C1 = CFrame.new(0.5, 0.5, 0)*CFrame.Angles(-0,math.rad(-90),0) } database.Humanoid["Right Shoulder"] ={ C0 = CFrame.new(1, 0.5, 0)*CFrame.Angles(0,math.rad(90),0), C1 = CFrame.new(-0.5, 0.5, 0)*CFrame.Angles(0,math.rad(90),0) } database.Humanoid["Neck"] = { C0 = CFrame.new(0, 1, 0)*CFrame.Angles(math.rad(-90),0,math.rad(180)), C1 = CFrame.new(0, -0.5, 0)*CFrame.Angles(math.rad(-90),0,math.rad(180)) } database.Humanoid["Left Hip"] = { C0 = CFrame.new(-1, -1, 0)*CFrame.Angles(0,math.rad(-90),0), C1 = CFrame.new(-0.5, 1, 0)*CFrame.Angles(0,math.rad(-90),0) } database.Humanoid["Right Hip"] = { C0 = CFrame.new(1, -1, 0)*CFrame.Angles(0,math.rad(90),0), C1 = CFrame.new(0.5, 1, 0)*CFrame.Angles(0,math.rad(90),0) } --database.Frames --Running database.Frames.Running = {} database.Frames.Running = { { ["Right Shoulder"] = Vector3.new(0.1,-0.1,0), ["Left Shoulder"] = Vector3.new(0.1,-0.1,0) }; { ["Right Shoulder"] = Vector3.new(0,0,0), ["Left Shoulder"] = Vector3.new(0,0,0) }; { ["Right Shoulder"] = Vector3.new(-0.1,-0.1,0), ["Left Shoulder"] = Vector3.new(-0.1,-0.1,0) } } for animation, frames in pairs(database.Frames) do table.insert(frames,{}) for joint, _ in pairs(frames[1]) do frames[#frames][joint] = Vector3.new(0,0,0) end setmetatable(frames,{}) getmetatable(frames).__index = {Joints = {}} for joint, _ in pairs(frames[1]) do table.insert(frames.Joints,joint) end end return database