I am making a local script that will close a Gui when a player gets so far from a block but the .Changed event is not firing on the player.Character.Torso when they move, I know I could just use a while loop but I find those inefficient.
Changed
is only fired when a value is set. There is no event to detect movement. You can use DistanceFromCharacter to tell how far away the character is in a while loop, and make sure that it is not equal to 0.