what's the easiest way to make a complex camera movement? For example, the camera pushing in towards an object while also orbiting around it?
I know how to do those things separately, but not together.
If you are animating the camera's motion, the simplest way is to position the camera where you want it to start; keyframe location; move it to where you want it to end; and keyframe location. This gives you an F-Curve that you can tune in the graph editor to give you precisely the in-between positions you want.
If you are looking for ways to automate that specific motion, one technique that I've used successfully is to create a BezierCircle, give the camera a Follow Path constraint for the circle and a Track To constraint for the object and then use a driver to control the circle's scale, driven by the the circle's Path Animation Evaluation Time. Details follow:
At the origin, in object mode:
At this point, you can move the empty to wherever you want the object and the following will work.
Change Average Value to Scripted Expression. Enter an expression in the expression box and click Update Dependencies. Because Evaluation time causes the camera to orbit completely by going from 0 to 100, I picked
(100 - eval_time) / 200.0 + .5 to cause the camera to move half way towards the object over a full rotation.
But you also need to scale Y, so right click X Scale, select Copy Driver, right click Y Scale and select Paste Driver.
Now, as you scroll evaluation time, the camera will both orbit and approach.