When should I move/rotate an object by looping through and changing the CFrame, using RunService, TweenService, or creating an animation?
If you need to animate the object then TweenService is the best way to go (be aware, it’s less smooth if performed on the server),
if you need to teleport the object then changing its CFrame is the best (and only, probably) way to do it.
I’m not sure about any case in which you’d want to use RunService to animate or move an object, unless you need to rotate or move the item specifically every frame.
If the object is something allied to a player you could use animations (almost never happens unless its 3D clothing or something similar)
Whenever you want to move an object from 1 point to another you should either use TweenService OR Lerp. I personally use TweenService more but in some cases you’ll have to use lerp especially if your going for some advanced math and/or CFrame.
I never considered using RunService to move a part to be honest so I cant tell you much about that.
Animation
- When you doing anything movement related for a character, pet or other NPC (humanoid, dragon, dog, snake, etc) that replicates to other players
- When you’re performing an action scene where characters will move in a defined and reliable way (cutscenes)
CFrames
- Use for dynamic and typically non-complex movement that should be mechanically reliable (flight system, bullet physics, bouncy ball)
Physics Based objects
- When you want to rely on Roblox’s physics system to define object interaction (hockey puck, basketball, JENGA!, car wheels)
- When you want to forcefully move a physics bound core object, such as your character’s look direction (BodyGyro) without interfering with other systems
RunService
- Typically used for rendering tasks, such as dynamic gun physics, 60 FPS loop
Heartbeat
- 30FS - I used this typically for math operations that need to happen regularly - where I want figures calculated every frame, but not at 60fps
TweenService
- good for repeating a smooth transition reliably
I wish I had more examples but I’m short on time.