Movement in Unity is usually done through two different methods, either using the Transform of the gameobject or using its rigidbody.
Directly changing the transform of the gameobject in order to move it a certain distance per frame, will ignore the physics system. This way, the gameobject’s velocity will be ignored and will not care for collisions. This method is best suited if physics is not necessary, teleporting for example.
Moving an object using its rigidbody allows that object to use the physics system. Allows its velocity to be manipulated or acceleration, and allows for further interaction with other objects. More importantly, it is much more smoother than Transform.Translate. There are three ways to move an object’s rigidbody.
Rigidbody.Addroce() is like pushing an object and giving it a force to move or like pushing the pedal of the car to accelerate. Force is added constantly with time increasing the velocity of the object. If no force is added, the object slows down due to gravity and friction or if it hits an object.
Almost like AddForce, this will add a constant rate over time to the object but without the acceleration and thus overriding all physics elements including gravity. The object is either moving, or it isn’t.
This resembles Transform.Translate but it allows for physics interactions and it is way more smoother. This will add the object to a specific position based on direction and speed). Just keep in mind that, if the speed is set too high, the object almost ignore collisions.
So which one would you use? That depends on what you actually want from that specific object that you want to move.