I belive the easiest way is having a first person character blueprint and a third person character blueprint (Or a Pawn, depending on what your game needs).
Both might have individual components (like Spring Arm), meshes, animations and most important input handling (like third person orbiting).
So when the time has come to switch from one to the other mode:
- Instanciate the new Pawn/Character with the other mode
- Unposses the current Pawn/Character and with that the current mode
- Give the new pawn all the data he needs to know (position, rotation, velocity, animation state, health, ammo etc. everything that needs to be the same as before and is saved in your pawn)
- Posses the new Pawn
- Delete the old Pawn
- Next Frame you will see from the eyes of the new Pawn’s camera
I hope this makes sense. If not just try to experiment with posses and unposses and you will get the idea.
The GameMode setting determines only the Pawn that is created and auto-possesed at a PlayerStart Actor when the level begins. That does not mean you have to use it all level long. I do not use this mechanic at all for my current project. You can also place a Pawn in your level and on Begin play you posses it from within your player controller, this is fully legitimately too.