Just a loop that constantly updates the BodyPosition’s Position, the bodyPosition is right, the part itself is not
local humRootPart = character.HumanoidRootPart
local bodyGyro = script.Parent.PrimaryPart.BodyGyro
local bodyPos = script.Parent.PrimaryPart.BodyPosition
while wait() do
bodyPos.Position = humRootPart.Position + Vector3.new(2, 2, 3)
bodyGyro.CFrame = humRootPart.CFrame
end
in that gif I was using alignposition and alignorientation along with a custom attachment that i add in characteradded. this is how my studio looked and here is the script i used:
game.Players.PlayerAdded:Connect(function(v)
v.CharacterAdded:Connect(function(d)
game.ServerStorage.Part.PartAttachment:Clone().Parent = d:WaitForChild('Head')
local ao = Instance.new('AlignOrientation', d:WaitForChild('Head'))
local ap = Instance.new('AlignPosition', d:WaitForChild('Head'))
ao.Attachment0 = workspace.Part.Attachment
ao.Attachment1 = d:WaitForChild('Head'):WaitForChild('PartAttachment')
ap.Attachment0 = workspace.Part.Attachment
ap.Attachment1 = d:WaitForChild('Head'):WaitForChild('PartAttachment')
end)
end)
(script is kinda messy cause i was just doing it manually in studio but does show how to do it)
The reason this is happening is because the positioning along the vectors isn’t correlating with the Players position.
I’d recommend using Humanoid.CFrame.LookVector * -2 and Humanoid.CFrame.RightVector * -2. I’m away at the moment so unable to test.
But using this method will mean that the BodyPosition is constantly directly behind the Players HumanoidRootPart & constantly to the Right of the Players HumanoidRootPart, no matter what direction they are looking!
Hope this helps, feel free to ask anymore questions.