Learn how to make your very own shoulder plushie in Roblox Studio! In this step-by-step tutorial, I’ll show you exactly how to attach a plushie to your player’s shoulder using simple scripting.
Script (place in ServerScriptService):
local ServerStorage = game:GetService("ServerStorage")
local PlushieFolder = ServerStorage:WaitForChild("Plushies")
-- Table to store each player's chosen plushie name for this session
local playerPlushies = {}
-- Seed the random number generator to make results unique
math.randomseed(tick())
game.Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
task.wait(1)
-- Get or assign plushie
local plushieName = playerPlushies[player.UserId]
if not plushieName then
local plushies = PlushieFolder:GetChildren()
if #plushies == 0 then
warn("No plushies found in ServerStorage.Plushies!")
return
end
local randomPlushie = plushies[math.random(1, #plushies)]
plushieName = randomPlushie.Name
playerPlushies[player.UserId] = plushieName
print(player.Name .. " randomly assigned plushie: " .. plushieName)
end
-- Clone the selected plushie
local plushieTemplate = PlushieFolder:FindFirstChild(plushieName)
if not plushieTemplate then
warn("Plushie '" .. plushieName .. "' not found in folder!")
return
end
local plushie = plushieTemplate:Clone()
plushie.Parent = character
-- Remove humanoid/root if they exist
local humanoid = plushie:FindFirstChildOfClass("Humanoid")
if humanoid then humanoid:Destroy() end
local rootPart = plushie:FindFirstChild("HumanoidRootPart")
if rootPart then rootPart:Destroy() end
-- Determine main part to attach
local mainPart = plushie.PrimaryPart
if not mainPart then
mainPart = plushie:FindFirstChildWhichIsA("BasePart") or plushie:FindFirstChildWhichIsA("MeshPart")
end
if not mainPart then
warn(plushie.Name .. " has no BasePart or PrimaryPart to attach.")
return
end
-- Find player torso
local torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso")
if torso then
local shoulderOffset = CFrame.new(1.5, 2, 0) * CFrame.Angles(0, math.rad(20), 0)
plushie:PivotTo(torso.CFrame * shoulderOffset)
local weld = Instance.new("WeldConstraint")
weld.Part0 = torso
weld.Part1 = mainPart
weld.Parent = torso
else
warn("Could not attach plushie - missing torso")
end
end)
end)
-- Cleanup
game.Players.PlayerRemoving:Connect(function(player)
playerPlushies[player.UserId] = nil
end)