Updating a Part's CFrame to match a character's HumanoidRootPart is delayed

I am trying to get a part’s CFrame to match the CFrame of a HumanoidRootPart.
However, when I do this, the orientation of the part seems to be delayed by at least one frame. I am currently updating the code in a PreRender loop. The bizarre thing is the position perfectly matches the HumanoidRootPart despite the orientation always being off.

I’ve tried switching RenderStepped with PreRender and :BindToRenderStep (using Enum.RenderPriority.Last) yet this still doesn’t get the orientation to update properly.

Code:
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")

local localPlayer = Players.LocalPlayer
local character = localPlayer.Character
local humanoidRootPart = character.HumanoidRootPart

local testPart = Instance.new("Part")
testPart.CanCollide = false
testPart.Anchored = true
testPart.Parent = workspace

local function updatePart()
	testPart.CFrame = humanoidRootPart.CFrame
end

RunService.RenderStepped:Connect(updatePart)

Video of issue (notice how the part follows my position without delay but not my orientation)

Try using Heartbeat instead of RenderStepped.

All you gotta do is change the last line to RunService.Heartbeat:Connect(updatePart).

Unfortunately doing that did not fix the issue :pensive:

Alright let’s try to change the updatePart function.

So instead of changing the CFrame let’s change the Position and Orientation seperately.

So here’s the new function:

local function updatePart()
	testPart.Position = humanoidRootPart.Position
	testPart.Orientation = humanoidRootPart.Orientation
end

I just tried that (one time with Heartbeat and another time with RenderStepped) and that had the same issue in both cases.

If the part isn’t anchored, you probably want to reduce it’s mass via density.

That doesn’t change anything as I’m positioning the part by setting its CFrame and not with BodyMovers (also the part is anchored anyways)