Best way to manage multiple camera angles?

A few times now i've had to have alternative camera angles that i move between. Both ways seemed non-optimal to me so i thought i'd ask what the "right" way of doing this is. Here are the two ways i've tried this.

  • Make multiple actual cameras in the scene and setup accordingly. Then at runtime enable and disable the cameras (and their sound listeners) as required.
    • Pros: Able to actually preview the cameras in the editor whilst positioning them
    • Cons: Fiddly runtime tasks and i get the impression this is not really what multiple cameras are for, rather for multiple simultaneous views
  • Make a single camera and multiple camera "proxies" (out of empty gameobjects) in the scene. At runtime just copy the relevant camera proxy details into the main camera for snaps or lerp as required for blends.
    • Pros: Intuitive, flexible and efficient at runtime
    • Cons: Horrible to setup in the editor, you basically have to run the game to get the camera proxy activated to be able to test its orientation, this really slows things down!

As you can see both options have their issues. I've not tried using a combination of the two, multiple cameras but only copying the details from the other cameras as required. May be an option, i'm just concerned at whether its a performance problem to have too many cameras, especially ones that will never actually be looked through directly.

As ever, thanks for your time

Do both. Set everything up using new camera objects, but then in game just change your main camera to use their orientation.

There is no performance penalty for having multiple inactive cameras, unless it's some weird Unity idiosyncrasy.

You could also use the Unity Gizmos to actually draw the layout in the editor. you could:

  • Create an empty object (A)
  • Put an empty object (CAM) inside (A) with a camera gizmo (Gizmos.drawIcon)
  • Put another empty object (TARGET) inside (A) with a target gizmo (Gizmos.drawIcon)
  • Make (A) draw a line from (CAM) to (TARGET) with Gizmos.drawLine

this way every place you want to be able to change to has all variables set up. Also, it allows you to preview everything in your editor.

Of course this lacks a sense of how big the camera viewport would be compared to the surroundings, but you can also make use of Camera.DrawWireCube to solve this. (obviously, you'd have to rotate this cube and rescale it to match the line's rotation)

Hope this helps.

If this is during cutScene, why not just use a single camera and animate it in the Anim Editor?

If this is for in-game, What Peter said....