C++ 如何通过UACTOR组件获取参与者列表?

C++ 如何通过UACTOR组件获取参与者列表?,c++,unreal-engine4,C++,Unreal Engine4,我希望通过演员组件列表过滤所有场景演员 基斯米特图书馆有 静态无效GetActorListFromComponentList ( 常量TArray&组件列表, UClass*ActorClassFilter, TArray&OutActorList ) 但我需要的是这样的东西: static void GetActorListFromActorComponentList ( const TArray < class UActorComponent * > & Co

我希望通过演员组件列表过滤所有场景演员

基斯米特图书馆有

静态无效GetActorListFromComponentList
(
常量TArray&组件列表,
UClass*ActorClassFilter,
TArray&OutActorList
) 
但我需要的是这样的东西:

static void GetActorListFromActorComponentList
(
    const TArray < class UActorComponent * > & ComponentList, // Note the TArray<> element type
    UClass * ActorClassFilter,
    TArray < class AActor * > & OutActorList
) 
静态无效GetActorListFromActorComponentList
(
const TArray&ComponentList,//注意TArray元素类型
UClass*ActorClassFilter,
TArray&OutActorList
) 

Kismet中是否有具有类似功能的函数?

原语组件实际上是一个actor组件,因此您可以将此函数的实现复制到代码中,并用UActorComponent替换UPrimitiveComponent条目

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);
                }
            }
        }
    }
}
void GetActorListFromComponentList(常量TArray和ComponentList,UClass*ActorClassFilter,TArray和OutActorList)
{
OutActorList.Empty();
对于(int32 CompIdx=0;CompIdxGetOwner();
如果(所有者)
{
如果(!ActorClassFilter | |所有者->IsA(ActorClassFilter))
{
OutActorList.AddUnique(所有者);
}
}
}
}
}
或者制作一个模板

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);
                }
            }
        }
    }
}
模板
void GetActorListFromComponentList(常量TArray和ComponentList,UClass*ActorClassFilter,TArray和OutActorList)
{
OutActorList.Empty();
对于(int32 CompIdx=0;CompIdxGetOwner();
如果(所有者)
{
如果(!ActorClassFilter | |所有者->IsA(ActorClassFilter))
{
OutActorList.AddUnique(所有者);
}
}
}
}
}
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);
                }
            }
        }
    }
}