The ‘A’ and ‘U’ prefixes must be dropped in those cases, i.e. APlayerController becomes just PlayerController. This is really just a leftover convention from UE3 when we still had UnrealScript. In UnrealScript, classes would never have prefixes - the prefixes were automatically added only in the C++ side of things.
It’s just one of the so called ‘Unrealisms’ that have crept in over the years. I’m planning to write a blog post about them as soon as I have time
Yeah, I agree, it’s nearly impossible to discover this kind of stuff, but after a while you’ll get used to it.
There is basically a convention between the secret Unreal Engine overlords that all AActor derrived classes start with an ‘A’ and all UObject derrived classes start with an ‘U’. The Engine will strip those prefixes automatically, and it expects you to strip them yourself in certain cases, such as yours.
If you create an Actor class for ‘some cool actor’, then by convention you would have to name your C++ class ASomeCoolActor, and when using it in UCLASS macros you would have to strip the ‘A’ so that it becomes SomeCoolActor, because that’s how the Engine tracks it internally.