yes…if you want to access gamemode variables and functions you must cast (if you do just once and store in a local variable the same class of your gamemode blueprint is better because you can reuse then without casting all the time.
If you know what are you casting then should not fail. You can also use gameinstance instead of gamemode too…Gameinstance persists when you change level (gamemode resets everything and restarts when you load a new level). Gameinstance is defined in the settings of the project in maps & modes