Place Part on Player Shoulder

Hello all!

I’m in need of help with setting up a part to be on the player’s shoulder. I don’t really know anything about CFrame but I still tried and I’m somewhat close to how I want it to be.

This is how I want it to look like.


image

Again, I don’t really understand CFrame and this is what I tried -

local logClone = log:Clone()
log:Destroy()
				
logClone.CanCollide = false
logClone.Parent = workspace
				
logClone.Position = character.RightUpperArm.Position + character.HumanoidRootPart.CFrame.LookVector
logClone.Orientation = character.RightUpperArm.Orientation
				
local weld = Instance.new("WeldConstraint")
weld.Parent = logClone
weld.Part0 = logClone
weld.Part1 = character.RightUpperArm

I chucked LookVector of the HumanoidRootPart so the part isn’t in the shoulder. (And because of the Animation)

I don’t really know what I’m doing with this CFrame stuff since I just started trying to learn this, I’d appreciate it if someone could walk and explain me through this. Thank you! :smile:

you can clone the log and set it up as before then you create an offset cframe this moves the log 0.5 studs up from the arm’s center and rotates it 90 degrees around the y axis then you can use weld instead of weld constaintst since it’s easier positining you set weld part0 to rightupperarm and part1 to the log ( as long it’s r15) then u set the weld c0 to our offset

local logClone = log:Clone()
log:Destroy()

logClone.CanCollide = false
logClone.Parent = workspace

local offset = CFrame.new(0, 0.5, 0) * CFrame.Angles(0, math.rad(90), 0)

local weld = Instance.new("Weld")
weld.Part0 = character.RightUpperArm
weld.Part1 = logClone
weld.C0 = offset
weld.Parent = logClone
1 Like

Sorry I forgot to mention that this part is a cylinder. This is what happens -

local logClone = log:Clone()
log:Destroy()

logClone.CanCollide = false
logClone.Parent = workspace

-- Adjust these values to fine-tune the position
local offsetX = 0.2  -- Move outward from the arm
local offsetY = 0.5  -- Move up the arm
local offsetZ = 0    -- Adjust forward/backward
local rotationX = math.rad(90)  -- Rotate to be vertical
local rotationY = math.rad(0)   -- Adjust if needed
local rotationZ = math.rad(0)   -- Adjust if needed

local offset = CFrame.new(offsetX, offsetY, offsetZ) 
             * CFrame.Angles(rotationX, rotationY, rotationZ)

local weld = Instance.new("Weld")
weld.Part0 = character.RightUpperArm
weld.Part1 = logClone
weld.C0 = offset
weld.Parent = logClone
1 Like

Thank you! I never knew welds are easy to mess with. I simply adjusted the values from the first script by finding the right values in the game. :smile:

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.