I'm animating characters through Motor6D. It works pretty smoothly, except for the fact that the animation is pretty choppy at the beginning. I'm using Vector3:Lerp() to make C0s. Could someone make it smoother? I also keep some things in a ModuleScript.
Part of the LocalScript:
repeat wait() until game.Players.LocalPlayer database = require(Workspace.Database) repeat wait() until database player = game.Players.LocalPlayer character = player.Character cam = Workspace.CurrentCamera mouse = player:GetMouse() humanoid = character.Humanoid player.CameraMode = "LockFirstPerson" humanoid.Running:connect(function(speed) if speed > 0 then running = true while running do for frame = 1, #database.Frames.Running do if not running then break end for i = 0,1,0.1 do if not running then break end for joint, start in pairs(database.Frames.Running[frame]) do 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 wait() 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)
Part of the ModuleScript:
database = {} database.Frames = {} 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,{}) table.insert(frames,1,{}) for joint, _ in pairs(frames[1]) do frames[1][joint] = Vector3.new(0,0,0) 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
There's also a place you can check out: http://www.roblox.com/FPS-Testing-place?id=58724430