Have a pet companion right by your side everywhere you go!

by lnsertYourself

Author Avatar

In this tutorial I'm going to show you how to script pets. A lot of games have a pet system and it makes sense why. Because they are so fun and cute! And so today I will show you a basic pet system that gives you a pet when you join the game.

Getting our pet

The simplest way is to get a premade mesh from the toolbox. Open the toolbox and drop-down to the "Mesh" tab. You will see many meshes to choose from. I'm going to choose a dragon because dragons are cool 😎 So click on a mesh of your choice and it will be inserted into your workspace. Feel free to scale the mesh bigger or smaller to make it a suitable size for a pet.


Let's move the pet to ReplicatedStorage and we will be able to give everyone their pets from there :)

The Code

This is a Script in ServerScriptService. I hope I've provided enough comments to understand the logic of it all. Here you go :)

local runService = game:GetService("RunService")

local pet = game.ReplicatedStorage:WaitForChild("Dragon") -- Replace with your pet name
local offset =, 2, 2) -- relative location of our pet to our character

        local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
        local humanoid = character:WaitForChild("Humanoid")

        local newPet = pet:Clone() -- New pet
        newPet.CanCollide = false -- Optional collisions
        newPet.CFrame = humanoidRootPart.CFrame * offset
 -- CFrame multiplication is very useful in calculating relative positions and rotations

        -- BodyPosition to move the pet
        local bodyPosition ="BodyPosition")
        bodyPosition.Parent = newPet

        -- BodyGyro to rotate the pet
        local bodyGyro ="BodyGyro")
        -- Default Torque is (40000, 0, 40000). This means 0 Torque on the Y-Axis. So we change it like so:
        bodyGyro.MaxTorque =, 400000, 400000)
        bodyGyro.Parent = newPet

        -- Parent to character so when the character dies, the pet will die as well.
        newPet.Parent = character

        -- Here we will update the BodyPosition and BodyGyro values
        local update = runService.Heartbeat:Connect(function()
            bodyPosition.Position = (humanoidRootPart.CFrame * offset).Position
            bodyGyro.CFrame = humanoidRootPart.CFrame

        -- And when the character dies, stop updating the pet's forces. 



For fun, I have created another script that gives you a random pet every time you respawn. I have uploaded it to Roblox as a free model. Try it out in your studio! 😊

Pets can bring a new experience to your games. Leave a good rating and get the word out! 🌟 Thank you for reading and Goodnight

View in-game to comment, award, and more!