One design challenge that I faced was creating a Base Player that would contain all of the player code while also creating some unique special abilities for those players. Everything was going fine with 3/4 players. Just override the 'UseSpecial()' function. Except for 2 reasons. 1. I needed a way to keep the common code in the Base Player and 2. the fact that the Captain brings up a menu, which they can cancel.
I worked around this by making the UseSpecial() return a bool. This helped by calling the UseSpecial() in an if statement in the base player which allows all the common code to trigger IF it returns true. This allows the Captain to 'EnterTheMenu' 'LeaveTheMenu' and 'Teleport'; where entering and leaving returns false; and Teleport returns true to trigger the common code.
I also created a component that would allow for animation montages to player on the Third and First person meshes that the designers could throw in the montages they want to play. The component could be added and you give it a reference to the third and first person mesh. The animation blueprint could handle blending the animations the way they were supposed to.
Check out more projects below