I think you should pull this out of the player profile (decouple it) and put it in an ActorComponent which you can inject into the GameState / GameMode. Normally it is the GameMode its task to set up rules when a player scores / does something / is allowed to do something and its the GameState its purpose only to hold a state of the score. This is mostly for networking reasons but in your situation perfect for decoupling your code, usually saves a ton of time. Personally I start a level, figure out what “score rule” component to inject into the GameMode and do that. The component registers any relevant events or listens to events on spawned actors like your zombies (observer pattern using delegates). The component could then decide that when a zombie is hit by the player the score will increase. No modifications made to the zombies or the player. Bonus feature is that to swap out to a different game mode (think deathmatch to capture the flag) you can just swap out one component for another on the GameMode.
1 Like