Smooth Pet / Followers?

I’m trying to find a way to mimic the smooth Pet movement as shown below - Where the pets walk on the floor.


I’ve attempted using Humanoids, BodyPositions etc. However, everything seems to come out choppy & unreliable - Open to trying anything. Does anyone have any suggestions?

well i just want to say it looks very good if you ask me (or maybe i misread, are the above videos your attempt at them?)

make the animation faster until it looks good…?

I was going to make this kind of thing after I was done with one of my project I am currently working on.
I would like you to mess around with this (if you want so you can kind of get an idea):

Then after that you can maybe add a humanoid to the pet and mess around with it till it works, because that was what I was going to do. Hope this helps.

I have done some experiments with this before, even though it wasn’t as successful as I would’ve expected it, I believe that I set up a collision group with all the pets in the server, the collision group of player’s character parts and lastly the default group that is supposed to contain everything else.

Basically you set up the collision groups, so that the pet cannot collide with the player in anyway, but can collide with everything else. Here is a simple example that I typed up in a few minutes ~ coz I deleted my old one ages ago

local physicsService = game:GetService("PhysicsService")

local playerCollisionGroup = "Player"
local petsCollisionGroup = "Pets"
physicsService:CreateCollisionGroup(playerCollisionGroup)
physicsService:CreateCollisionGroup(petsCollisionGroup)

--I didn't create the last collision group for the map or the parts in it as they will all be in the "Default" group for their collision

physicsService:CollisionGroupSetCollidable(playerCollisionGroup, petsCollisionGroup, false)
--setting the collision between pet and player to false

game.Players.PlayerAdded:Connect(function(plr)
	local char = plr.Character or plr.CharacterAdded:Wait()
-- for every single part in the character set them to be non-collidable towards the pet as they will be in the player collision group
    for i, v in pairs(char:GetChildren()) do
    --do an if statement here for whether you want to check for parts, mesh parts, base parts, or whatever you restrict your player's avatar to be, otherwise error will pop up for many instances inside the player, such as the humanoid doesn't have the property of collidable
		physicsService:SetPartCollisionGroup(v, playerCollisionGroup)
	end



-- what ever your pet is when you load in the player's data of their pet
	local petClone = game.ReplicatedStorage:FindFirstChild("Pet"):Clone() 

	petClone.Parent = char
		
	petClone.PetHandler.Disabled = false

 -- set the parts of the pets that you load in as non-collidable
	for i, v in pairs(petClone:GetChildren()) do
		if v:IsA("") then -- whatever type of instances that your pet model consist of
			physicsService:SetPartCollisionGroup(v, petsCollisionGroup)
		end
	end
end)

then, as Mini_Jimki has said

that is indeed a very nice pet following system there, very clean in comparison to what I can possibly make, but there is a problem, as for the way that the pets (I believe the images shown are in that of loomian legacy) – my favourite game, moves,

they moves as a path-finding system, meaning that you cannot add any weld constraint , vector force or body position onto the pet as it will make it not only look choppy when displaying its animation, but also not being able to follow the character just like loomian legacy

– correct me if I am wrong as I couldn’t find much reference towards this and I am just an intermediate modeler

for the idea of the path finding system, I had created a glitchy path finding system in the past, hope that would help:

you would need to have a humanoid inside the pet rig for path finding service to function properly, as humanoid cannot be in the hierarchy of another humanoid based object - like the character, you’d need to create a value inside the pet rig for it to recognise who is the owner of the pet rig – sorry for my grammar

local owner = Instance.new("IntValue", petClone)
owner.Name = ""--name of the intvalue
owner.Value = player.UserId -- as many people can change thier name using VPN and robux in the past and present, I recommend using user IDs instead of names of the player

then there is also the roblox API reference towards the path finding service

but instead of using simple path finding, I believe I used the conditional statement of

if (petClone.PrimaryPart.Position - character.PrimaryPart.Position).Magnitude > ?? - amount for the pet to react and follow you:
  --create a path here and play the animation
end

hi, because they use humanoids and MoveTo maybe

I think you should move this to #help-and-feedback:building-support, because it can me done with some kind of instance (e.g: A position aligner).

Edit: Sorry for bumping this old post. Someone else randomly bumped it, so I assumed it was new.