Objects not updating positions with physics?

I’ve been working on some scripts that allow players to manipulate parts in the game. To ensure as much accuracy as possible, I have been using connections to update the displayed positions and orientations. However, whenever the part is moved by gravity, the position values don’t seem to trigger the events or even update (on BOTH server and client). I have been looking around and found nothing that might explain why this happens, or even how to get around it. I’ve already tried even getting the position of the parts every frame and from the sever using remote events, to no avail.

-- part is a reference to either a model or basepart object
-- connection is just a variable to make it easy to clean up the events
if part.ClassName == "Model" then
	connection = part:GetPropertyChangedSignal("WorldPivot"):Connect(function()
		print(part.WorldPivot)
	end)
else
	connection = part:GetPropertyChangedSignal("CFrame"):Connect(function()
		print(part.CFrame)
	end)
end

The script section above works perfectly whenever the CFrame or WorldPivot of the BasePart/Model are updated from a script, however, if the part falls due to gravity, the values don’t seem to update. Any ideas as to how to get around this?

Here’s an example of what the game does:
image

The handles are where the properties SAY the part is, but the dummy is clearly at a different position.

As a workaround, you could weld the part that shows those handles to the player and then that will move with physics as well. I think this may be because the position and cframe values do not update with physics. I have no idea how to fix this issue other then to reread the values like you are. Are you sure that you’re reading them from the same network that you’re setting them. For example, does the model only fall on the client but you’re reading it from the server?

All updates to objects are made through events to the server, and I don’t change the network owners. The problem is, the positions and CFrames don’t update when the object falls to gravity. The result is the same for both client and server data, and I’ve tried reading it every frame instead of events for the same result. The problem is I need accurate position data to make moving the object reliable in each direction.

Edit: I have a feeling this is more of an bug than a scripting problem, but I guess that depends on if this is intended or not?

Try using model “GetPivot” method as opposed to just reading the value.

The result is the same. The values just don’t update when the physics engine moves the part.

It’s not that the values don’t update, it’s just that signals related to their update won’t fire. Try indexing pivot position on runservice.stepped to read off fresh positional values. I THINK this will work

Sorry for the late reply. So after testing again with what you’ve said, that DOES work for normal parts, however, not for models. It seems it works for models only if you use GetPivot() (instead of WorldPivot) while checking every simulation step, so I’ll have to use this (annoyingly less efficient) method. Thanks for the help!