Confusing conundrum when working with heads (R6)

I want a simple explanation of the following situation.

I have used a renderSteppped in order to make the head of an R6 character face the location of my character constantly (I don’t care if it goes backwards or whatever) but this for some reason happens.

local Players = game:GetService("Players")
local RS = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local tweenService = game:GetService("TweenService")

local playerMovedEvent = RS.PlayerMoved

local player = Players.LocalPlayer
local character, humanoid, humanoidRootPart
local NPC = workspace.NPCRig

local NPCHead = NPC.Head

player.CharacterAdded:Connect(function()
	character = player.Character
	humanoid = character:WaitForChild("Humanoid")
	humanoidRootPart = character:WaitForChild("HumanoidRootPart")
	
	
end)


RunService.RenderStepped:Connect(function()
	local humanoidRootPartPosition = humanoidRootPart.Position
	
	NPCHead.CFrame = CFrame.new(NPCHead.Position, humanoidRootPartPosition)
	
end)

(I do not even care if it is even that smooth - frankly it is just because of render stepped loop)

I look into other posts and when they move the head, they for some reason call a “C0” object. Can someone please clarify what this is and why what appears to be a dead easy script has to be overcomplicated by solutions. And also, why does my thing turn out like this, is there something to do with welds as the head is connected to the rest of the character?

To move the head by itself you need to use a Motor6D

Why? Why is moto6d preferred for animations than welf/weldConstrains?

Because the bot is face words the HumanoidRootPart which is like below the player a bit. Try using the Humanoid or the Torso or Head.

Oh no, the error I am worried about is how the npc just floats, I don’t mind where he looks, it just need to be around my same vicinity.

Oh sorry I didn’t see that. I don’t have much to say besides just changing at the object the bot is looking at.