Ok so you need to instantiate the abilities as objects.
Class/UClass/TSubclassOf types are just templates/descriptors of object types, but not actual objects.
In addition to your array of classes (which is basically the configuration), declare a second array for the instances :
UPROPERTY(EditAnywhere)
TArray<TSubclassOf<UAbility>> AbilitiesClasses;
UPROPERTY(Transient)
TArray<UAbility*> Abilities;
Then in something like PostInitializeComponents or BeginPlay (not in constructor!), instantiate the classes into objects :
voir APlayerEntity::BeginPlay()
{
Super::BeginPlay();
Abilities.Reserve(AbilitiesClasses.Num());
for (const auto& Class : AbilitiesClasses)
{
UAbility* Ability = NewObject<UAbility>(this, Class);
Abilities.Emplace(Ability);
}
}
void APlayerEntity::CastAbility1()
{
Abilities[0]->CastAbility();
}