As an exercise I've tried to write a simple C# script to do something like you've described above. I hope this helps as a starting point for your own:
using UnityEngine;
public class CamSwitcher : MonoBehaviour {
public CamSpotInfo[] spots;
[Range(0.1f, 3.0f)] public float anim_speed = 0.3f;
protected int idx = 0;
protected float t_accum = 0.0f;
void Update() {
Transform cam = Camera.main.transform;
cam.position = Vector3.Lerp(cam.position, spots[idx].transform.position, t_accum);
cam.LookAt(spots[idx].target); /* TODO: interpolate target positions */
t_accum += Time.deltaTime * anim_speed;
}
void OnGUI() {
if (GUI.Button(new Rect(10, 70, 200, 30), "next spot: " + spots[idx].name)) {
if (++idx >= spots.Length)
idx = 0;
t_accum = 0.0f;
}
}
}
[System.Serializable]
public class CamSpotInfo {
public Transform transform;
public Transform target;
public string name;
}
In order to assign new "camera spots" to the array, set the "Size" manually in the Unity inspector first and then drag new GameObjects/transforms from the scene Hierarchy window to the individual elements of the array in the Inspector (these can for example just be empty game objects indicating the camera position for each "camera spot"). Then assign camera targets to each element in the array, you want the main camera to look at at each "camera spot" (e.g. wheels). And finally, enter a name for each element that will be displayed on the GUI button.
In this example, there will be only one GUI button displayed in Play Mode, which is used to switch to the next "spot" in the array. But you can easily modify the script to make the camera switch to specific elements directly...

(Not sure if this is really a good question for this site, since it is quite open-ended, since there are so many different ways to come up with possible solutions for such a feature (many different areas involved, like camera motion controller, path interpolation, GUI etc.)).
EDIT: Multiple GUI Buttons
Here is a modified version of the script above, that uses multiple GUI buttons, one for each camera spot. Each one can be enabled/disabled in the inspector via the "Show GUI" checkbox:
using UnityEngine;
public class CamSwitcher : MonoBehaviour {
public CamSpotInfo[] spots;
[Range(0.1f, 3.0f)] public float animSpeed = 0.3f;
protected uint idx = 0;
protected float t = 0.0f;
void Update() {
Transform cam = Camera.main.transform;
Vector3 dir_target = spots[idx].target.position - cam.position;
Quaternion roti = Quaternion.LookRotation(dir_target);
cam.position = Vector3.Lerp(cam.position, spots[idx].transform.position, t);
cam.rotation = Quaternion.Slerp(cam.rotation, roti, t);
t += Time.deltaTime * animSpeed;
}
void OnGUI() {
Rect rect = new Rect(10, 70, 200, 30);
for (uint i=0; i<spots.Length; ++i) {
if (spots[i].showGUI) {
if (GUI.Button(rect, "switch to " + spots[i].name)) {
idx = i;
t = 0.0f;
}
rect.y += rect.height + 5;
}
}
}
}
[System.Serializable]
public class CamSpotInfo {
public Transform transform;
public Transform target;
public string name;
public bool showGUI = true;
}