There is actually no reason to use the built-in playerstate for an AI controller as an AI controller will only ever exist on the server whereas player controllers live on the server and their owning client which is why the playerstate even exists: So that other clients can still receive information about a player without having a reference to their controller.
If you want your controller to have a player state like structure you can just create your own UObject and create a new instance of it in the BeginPlay function of your custom AI controller. From then on you can just take this object as the AI’s player state.
What exactly are you trying to achieve by giving an AI controller a player state?
I’m using a heavily modified version of Generic Shooter and I’m trying to set the which team the Bot is playing on. Generic Shooter uses the playerstate, which is way I also want to use the playerstate.
Sure, you could store those stats inside the Pawn in a dedicated UObject or FStructure, but:
unless you also use that specific structure for a player, it’s simply adding useless data and complexity to a player pawn
more importantly, when the pawn is destroyed, you lose all the information it contains, so it is not a convenient way to store stats, that’s why we use PlayerStates
However, in a game with multiple character/pawn controlled by AI, it would not make much sense either to have a PlayerState for each of them (think of the minions in Paragon for instance, you don’t care about their statistics). In other term, I would create both:
a basic AIController (not a companion and does not appear on ladder) without PlayerState, and
a “companion” AIController with a PlayerState, so I can treat him like a Player and see how it evolves with me in the game