Примитивный компонент на самом деле является компонентом-субъектом, поэтому вы можете просто скопировать реализацию этой функции в свой код и заменить записи UPrimitiveComponent на UActorComponent.
void GetActorListFromComponentList(const TArray<UActorComponent*>& ComponentList, UClass* ActorClassFilter, TArray<class AActor*>& OutActorList)
{
OutActorList.Empty();
for (int32 CompIdx=0; CompIdx<ComponentList.Num(); ++CompIdx)
{
UActorComponent* const C = ComponentList[CompIdx];
if (C)
{
AActor* const Owner = C->GetOwner();
if (Owner)
{
if ( !ActorClassFilter || Owner->IsA(ActorClassFilter) )
{
OutActorList.AddUnique(Owner);
}
}
}
}
}
или создать шаблон события
template<typename TComponent, typename TAllocator>
void GetActorListFromComponentList(const TArray<TComponent*, Allocator>& ComponentList, UClass* ActorClassFilter, TArray<class AActor*>& OutActorList)
{
OutActorList.Empty();
for (int32 CompIdx=0; CompIdx<ComponentList.Num(); ++CompIdx)
{
TComponent* const C = ComponentList[CompIdx];
if (C)
{
AActor* const Owner = C->GetOwner();
if (Owner)
{
if ( !ActorClassFilter || Owner->IsA(ActorClassFilter) )
{
OutActorList.AddUnique(Owner);
}
}
}
}
}