You need to understand what each one does. Update()
gets called as often as possible (not sure, maybe it can be capped), either way - each frame. FixedUpdate()
gets called every constant amount of time (hence "fixed").
Input goes into Update()
, as simple as that (because as you noticed FixedUpdate()
might not catch the input event). Game logic however might go into either one. Physics needs to be deterministic and that's why it should be in FixedUpdate()
. Other things don't have to. Depending on the usage you have to decide which function is appropriate.
Althouth it's worth to say that some applications have all game logic update in FixedUpdate()
(even outside of Unity
) - it's called "fixed step game loop". Having all update code in a fixed step function gives you determinism and makes your app more likely to behave the same way each time (and on each device). Also allows for some fancy features, like replays.