I’ve always found when you’re dealing with systems that there are two approaches. I favor the first of the two.
First my definition of system is something that controls a whole part of a game. Character Control being one, defines anything having to do with player interaction with the character. As you’ve stated above, it can be quite tricky if you need different control mechanisms in one scene, so.
Method 1. I like to put all of the controls in one single script, and have types control what is active, and when. This allows for me to change controls almost instantly, and use the type change to trigger UI changes and other things, like animations, or scripts. Meaning… You’re walking in non combat mode, then all of a sudden wolf pops out of a bush, bool Combat changes from false to true; and based on that change UI, animations, and character behavior/movement controls change.
This would have completely different code for each system, say its a JRPG, but you want to walk around the map like its an RTS until that point, well at the point the battle starts, you’d just change the character controls from point and click movement to no movement, but control of the character through UI choices like ATTACK and USE SPELL. Meanwhile the game UI would change to match this because its all controlled by one bool value switch (Combat == true).
Pros : Having all the control systems in one script saves you from having to go from script to script to change small things, and acts like kind of a base for that entire game system.
Cons: If you’re bad at organizing script syntax and using comments, your going to have a bad time.
Method 2. Do the same idea as above, but split it into different scripts that are activated when modes change. Using a game manager script to do the switching.
Pros: Maybe more organizable?
Cons: I dont like this method.
But to answer your question, that would be refering to method 2 I think, and the best way to manage that is through a manager script/object that stores all the things that are either switched on or off at some point.
EDIT: Additionally since you typically only have one character control script running at a time, unless you’re really really using some expensive functions such as find object and other expensive operations I would not really worry about this being expensive in your game.