GetOverlappingComponents()
在这一篇文章中,我们继续完善 Box 组件。我们获取与之重叠的 Actor,并将它们的名字打印出来。
我们可以通过调用 UPrimitiveComponent::GetOverlappingActors() 函数来实现。该函数会获取当前组件正在 重叠 的所有 Actor 对象。它有多个重载版本,以下是我们这篇文章中会使用到的版本:
- void UPrimitiveComponent::GetOverlappingActors(
- TArray<AActor*>& OutOverlappingActors,
- TSubclassOf<AActor> ClassFilter) const;
其中,OutOverlappingActors 参数返回所有与该组件重叠的 Actor;ClassFilter 参数是可选的,指定一个 AActor 的子类作为过滤条件,只返回该类型的重叠对象。
代码清单 1 是逻辑的具体实现,在 Tick 函数中,我们调用 GetOverlappingActors() 函数,然后遍历打印所有重叠对象的名字。
- // Called every frame
- void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
- {
- Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
- TArray<AActor*> Actors;
- GetOverlappingActors(Actors);
- for (int32 i = 0; i < Actors.Num(); i++)
- {
- FString ActorName = Actors[i]->GetActorNameOrLabel();
- UE_LOG(LogTemp, Display, TEXT("Overlapping: %s"), *ActorName);
- }
- }
运行程序。如图 1 所示,当我们的人物角色拿着雕塑同时进入门的凹槽内部时,控制台中打印了人物角色的 Actor 名字和雕塑的 Actor 名字。
