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.
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 :)
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 = CFrame.new(2, 2, 2) -- relative location of our pet to our character game.Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function(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 = Instance.new("BodyPosition") bodyPosition.Parent = newPet -- BodyGyro to rotate the pet local bodyGyro = Instance.new("BodyGyro") -- Default Torque is (40000, 0, 40000). This means 0 Torque on the Y-Axis. So we change it like so: bodyGyro.MaxTorque = Vector3.new(400000, 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 end) -- And when the character dies, stop updating the pet's forces. humanoid.Died:Connect(function() update:Disconnect() end) end) end)
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