I have a walking animation for my rig, and it's come a long way through numerous headaches. I can feel myself getting super close to a working one.

There are still a few kinks:

-Occasionally the walking animation doesn't stop "mid-animation" while walking on Baseplate, and finishes its current cycle.

-It never stops while walking on the grass and has this glitchy loop effect

EDIT: I've actually partially fixed the second one by making the legs canCollide = false. I do still get the weird "must finish cycle" sometimes but it never infinity loops.

Take a look here to see what I mean: http://www.roblox.com/Plight-place?id=215401821

Here's the code; any suggestions on how to make it run smoother or better?

local WalkingAnimation = Instance.new("Animation")
	WalkingAnimation.Parent = script.Parent
	WalkingAnimation.AnimationId = "http://www.roblox.com/Asset?ID=212756854"


local Humanoid = script.Parent.Humanoid
local Torso = script.Parent.Torso

local Walking = false

local animTrack = Humanoid:LoadAnimation(WalkingAnimation)
local currentPlaying = false

function walkState()
	if Torso.Velocity.x ~= 0 or Torso.Velocity.z ~= 0 then
		return true	
	end
	return false
end

function runAnimation()
	if walkState() then
		
		if not currentPlaying then
			animTrack.KeyframeReached:connect(function(keyframeName) -- Bind function to KeyframeReached event
				if keyframeName == "FinalFrame" then
					currentPlaying = false
				end
			end)	
		
			currentPlaying = true
			animTrack:Play()
			--print("Playing")
		else
			--print("Inbetween")
		end
	else
		currentPlaying = false
		animTrack:Stop()
		--print("Stopping")
	end
end

while true do
	runAnimation()
	game:GetService("RunService").RenderStepped:wait()
end