I am trying to change a TextLabel to output the player’s current position, but for some reason neither HumanoidRootPart:GetPropertyChangedSignal(Position), nor HumanoidRootPart:GetPropertyChangedSignal(CFrame) do anything, nothing in the output either.
I would recommend just relying on
HumanoidRootPart.Changed:Connect(function()
-- update TextLabel
end)
I tried that, didn’t do anything
Physics-related properties cannot be detected with GetPropertyChangedSignal nor Changed. Instead use a loop to constantly check the HumanoidRootPart’s position.
game:GetService("RunService").Heartbeat:Connect(function()
print(HumanoidRootPart.Position)
end)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local TextLabel = script.Parent
RunService.Heartbeat:Connect(function()
TextLabel.Text = tostring(HumanoidRootPart.Position)
end)
https://gyazo.com/d23b1e4b7dee3028f2f4a53937df026c
If you want some rounded numbers you can do:
RunService.Heartbeat:Connect(function()
TextLabel.Text = tostring(Vector3.new(math.round(HumanoidRootPart.Position.X), math.round(HumanoidRootPart.Position.Y), math.round(HumanoidRootPart.Position.Z)))
end)
That’s odd, I don’t believe this behaviour is documented. Do you know why this is the case or is it just another one of those unexpected roblox surprises you just have to remember?
Indeed it’s documented.

It just relies on testing and experimenting, Developer Hub just gives basic information that you need.
I know lol, I’ve got everything else done
It’s because physics-related properties change all the time & would essentially result in the “.Changed” event behaving the same as one of the RunService’s event loops.