Why use Update and not FixedUpdate()

I understand that physics calculations should be done in FixedUpdate(). But if one uses FixedUpdate() why not put all their update logic in there? Why use Update() ?

Update is frame rate dependant and FixedUpdate is run at fixed rate. Update is useful when you do not need 100% deterministic results, it most of the time is called less (when the framerate is less than 50 by default). Also, FixedUpdate does not always work with input handling.

In short: if you do not need deterministic results, do not work with fixed rates in networking, use Update.

You should not use FixedUpdate because it doesn’t run every frame. So movement will be jerky, one-time input events such as GetButtonDown will be missed randomly, and so on.