tl;dr: Get Game State [HR][/HR]
There’s a bunch of framework classes in the engine - game instance / mode / state, player controller and so on. You can choose to override one or more of them. If you do, you can still use the Get Game Instance node or the *Game Game State *node - this will give you access to the base class. But if you need the access to the custom overridden one you extended yourself, you need to cast - you need to tell the engine which particular class you need since there can be more than one!
Let’s say you have 3 player controllers (because you have 3 vehicle types, for example), you can always *Get Player Controller *from anywhere in the game, this gives you the base object, and now you need to cast because you need a particular one. In this level we’re flying a jet, which handles quite differently to the footsoldier.
Casting has little to do with communication, it just ensures you’re referring to the correct object type. Also, you will find as many explanations of this as there are people so hold tight!
Keep the questions coming if things are unclear.