There is a delay when changing [rigidbody2D.position]

Performance is not really relevant here. The difference is much more than that.

Using the transform bypasses the physics engine: if the Rigidbody2D is present, then it must catch up and will likely glitch.

Setting _rb2D.position directly is also bypassing and FORCING the position.

If you want to use the physics system, then use it. Call _rb2D.MovePosition()

Here’s more:

With Physics (or Physics2D), never manipulate the Transform directly. If you manipulate the Transform directly, you are bypassing the physics system and you can reasonably expect glitching and missed collisions and other physics mayhem.

This means you may not change transform.position, transform.rotation, you may not call transform.Translate(), transform.Rotate() or other such methods, and also transform.localScale is off limits. You also cannot set rigidbody.position or rigidbody.rotation directly. These ALL bypass physics.

Always use the .MovePosition() and .MoveRotation() methods on the Rigidbody (or Rigidbody2D) instance in order to move or rotate things. Doing this keeps the physics system informed about what is going on.

1 Like